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.

ActiveDirectory: Liste aller Computer mit Betriebssystem in einer OU erstellen

Diese PowerShell Zeile erstellt eine Liste alle Computer aus dem ActiveDirectory mit Name und Betriebssystem:

Get-ADComputer -Filter * -Property * -searchbase "OU=MEINEOU, DC=DOMAENE, DC=DOMAENETLD" -searchscope 1 | Format-Table Name,OperatingSystem -Wrap -Auto

Das Ergebnis, vor allem dessen Spalten, lassen sich über die Properties in „Format Table“ anpassen und erweitern. Mehr Beispiele folge sicher noch, aber aus reiner Faulheit sei dieser Schnippsel (den ich öfter benötige) hier schon mal abgelegt 🙂

Windows RDP (Terminal Server) TCP Port 3389 ändern und/oder einen zusätzlichen Port hinzufügen

Problem

Der TCP-Listener 3389 (standart) soll auf einen anderen port geändert werden. Zum Beispiel weil ein gewisser großer ISP Plasitkabfall als „Zwangsrouter“ für seine Leitungszugänge verwendet.

Lösung

Das geht problemlos und schnell in der Registry (ein GUI dazu gibt es nicht):

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp
PortNumber (REG_DWORD(32)) = 3389 (dezimal)

Diesen REG_DWORD Wert wie gewünscht ändern, die Terminaldienste neu starten, fertig.

Zusätzlichen Listener hinzufügen

Windows Pro kann bis zu 64 RDP-Listener starten, Windows Server sogar noch mehr (mehr als 102 haben wir bisher noch nicht gebraucht). Dazu wird der Zweig „RDP-TCP“ mit einem neuen Namen (z.B. RDP-TCP-3390) kopiert und der REG_DWORD Wert „PortNumber“ in der Kopie entsprechend angepasst. Am einfachsten geht das via export > bearbeiten > import. Pro Schlüssel entsteht ein Listening Port mit den zugehörigen Einstellungen.