Festlegen der Parameter "ComputerName" und "Credential"

Beim Erstellen benutzerdefinierter Skripte wird der Zieltyp in den Metadaten des Skripts angegeben. Beachten Sie den Zieltyp, wenn Sie das Skript schreiben. Die erste Überlegung beim Schreiben des Skripts betrifft den Einschluss der Parameter "ComputerName" und "Credential" in die Befehle. Die ITScripts-Umgebung liefert den Computernamen in der Variable "ST_ComputerName" und die Anmeldeinformationen für diesen Computer in der Variable "ST_Credential". Geben Sie beispielsweise beim Schreiben eines Skripts mit dem Zieltyp "Any" den folgenden Befehl ein:

Get-WmiObject win32_Share -ComputerName $ST_ComputerName -Credential $ST_Credential

Dieser Befehl wird jedoch bei Ausführung auf dem lokalen Computer mit folgendem Fehler fehlschlagen:

Get-WmiObject: Anmeldeinformationen für Benutzer dürfen nicht für lokale Verbindungen verwendet werden.

Der Befehl wird erfolgreich ausgeführt, wenn der Zieltyp "Any" lautet und der Zielcomputer nicht die Konsole ist. In folgenden Fällen schlägt der Befehl allerdings fehl:

  • Der Zieltyp lautet "Console".
  • Der Zieltyp lautet "WinRM Remoting".
  • Der Zieltyp lautet "Any" und das Ziel ist der Konsolencomputer.

Damit diese Situationen berücksichtigt werden können, sollte Ihr Skript prüfen, ob Remoting verwendet wird oder ob das Ziel der Konsolencomputer ist. Für die vereinfachte Skripterstellung stellt ITScripts zwei Funktionen zur Verfügung: ST-ComputerAndCredential und ST-SubCC.

ST-ComputerAndCredential

Diese Funktion gibt eine Zeichenfolge zurück. Diese enthält den betreffenden Wert für die Parameter

-ComputerName und -Credential. Dabei wird neben dem Skripttyp berücksichtigt, ob es auf der Konsole ausgeführt wird und ob für den Computer Anmeldeinformationen angegeben wurden. Es wird eine der folgenden Zeichenfolgen zurückgegeben:

“-ComputerName $ST_ComputerName –Credential $ST_Credential”

“-ComputerName $ST_ComputerName”

“”

Sie können dies in Ihrem Skriptbefehl verwenden, unabhängig davon, in welcher Umgebung Sie es ausführen. Zum Beispiel:

$cc = ST-ComputerAndCredential

$shares = Invoke-Expression "Get-WmiObject win32_Share $cc"

"Invoke-Expression" wird zum Ersetzen des Werts von "$cc" verwendet, bevor der Befehl ausgeführt wird. Achten Sie darauf, dass Sie Sonderzeichen in Ihrem Befehl zwischen Escapezeichen setzen. So müssen etwa das $-Zeichen und die Anführungszeichen im folgenden Befehl zwischen Escapezeichen gesetzt werden:

$ST_CC = ST-ComputerAndCredential

$registryObject = Invoke-Expression "Get-WmiObject -list

-namespace root\default $ST_CC |

where-object { `$_.name -eq `"StdRegProv`" }"

Bei Verwendung der folgenden Funktion ist das noch einfacher.

ST-SubCC

Die Funktion kombiniert die beiden Befehle aus dem vorherigen Beispiel. Beim ersten Aufrufen wird das Ergebnis von "ST-ComputerAndCredential" in die PowerShell-Variable "ST_CC" eingefügt. Der daraus resultierende Befehl wird anschließend an "Invoke-Expression" übergeben. Wichtig bei der Verwendung von "ST_SubCC" ist, dass der Befehl zwischen einfache Anführungszeichen (nicht doppelte) gesetzt werden muss. So sähen die vorherigen Beispiele aus:

$shares = ST-SubCC ‘Get-WmiObject win32_Share $ST_CC’

 

$registryObject = ST-SubCC ‘Get-WmiObject -list

-namespace root\default $ST_CC |

where-object { $_.name -eq "StdRegProv" }’