PowerShell: Gruppen aus dem ActiveDirectory mit ihren Mitgliedern auflisten

Problem

Eine Management-Anforderung:

Bitte erstellen sie mal eben eine Liste alle Gruppen aus unserem ActiveDirectory mit allen Mitgliedern darin. Oh, am besten sowohl der DisplayName und auch der ganze LDAP-Pfad – und wenn es verschachtelte Gruppen, gibt nur den Gruppennamen.

Lösung

Der finde Admin weiss: So eine Liste ist, einmal erstellt, recht statisch und daher über die Zeit mehr und mehr realitätsfern, aber das zu erstellen ist natürlich ein Problem. Die Ausgabe ist natürlich ein schneller Hack, der erfahrene Admin baut selbstverständlich besser erst ein Objekt zusammen und wendet auf dessen Eigentschaften eine ausgabemethode an.

$Groups = Get-ADGroup -Properties * -Filter *
Foreach($G In $Groups) {
    $G.Name         | Out-File -Append .\gruppenliste.txt
    "---------------------" | Out-File -Append .\gruppenliste.txt
    $G.Members      | Out-File -Append .\gruppenliste.txt
    }

Die Gruppenliste liße sich selbstverständlich auch Filtern, zum Beispiel „Nur Gruppen die ‚rothaarig‘ im Namen haben“:

# $Groups = Get-ADGroup -Properties * -Filter {name -like "*rothaarig*"}

psexec „Das System kann die angegebene Datei nicht finden.“

Problem

Warum funktioniert PSEXEC (aus den Sysinternal tools) scheinbar sporadisch nicht? Zum Beispiel funktioniert der Befehl:

psexec \\SERVER net start <FOOBAR>

fehlerfrei, aber dieser Befehl hingegen

psexec \\SERVER rd /Q /S <C:\FOOBAR>

funktioniert nicht und gibt die scheinbar sinnlose Fehlermeldung „Das System kann die angegebene Datei nicht finden.“ zurück.

Lösung

PSEXEC führt im Standardfall nur Prozesse aus. „net“ ist ein normales Programm (net.exe), also ein Startbarer Prozess. „rd“ hingegen, wie auch „dir“, „type“, „find“ und so weiter sind keine externen Programme, sondern Befehle der Shell, also Kommandos des Prozesses CMD. Um diese auszuführen, muss man also eine CMD-Shell via PSEXEC starten und dieser Shell dann die Kommandos übergeben.

Das Beispiel funktioniert fehlerfrei so:

psexec \\SERVER cmd /c rd /Q /S <C:\FOOBAR>

Der Parameter „/c“ für CMD.EXE Führt den Befehl in der Eingabe einfach aus und endet dann.

Powershell Fehler „0x80131515“ beim laden von Modulen (Import-Module)

Problem

Ein neues Powershell Modul oder Script möchte nicht geladen werden, stattdessen gibt es den Fehler:

Import-Module : Die Datei oder Assembly 
"file:///C:\Windows\system32\WindowsPowerShell\v1.0\Modules\NTFSSecurity\FOOBARNAME.dll" oder eine Abhängigkeit davon 
wurde nicht gefunden. Der Vorgang wird nicht unterstützt. (Ausnahme von HRESULT: 0x80131515)
In Zeile:1 Zeichen:1
+ Import-Module NTFSSecurity
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Import-Module], FileLoadException
    + FullyQualifiedErrorId : System.IO.FileLoadException,Microsoft.PowerShell.Commands.ImportModuleCommand

Lösung

  1. .NET Framework 2.0 Installieren
    Install-WindowsFeature Net-Framework-Core -source \\HOST\PFAD\sxs
  2. NTFS-Feature „Zulassen“ auf den entsprechenden Dateien aktivieren
  3. Die gute alte Execution-Policy anpassen
    Set-ExecutionPolicy Unrestricted

Warum die ansonsten zu überaus clevere Scripting Guys allerdings ein „Datei nicht gefunden“ an dieser Stelle ausgeben ist uns ein Rätsel.

Windows Server-Sicherung: „Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch“

Problem

Der „Windows Server Sicherung“ Zeitplan-Assistent meldet unter 2008/2008R2/212 diesen Fehler beim Hinzufügen oder entfernen eines neuen Sicherungs-Datenträgers:

Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch

Es ist nicht möglich eine Festplatte oder ein anderes Sicherungsziel über den Assistenten zu entfernen oder hinzuzufügen, außer man legt den Job komplett neu an.

Lösung

  1. CMD als Administrator starten
  2. Liste der aktuell angeschlossenen Datenträger anzeigen:
    wbadmin get disks
  3. Die hinzuzufügende Datenträger-ID (z.B. „{affeaffe-0000-0000-0000-0000f0000000}“ als Ziel hinzufügen …
    wbadmin enable backup -addtarget:{ID}

    … oder entfernen.

    wbadmin enable backup -removetarget:{ID}

Fertig. Dieser Fehler im GUI ist seit Jahren vorhanden, wir bezweifeln das das jemals gefixt wird. Uns ist zudem (bisher) keine Möglichkeit bekannt, Volumen-IDs im Nachhinein auszulesen; eine verwaiste USB-Platte wird also vermutlich noch lange in der Ziel-Liste verbleiben.