Invoke-Command
Führt Befehle auf lokalen Computern und auf Remotecomputern aus.
Syntax
Invoke-Command [-ScriptBlock] <scriptblock> [[-ComputerName] <string[]>] [-ApplicationName <string>] [-AsJob] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-CertificateThumbprint <string>] [-ConfigurationName <string>] [-Credential <PSCredential>] [-HideComputerName] [-JobName <string>] [-Port <int>] [-SessionOption <PSSessionOption>] [-ThrottleLimit <int>] [-UseSSL] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]
Invoke-Command [-FilePath] <string> [[-ComputerName] <string[]>] [-ApplicationName <string>] [-AsJob] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-ConfigurationName <string>] [-Credential <PSCredential>] [-HideComputerName] [-JobName <string>] [-Port <int>] [-SessionOption <PSSessionOption>] [-ThrottleLimit <int>] [-UseSSL] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]
Invoke-Command [-FilePath] <string> [[-Session] <PSSession[]>] [-AsJob] [-HideComputerName] [-JobName <string>] [-ThrottleLimit <int>] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]
Invoke-Command [-FilePath] <string> [[-ConnectionURI] <Uri[]>] [-AllowRedirection] [-AsJob] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-ConfigurationName <string>] [-Credential <PSCredential>] [-HideComputerName] [-JobName <string>] [-SessionOption <PSSessionOption>] [-ThrottleLimit <int>] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]
Invoke-Command [-ScriptBlock] <scriptblock> [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]
Invoke-Command [-ScriptBlock] <scriptblock> [[-Session] <PSSession[]>] [-AsJob] [-HideComputerName] [-JobName <string>] [-ThrottleLimit <int>] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]
Invoke-Command [-ScriptBlock] <scriptblock> [[-ConnectionURI] <Uri[]>] [-AllowRedirection] [-AsJob] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-CertificateThumbprint <string>] [-ConfigurationName <string>] [-Credential <PSCredential>] [-HideComputerName] [-JobName <string>] [-SessionOption <PSSessionOption>] [-ThrottleLimit <int>] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]
Beschreibung
Mit dem Cmdlet "Invoke-Command" werden Befehle auf einem lokalen Computer oder auf einem Remotecomputer ausgeführt, und die Befehlsausgabe wird einschließlich Fehlern zurückgegeben. Mit einem Invoke-Command-Befehl können Sie Befehle auf mehreren Computern ausführen.
Mit dem ComputerName-Parameter können Sie einen Befehl auf einem Remotecomputer ausführen. Erstellen Sie auf dem Remotecomputer eine PSSession (eine dauerhafte Verbindung), um eine Reihe verwandter Befehle auszuführen, die Daten gemeinsam verwenden, und führen Sie den Befehl anschließend mit dem Session-Parameter von Invoke-Command in der PSSession aus.
Sie können Invoke-Command auch auf einem lokalen Computer verwenden, um eine Zeichenfolge in einem Skriptblock als Befehl auszuwerten oder auszuführen. Windows PowerShell konvertiert den Skriptblock in einen Befehl, der unmittelbar im aktuellen Bereich ausgeführt wird, statt die Zeichenfolge als Echo in der Befehlszeile anzuzeigen.
Lesen Sie die Informationen unter "about_remote", bevor Sie Befehle mit Invoke-Command auf einem Remotecomputer ausführen.
Parameter
-AllowRedirection
Ermöglicht die Umleitung dieser Verbindung an einen alternativen URI.
Wenn Sie den ConnectionURI-Parameter verwenden, kann das Remoteziel eine Anweisung für die Umleitung an einen anderen URI zurückgeben. Standardmäßig erfolgt mit Windows PowerShell keine Umleitung von Verbindungen, Sie können jedoch mit dem AllowRedirection-Parameter die Umleitung von Verbindungen zulassen.
Sie können auch einschränken, wie oft die Verbindung umgeleitet wird, indem Sie die MaximumConnectionRedirectionCount-Eigenschaft der Einstellungsvariablen "$PSSessionOption" oder die MaximumConnectionRedirectionCount-Eigenschaft des Werts des SessionOption-Parameters festlegen. Der Standardwert ist 5. Weitere Informationen finden Sie in der Beschreibung des SessionOption-Parameters und im Hilfethema zum Cmdlet "New-PSSessionOption".
Erforderlich? |
false |
Position? |
named |
Standardwert |
|
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-ApplicationName <string>
Gibt das Segment für den Anwendungsnamen im Verbindungs-URI an. Verwenden Sie diesen Parameter zum Angeben des Anwendungsnamens, wenn Sie nicht den ConnectionURI-Parameter im Befehl verwenden.
Der Standardwert ist der Wert der Einstellungsvariablen "$PSSessionApplicationName" auf dem lokalen Computer. Wenn diese Einstellungsvariable nicht definiert ist, ist der Standardwert "WSMAN". Dieser Wert ist für die meisten Verwendungsarten geeignet. Weitere Informationen finden Sie unter "about_Preference_Variables".
Der WinRM-Dienst wählt mit dem Anwendungsnamen einen Listener für die Verbindungsanforderung aus. Der Wert dieses Parameters sollte mit dem Wert der URLPrefix-Eigenschaft eines Listeners auf dem Remotecomputer übereinstimmen.
Erforderlich? |
false |
Position? |
named |
Standardwert |
WSMAN |
Pipelineeingaben akzeptieren? |
true (ByPropertyName) |
Platzhalterzeichen akzeptieren? |
false |
-ArgumentList <Object[]>
Gibt die Werte von lokalen Variablen im Befehl an. Die Variablen im Befehl werden durch diese Werte ersetzt, bevor der Befehl auf dem Remotecomputer ausgeführt wird. Geben Sie die Werte in einer durch Trennzeichen getrennten Liste ein. Werte werden Variablen in der Reihenfolge zugeordnet, in der sie aufgeführt sind. Der Alias für ArgumentList lautet "Args".
Die Werte in ArgumentList können tatsächliche Werte wie "1024" oder Verweise auf lokale Variablen wie "$max" sein.
Um lokale Variablen in einem Befehl zu verwenden, verwenden Sie das folgende Befehlsformat:
{param($<name1>[, $<name2>]...) <command-with-local-variables>} -ArgumentList <value | $local-variable>
Mit dem param-Schlüsselwort werden die lokalen Variablen aufgelistet, die im Befehl verwendet werden. Der ArgumentList-Parameter gibt die Werte der Variablen in der Reihenfolge an, in der sie aufgelistet sind.
Erforderlich? |
false |
Position? |
named |
Standardwert |
|
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-AsJob
Führt den Befehl als Hintergrundauftrag auf einem Remotecomputer aus. Verwenden Sie diesen Parameter, um Befehle auszuführen, deren Ausführung viel Zeit in Anspruch nimmt.
Wenn Sie AsJob verwenden, gibt der Befehl ein Objekt zurück, das den Auftrag darstellt, und zeigt dann die Eingabeaufforderung an. Sie können die Sitzung weiterhin verwenden, während der Auftrag abgeschlossen wird. Um den Auftrag zu verwalten, verwenden Sie die Job-Cmdlets. Um die Auftragsergebnisse abzurufen, verwenden Sie Receive-Job.
Die Verwendung des AsJob-Parameters entspricht der Remoteausführung des Befehls "Start-Job" mithilfe von Invoke-Command. Mit AsJob wird der Auftrag jedoch auf dem lokalen Computer erstellt, obwohl der Auftrag auf einem Remotecomputer ausgeführt wird, und die Ergebnisse des Remoteauftrags werden automatisch an den lokalen Computer zurückgegeben.
Weitere Informationen über Windows PowerShell-Hintergrundaufträge finden Sie unter "about_Jobs" und "about_Remote_Jobs".
Erforderlich? |
false |
Position? |
named |
Standardwert |
Keiner |
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-Authentication <AuthenticationMechanism>
Gibt den Mechanismus an, der zum Authentifizieren der Anmeldeinformationen des Benutzers verwendet wird. Gültige Werte sind "Default", "Basic", "Credssp", "Digest", "Kerberos", "Negotiate" und "NegotiateWithImplicitCredential". Der Standardwert ist "Default".
Die CredSSP-Authentifizierung ist nur in Windows Vista, Windows Server 2008 und höheren Versionen von Windows verfügbar.
Weitere Informationen zu den Werten dieses Parameters finden Sie unter der Beschreibung der System.Management.Automation.Runspaces.AuthenticationMechanism-Enumeration in MSDN.
VORSICHT: Die CredSSP (Credential Security Service Provider)-Authentifizierung, bei der die Anmeldeinformationen des Benutzers zur Authentifizierung an einen Remotecomputer übergeben werden, ist für Befehle konzipiert, die die Authentifizierung mehr als einer Ressource erfordern, z. B. beim Zugriff auf eine Remotenetzwerkfreigabe. Dieser Mechanismus erhöht das Sicherheitsrisiko des Remotevorgangs. Wenn die Sicherheit des Remotecomputers gefährdet ist, können die an ihn übergebenen Anmeldeinformationen zum Steuern der Netzwerksitzung verwendet werden.
Erforderlich? |
false |
Position? |
named |
Standardwert |
Default |
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-CertificateThumbprint <string>
Gibt das digitale Zertifikat für öffentliche Schlüssel (X509) eines Benutzerkontos an, das über die Berechtigung zum Ausführen dieser Aktion verfügt. Geben Sie den Zertifikatfingerabdruck des Zertifikats ein.
Zertifikate werden bei der zertifikatbasierten Clientauthentifizierung verwendet. Sie können nur lokalen Benutzerkonten zugeordnet werden. Für Domänenkonten können sie nicht verwendet werden.
Um einen Zertifikatfingerabdruck abzurufen, verwenden Sie für das Windows PowerShell-Laufwerk "Cert:" den Befehl "Get-Item" oder "Get-ChildItem".
Erforderlich? |
false |
Position? |
named |
Standardwert |
|
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-ComputerName <string[]>
Gibt die Computer an, auf denen der Befehl ausgeführt wird. Der Standardwert ist der lokale Computer.
Wenn Sie den ComputerName-Parameter verwenden, wird eine temporäre Verbindung von Windows PowerShell erstellt, die nach Ausführen der angegebenen Befehle wieder geschlossen wird. Wenn Sie eine dauerhafte Verbindung benötigen, verwenden Sie den Session-Parameter.
Geben Sie den NETBIOS-Namen, die IP-Adresse oder den vollqualifizierten Domänennamen eines oder mehrerer Computer in einer durch Trennzeichen getrennten Liste ein. Um den lokalen Computer anzugeben, geben Sie den Computernamen, "localhost" oder einen Punkt (.) ein.
Wenn eine IP-Adresse im Wert des ComputerName-Parameters verwendet werden soll, muss der Befehl den Credential-Parameter einschließen. Außerdem muss der Computer für HTTPS-Transport konfiguriert werden, oder die IP-Adresse des Remotecomputers muss in die WinRM TrustedHosts-Liste auf dem lokalen Computer aufgenommen werden. Anweisungen zum Hinzufügen eines Computernamens zur TrustedHosts-Liste finden Sie unter "Hinzufügen eines Computers zur Liste der vertrauenswürdigen Hosts" in "about_Remote_Troubleshooting".
Hinweis: Um unter Windows Vista und höheren Versionen von Windows den lokalen Computer in den Wert des ComputerName-Parameters einzuschließen, müssen Sie Windows PowerShell mit der Option "Als Administrator ausführen" öffnen.
Erforderlich? |
false |
Position? |
1 |
Standardwert |
|
Pipelineeingaben akzeptieren? |
true (ByPropertyName) |
Platzhalterzeichen akzeptieren? |
false |
-ConfigurationName <string>
Gibt die Sitzungskonfiguration an, die für die neue PSSession verwendet wird.
Geben Sie einen Konfigurationsnamen oder den vollqualifizierten Ressourcen-URI einer Sitzungskonfiguration ein. Wenn Sie nur den Konfigurationsnamen angeben, wird der folgende Schema-URI vorangestellt: https://schemas.microsoft.com/powershell.
Die Sitzungskonfiguration für eine Sitzung befindet sich auf dem Remotecomputer. Wenn die angegebene Sitzungskonfiguration auf dem Remotecomputer nicht vorhanden ist, führt der Befehl zu einem Fehler.
Der Standardwert ist der Wert der Einstellungsvariablen "$PSSessionConfigurationName" auf dem lokalen Computer. Wenn diese Einstellungsvariable nicht festgelegt ist, ist die Standardeinstellung "Microsoft.PowerShell". Weitere Informationen finden Sie unter "about_Preference_Variables".
Erforderlich? |
false |
Position? |
named |
Standardwert |
https://Schemas.Microsoft.com/PowerShell/Microsoft.PowerShell |
Pipelineeingaben akzeptieren? |
true (ByPropertyName) |
Platzhalterzeichen akzeptieren? |
false |
-ConnectionURI <Uri[]>
Gibt einen URI (Uniform Resource Identifier) an, der den Verbindungsendpunkt definiert. Der URI muss vollqualifiziert sein.
Das Format dieser Zeichenfolge ist:
<Transport>://<ComputerName>: <Port>/<ApplicationName>
Der Standardwert lautet:
https://localhost:80/WSMAN
Gültige Werte für den Abschnitt "Transport" des URIs sind "HTTP" und "HTTPS". Wenn Sie "ConnectionURI" nicht angeben, können Sie die URI-Werte mit den Parametern "UseSSL", "ComputerName", "Port" und "ApplicationName" angeben.
Wenn der Zielcomputer die Verbindung an einen anderen URI umleitet, verhindert Windows PowerShell die Umleitung, es sei denn, Sie verwenden im Befehl den AllowRedirection-Parameter.
Erforderlich? |
false |
Position? |
1 |
Standardwert |
https://localhost:80/wsman |
Pipelineeingaben akzeptieren? |
true (ByPropertyName) |
Platzhalterzeichen akzeptieren? |
false |
-Credential <PSCredential>
Gibt ein Benutzerkonto an, das über die Berechtigung zum Ausführen dieser Aktion verfügt. Der Standardwert ist der aktuelle Benutzer.
Geben Sie einen Benutzernamen ein, z. B. "User01" oder "Domain01\User01", oder geben Sie eine Variable ein, die ein PSCredential-Objekt enthält, z. B. ein vom Cmdlet "Get-Credential" generiertes Objekt. Wenn Sie einen Benutzernamen eingeben, werden Sie zur Eingabe eines Kennworts aufgefordert.
Erforderlich? |
false |
Position? |
named |
Standardwert |
|
Pipelineeingaben akzeptieren? |
true (ByPropertyName) |
Platzhalterzeichen akzeptieren? |
false |
-FilePath <string>
Führt das angegebene lokale Skript auf einem oder mehreren Remotecomputern aus. Geben Sie den Pfad und den Dateinamen des Skripts ein, oder übergeben Sie einen Skriptpfad über die Pipeline an Invoke-Command. Das Skript muss sich auf dem lokalen Computer oder in einem Verzeichnis befinden, auf das der lokale Computer zugreifen kann. Geben Sie mit dem ArgumentList-Parameter die Werte von Parametern im Skript an.
Wenn Sie diesen Parameter verwenden, wird Inhalt der angegebenen Skriptdatei von Windows PowerShell in einen Skriptblock konvertiert, der Skriptblock wird an den Remotecomputer gesendet und anschließend auf dem Remotecomputer ausgeführt.
Erforderlich? |
true |
Position? |
2 |
Standardwert |
|
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-HideComputerName
Lässt den Computernamen jedes Objekts in der Ausgabeanzeige aus. Standardmäßig wird der Name des Computers angezeigt, der das Objekt generiert hat.
Dieser Parameter wirkt sich nur auf die Ausgabeanzeige aus. Das Objekt wird nicht geändert.
Erforderlich? |
false |
Position? |
named |
Standardwert |
|
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-InputObject <psobject>
Gibt die Eingabe für den Befehl an. Geben Sie eine Variable ein, die die Objekte enthält, oder geben Sie einen Befehl oder einen Ausdruck ein, mit dem die Objekte abgerufen werden.
Bei Verwendung von InputObject verwenden Sie die automatische Variable "$input" im Wert des ScriptBlock-Parameters, um die Eingabeobjekte darzustellen.
Erforderlich? |
false |
Position? |
named |
Standardwert |
|
Pipelineeingaben akzeptieren? |
true (ByValue) |
Platzhalterzeichen akzeptieren? |
false |
-JobName <string>
Gibt einen Anzeigenamen für den Hintergrundauftrag an. Aufträge werden standardmäßig mit "Job<n>" benannt, wobei <n> eine Ordinalzahl ist. Dieser Parameter ist nur mit dem AsJob-Parameter gültig.
Wenn Sie den JobName-Parameter in einem Befehl verwenden, wird der Befehl als Auftrag ausgeführt, und Invoke-Command gibt ein Auftragsobjekt zurück, auch wenn Sie den AsJob-Parameter nicht in den Befehl einschließen.
Weitere Informationen über Hintergrundaufträge in Windows PowerShell finden Sie unter "about_Jobs".
Erforderlich? |
false |
Position? |
named |
Standardwert |
Job<n> |
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-Port <int>
Gibt den Netzwerkport an dem für diesen Befehl verwendeten Remotecomputer an. Der Standardport ist Port 80 (der HTTP-Port).
Vor der Verwendung eines alternativen Ports müssen Sie den WinRM-Listener auf dem Remotecomputer für die Überwachung dieses Ports konfigurieren. Um den Listener zu konfigurieren, geben Sie die folgenden beiden Befehle an der Windows PowerShell-Eingabeaufforderung ein:
remove-item -path wsman:\Localhost\listener\listener* -recurse
new-item -path wsman:\Localhost\listener -Transport http -Address * -port <port-number>
Verwenden Sie den Port-Parameter nur, wenn dies erforderlich ist. Der im Befehl festgelegte Port gilt für alle Computer oder Sitzungen, für die der Befehl ausgeführt wird. Mit einer alternativen Porteinstellung kann verhindert werden, dass der Befehl auf allen Computern ausgeführt wird.
Erforderlich? |
false |
Position? |
named |
Standardwert |
|
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-ScriptBlock <scriptblock>
Gibt die auszuführenden Befehle an. Schließen Sie die Befehle in geschweifte Klammern ({}) ein, um einen Skriptblock zu erstellen. Dieser Parameter ist erforderlich.
Standardmäßig werden alle Variablen im Befehl auf dem Remotecomputer ausgewertet. Um lokale Variablen in den Befehl einzuschließen, verwenden Sie den ArgumentList-Parameter.
Erforderlich? |
true |
Position? |
1 |
Standardwert |
|
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-Session <PSSession[]>
Führt den Befehl in den angegebenen Windows PowerShell-Sitzungen (PSSessions) aus. Geben Sie eine Variable ein, die die PSSessions enthält, oder einen Befehl, mit dem die PSSessions erstellt oder abgerufen werden, z. B. den Befehl "New-PSSession" oder den Befehl "Get-PSSession".
Wenn Sie eine PSSession erstellen, wird von Windows PowerShell eine dauerhafte Verbindung mit dem Remotecomputer hergestellt. Mit PSSession können Sie eine Reihe verwandter Befehle ausführen, die Daten gemeinsam verwenden. Mit dem ComputerName-Parameter können Sie einzelne Befehle oder eine Reihe nicht verknüpfter Befehle ausführen.
Das Cmdlet "New-PSSession" ermöglicht das Erstellen einer PSSession. Weitere Informationen finden Sie unter "about_PSSessions".
Erforderlich? |
false |
Position? |
1 |
Standardwert |
|
Pipelineeingaben akzeptieren? |
true (ByPropertyName) |
Platzhalterzeichen akzeptieren? |
false |
-SessionOption <PSSessionOption>
Legt erweiterte Optionen für die Sitzung fest. Geben Sie ein SessionOption-Objekt ein, das Sie mit dem Cmdlet "New-PSSessionOption" erstellen.
Die Standardwerte für die Optionen werden durch den Wert der Einstellungsvariablen "$PSSessionOption" bestimmt, wenn diese festgelegt wurde. Andernfalls verwendet die Sitzung die Systemstandardwerte.
Eine Beschreibung der Sitzungsoptionen, einschließlich der Standardwerte, finden Sie im Hilfethema für das Cmdlet "New-PSSessionOption". Weitere Informationen über die Einstellungsvariable "$PSSessionOption" finden Sie unter "about_Preference_Variables".
Erforderlich? |
false |
Position? |
named |
Standardwert |
|
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-ThrottleLimit <int>
Gibt die maximale Anzahl von gleichzeitigen Verbindungen an, die zum Ausführen dieses Befehls hergestellt werden können. Wenn Sie diesen Parameter weglassen oder den Wert 0 eingeben, wird der Standardwert 32 verwendet.
Die Drosselungsgrenze gilt nur für den aktuellen Befehl und nicht für die Sitzung oder den Computer.
Erforderlich? |
false |
Position? |
named |
Standardwert |
32 |
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-UseSSL
Verwendet das SSL (Secure Sockets Layer)-Protokoll, um eine Verbindung mit dem Remotecomputer herzustellen. Standardmäßig wird SSL nicht verwendet.
WS-Management verschlüsselt alle über das Netzwerk gesendeten Windows PowerShell-Inhalte. UseSSL ist ein zusätzlicher Schutz, bei dem die Daten über HTTPS anstatt über HTTP gesendet werden.
Wenn Sie diesen Parameter verwenden und SSL an dem für den Befehl verwendeten Port nicht verfügbar ist, schlägt der Befehl fehl.
Erforderlich? |
false |
Position? |
named |
Standardwert |
|
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
<CommonParameters>
Dieses Cmdlet unterstützt die folgenden allgemeinen Parameter: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer und -OutVariable. Weitere Informationen finden Sie unter about_Commonparameters.
Eingaben und Ausgaben
Der Eingabetyp ist der Typ der Objekte, die über die Pipeline an das Cmdlet übergeben werden können. Der Rückgabetyp ist der Typ der Objekte, die das Cmdlet zurückgibt.
Eingaben |
System.Management.Automation.ScriptBlock Sie können einen Befehl in einem Skriptblock über die Pipeline an Invoke-Command übergeben. Verwenden Sie die automatische Variable "$input", um die Eingabeobjekte im Befehl darzustellen. |
Ausgaben |
System.Management.Automation.PSRemotingJob oder die Ausgabe des aufgerufenen Befehls Wenn Sie den AsJob-Parameter verwenden, wird von Invoke-Command ein Auftragsobjekt zurückgegeben. Andernfalls wird die Ausgabe des aufgerufenen Befehls (der Wert des ScriptBlock-Parameters) zurückgegeben. |
Hinweise
– Um unter Windows Vista und höheren Versionen von Windows mit dem ComputerName-Parameter von Invoke-Command einen Befehl auf dem lokalen Computer zu verwenden, müssen Sie Windows PowerShell mit der Option "Als Administrator ausführen" öffnen.
– Wenn Sie Befehle auf mehreren Computern ausführen, stellt Windows PowerShell eine Verbindung mit den Computern in der Reihenfolge her, in der sie in der Liste angezeigt werden. Die Befehlsausgabe wird jedoch in der Reihenfolge des Empfangs von den Remotecomputern angezeigt, die ggf. abweicht.
– Fehler, die aus dem Befehl resultieren, der von Invoke-Command ausgeführt wird, sind in den Befehlsergebnissen enthalten. Fehler, die bei einem lokalen Befehl zu einem Abbruch führen, werden in einem Remotebefehl als Fehler ohne Abbruch behandelt. So wird sichergestellt, dass ein Fehler mit Abbruch auf einem Computer nicht zur Beendigung des Befehls auf allen Computern führen, auf denen dieser ausgeführt wird. Diese Vorgehensweise wird auch dann verwendet, wenn ein Remotebefehl auf einem einzelnen Computer ausgeführt wird.
– Wenn sich der Remotecomputer nicht in einer Domäne befindet, die vom lokalen Computer als vertrauenswürdig eingestuft wird, kann die Authentifizierung der Anmeldeinformationen des Benutzers durch den Computer möglicherweise nicht durchgeführt werden. Mit dem folgenden Befehl im WSMAN-Anbieter, in dem <Remotecomputername> dem Namen des Remotecomputers entspricht, können Sie der Liste der "vertrauenswürdigen Hosts" in der WS-Verwaltung den Remotecomputer hinzuzufügen:
set-item -path wsman:\Localhost\Client\TrustedHosts -value <Remotecomputername>.
Beispiel 1
C:\PS>invoke-command -filepath c:\scripts\test.ps1 -computerName Server01
Disks: C:, D:, E:
Status: Warning, Normal, Normal
Beschreibung
-----------
Mit diesem Befehl wird das Skript "Test.ps1" auf dem Computer "Server01" ausgeführt.
Der Befehl gibt mithilfe des FilePath-Parameters ein Skript an, das sich auf dem lokalen Computer befindet. Das Skript wird auf dem Remotecomputer ausgeführt, und die Ergebnisse werden an den lokalen Computer zurückgegeben.
Beispiel 2
C:\PS>invoke-command -computername server01 -credential domain01\user01 -scriptblock {get-culture}
Beschreibung
-----------
Mit diesem Befehl wird der Befehl "Get-Culture" auf dem Remotecomputer "Server01" ausgeführt.
Dabei wird der Name des Computers mit dem ComputerName-Parameter angegeben, und mit dem Credential-Parameter wird der Befehl im Sicherheitskontext von "Domain01\User01" ausgeführt, einem Benutzer mit der Berechtigung zur Ausführung von Befehlen. Der ScriptBlock-Parameter wird zur Angabe des Befehls verwendet, der auf dem Remotecomputer ausgeführt werden soll.
Daraufhin wird ein Dialogfeld von Windows PowerShell angezeigt, das zur Angabe des Kennworts sowie einer Authentifizierungsmethode für das Konto "User01" auffordert. Anschließend wird der Befehl auf dem Computer "Server01" ausgeführt und das Ergebnis zurückgegeben.
Beispiel 3
C:\PS>$s = new-pssession -computername server02 -credential domain01\user01
C:\PS> invoke-command -session $s -scriptblock {get-culture}
Beschreibung
-----------
In diesem Beispiel wird der gleiche Befehl "Get-Culture" in einer Sitzung (einer dauerhaften Verbindung) auf dem Remotecomputer "Server02" ausgeführt. Sitzungen werden normalerweise nur dann erstellt, wenn eine Reihe von Befehlen auf dem Remotecomputer ausgeführt wird.
Im ersten Befehl wird mit dem Cmdlet "New-PSSession" eine Sitzung auf dem Remotecomputer "Server02"erstellt. Anschließend wird die Sitzung in der Variablen "$s" gespeichert.
Im zweiten Befehl wird mit dem Cmdlet "Invoke-Command" der Befehl "Get-Culture" auf dem Computer "Server02" ausgeführt. Mit dem Session-Parameter wird die Sitzung angegeben, die in der Variablen "$s" gespeichert wurde.
Der Befehl wird daraufhin von Windows PowerShell in der Sitzung auf dem Computer "Server02" ausgeführt.
Beispiel 4
C:\PS>invoke-command -computername Server02 -scriptblock {$p = get-process powershell}
C:\PS> invoke-command -computername Server02 -scriptblock {$p.virtualmemorysize}
C:\PS>
C:\PS> $s = new-pssession -computername Server02
C:\PS> invoke-command -session $s -scriptblock {$p = get-process powershell}
C:\PS> invoke-command -session $s -scriptblock {$p.virtualmemorysize}
17930240
Beschreibung
-----------
In diesem Beispiel werden die Auswirkungen der Verwendung des ComputerName-Parameters und des Session-Parameters von Invoke-Command verglichen. Es wird gezeigt, wie mit einer Sitzung eine Reihe von Befehlen mit gemeinsamen Daten ausgeführt wird.
In den ersten beiden Befehle wird der ComputerName-Parameter von Invoke-Command zur Ausführung von Befehlen auf dem Remotecomputer "Server02" verwendet. Im ersten Befehl wird der PowerShell-Prozess auf dem Remotecomputer mit dem Befehl "Get-Process" abgerufen und in der Variablen "$p" gespeichert. Im zweiten Befehl wird der Wert der VirtualMemorySize-Eigenschaft des PowerShell-Prozesses abgerufen.
Der erste Befehl ist erfolgreich. Beim zweiten Befehl tritt jedoch ein Fehler auf, weil Windows PowerShell bei Verwendung des ComputerName-Parameters eine Verbindung ausschließlich zur Ausführung des Befehls herstellt. Sobald der Befehl abgeschlossen ist, wird die Verbindung anschließend geschlossen. Die Variable "$p" wurde zwar in einer Verbindung erstellt, sie ist jedoch nicht in der Verbindung vorhanden, die für den zweiten Befehl erstellt wurde.
Das Problem wird durch Erstellen einer Sitzung (einer dauerhaften Verbindung) auf dem Remotecomputer und Ausführen der beiden verwandten Befehle in der gleichen Sitzung gelöst.
Im dritten Befehl wird mit dem Cmdlet "New-PSSession" eine Sitzung auf dem Computer "Server02" erstellt. Anschließend wird die Sitzung in der Variablen "$s" gespeichert. Im vierten und fünften Befehl wird die Reihe der Befehle aus dem ersten Satz wiederholt, allerdings werden die beiden Befehle hier vom Befehl "Invoke-Command" mit dem Session-Parameter in der gleichen Sitzung ausgeführt.
Nun sind die Befehle erfolgreich, da beide Befehle in der gleichen Sitzung ausgeführt werden, und der Wert "$p" bleibt in der Sitzung "$s" zur weiteren Verwendung aktiv.
Beispiel 5
C:\PS>$command = { get-eventlog -log "windows powershell" | where {$_.message -like "*certificate*"} }
C:\PS> invoke-command -computername S1, S2 -scriptblock $command
Beschreibung
-----------
In diesem Beispiel wird gezeigt, wie ein Befehl eingegeben wird, der in einer lokalen Variablen gespeichert wird.
Wenn der gesamte Befehl in einer lokalen Variablen gespeichert wird, können Sie die Variable als Wert des ScriptBlock-Parameters angeben. Es ist nicht erforderlich, den Wert der lokalen Variablen mit dem Schlüsselwort "param" oder der Variablen "ArgumentList" zu senden.
Im ersten Befehl wird ein Get-Eventlog-Befehl in der Variablen "$command" gespeichert. Der Befehl wird als Skriptblock formatiert.
Im zweiten Befehl wird der Befehl mit dem Cmdlet "Invoke-Command" in "$command" auf dem Remotecomputer "S1" und dem Remotecomputer "S2" ausgeführt.
Beispiel 6
C:\PS>invoke-command -computername server01, server02, TST-0143, localhost -configurationname MySession.PowerShell -scriptblock {get-eventlog "windows powershell"}
Beschreibung
-----------
In diesem Beispiel wird veranschaulicht, wie mit dem Cmdlet "Invoke-Command" ein Befehl auf mehreren Computern ausgeführt wird.
Im Befehl werden die Computer mit dem ComputerName-Parameter angegeben. Die Computernamen werden in einer durch Trennzeichen getrennten Liste dargestellt. Die Liste der Computer enthält den Wert "localhost", der den lokalen Computer darstellt.
Im Befehl wird mit dem ConfigurationName-Parameter eine alternative Sitzungskonfiguration für Windows PowerShell angegeben, und mit dem ScriptBlock-Parameter wird der Befehl angegeben.
In diesem Beispiel werden die Ereignisse im Windows PowerShell-Ereignisprotokoll mit dem Befehl im Skriptblock für die einzelnen Remotecomputer abgerufen.
Beispiel 7
C:\PS>$version = invoke-command -computername (get-content machines.txt) -scriptblock {(get-host).version}
Beschreibung
-----------
Mit diesem Befehl wird die Version des Windows PowerShell-Hosts abgerufen, die auf 200 Remotecomputern ausgeführt wird.
Da nur ein Befehl ausgeführt wird, ist es nicht notwendig, dauerhafte Verbindungen (Sitzungen) für jeden Computer zu erstellen. Stattdessen gibt der Befehl die Computer mit dem ComputerName-Parameter an.
Im Befehl wird mit dem Cmdlet "Invoke-Command" ein Get-Host-Befehl ausgeführt. Mit der punktierten Notation wird die Version-Eigenschaft des Windows PowerShell-Hosts abgerufen.
Um die Computer anzugeben, wird mit dem Cmdlet "Get-Content" der Inhalt der Datei "Machine.txt" mit Computernamen abgerufen.
Diese Befehle werden synchron (einzeln) ausgeführt. Wenn die Ausführung der Befehle abgeschlossen wurde, wird die Ausgabe der Befehle von allen Computern in der Variablen "$version" gespeichert. Die Ausgabe enthält den Namen des Computers, von dem die Daten stammen.
Beispiel 8
C:\PS>$s = new-pssession -computername Server01, Server02
C:\PS> invoke-command -session $s -scriptblock {get-eventlog system} -AsJob
Id Name State HasMoreData Location Command
--- ---- ----- ----- ----------- -------- -------
1 Job1 Running True Server01,Server02 get-eventlog system
C:\PS> $j = Get-Job
C:\PS> $j | format-list -property *
HasMoreData : True
StatusMessage :
Location : Server01,Server02
Command : get-eventlog system
JobStateInfo : Running
Finished : System.Threading.ManualResetEvent
InstanceId : e124bb59-8cb2-498b-a0d2-2e07d4e030ca
Id : 1
Name : Job1
ChildJobs : {Job2, Job3}
Output : {}
Error : {}
Progress : {}
Verbose : {}
Debug : {}
Warning : {}
StateChanged :
C:\PS> $results = $j | Receive-Job
Beschreibung
-----------
Mit diesen Befehlen wird ein Hintergrundauftrag auf zwei Remotecomputern ausgeführt. Da der Invoke-Command-Befehl den AsJob-Parameter verwendet, werden die Befehle auf den Remotecomputern ausgeführt, der Auftrag befindet sich jedoch auf dem lokalen Computer, und die Ergebnisse werden an den lokalen Computer übermittelt.
Im ersten Befehl werden mit dem Cmdlet "New-PSSession" Sitzungen auf dem Remotecomputer "Server01" sowie auf dem Remotecomputer "Server02" erstellt.
Im zweiten Befehl wird mit dem Cmdlet "Invoke-Command" ein Hintergrundauftrag in der jeweiligen Sitzung ausgeführt. Bei dem Befehl wird der Befehl mithilfe des AsJob-Parameters als Hintergrundauftrag ausgeführt. Dieser Befehl gibt ein Auftragsobjekt mit zwei untergeordneten Auftragsobjekten zurück, eines für jeden Auftrag, der auf den beiden Remotecomputern ausgeführt wurde.
Im dritten Befehl wird das Auftragsobjekt mit einem Get-Job-Befehl in der Variablen "$j" gespeichert.
Der vierte Befehl sendet den Wert der Variablen "$j" mithilfe eines Pipelineoperators (|) an das Cmdlet "Format-List", das alle Eigenschaften des Auftragsobjekts in einer Liste anzeigt.
Im fünften Befehl werden die Ergebnisse der Aufträge abgerufen. Das Auftragsobjekt wird in "$j" über die Pipeline an das Cmdlet "Receive-Job" übergeben, und die Ergebnisse werden in der Variablen "$results" gespeichert.
Beispiel 9
C:\PS>$MWFO-LOg = Microsoft-Windows-Forwarding/Operational
C:\PS> invoke-command -computername server01 -scriptblock {param($log, $num) get-eventlog -logname $log -newest $num} -ArgumentList $MWFO-log, 10
Beschreibung
-----------
In diesem Beispiel wird gezeigt, wie die Werte von lokalen Variablen in einem Befehl auf einem Remotecomputer eingeschlossen werden.
Im ersten Befehl wird der Name des Microsoft Windows-Forwarding/Operational-Ereignisprotokolls in der Protokollvariablen "$MWFO" gespeichert.
Im zweiten Befehl wird mit dem Cmdlet "Invoke-Command" der Befehl "Get-EventLog" auf dem Remotecomputer "Server01" ausgeführt, um die 10 aktuellsten Ereignisse aus dem Microsoft Windows-Forwarding/Operational-Ereignisprotokoll abzurufen.
Dieser Befehl erstellt die Variablen "$log" und "$num" mit dem Schlüsselwort "param", die im Befehl "Get-EventLog" als Platzhalter verwendet werden. Diese Platzhalter haben beliebige Namen, die nicht zu den Namen der lokalen Variablen passen müssen, mit denen die Werte angeben werden.
Die Werte des ArgumentList-Parameters veranschaulichen die beiden unterschiedlichen Möglichkeiten zur Angabe von Werten in der Argumentliste. Die Variable "$MFWO" wird im ersten Befehl definiert und stellt den Wert des Platzhalters "$log" dar. Der Wert der Variablen "$num" beträgt 10.
Bevor der Befehl an den Remotecomputer gesendet wird, werden die Variablen durch die angegebenen Werte ersetzt.
Beispiel 10
C:\PS>invoke-command -computername S1, S2 -scriptblock {get-process powershell}
PSComputerName Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
-------------- ------- ------ ----- ----- ----- ------ -- -----------
S1 575 15 45100 40988 200 4.68 1392 powershell
S2 777 14 35100 30988 150 3.68 67 powershell
C:\PS> invoke-command -computername S1, S2 -scriptblock {get-process powershell} -HideComputerName
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
575 15 45100 40988 200 4.68 1392 powershell
777 14 35100 30988 150 3.68 67 powershell
Beschreibung
-----------
In diesem Beispiel wird die Verwendung des HideComputerName-Parameters von Invoke-Command veranschaulicht.
In den ersten beiden Befehlen wird mit dem Cmdlet "Invoke-Command" ein Get-Process-Befehl für den PowerShell-Prozess ausgeführt. Die Ausgabe des ersten Befehls enthält die PsComputerName-Eigenschaft mit dem Namen des Computers, auf dem der Befehl ausgeführt wurde. Die Ausgabe des zweiten Befehls, in dem der HideComputerName-Parameter verwendet wird, enthält nicht die Spalte "PsComputerName".
Das Objekt wird durch den HideComputerName-Parameter nicht verändert. Sie können die PsComputerName-Eigenschaft eines beliebigen betroffenen Objekts auch weiterhin mit den Format-Cmdlets anzeigen.
Beispiel 11
C:\PS>invoke-command -comp (get-content servers.txt) -filepath c:\scripts\sample.ps1 -argumentlist Process, Service
Beschreibung
-----------
In diesem Beispiel wird das Skript "Sample.ps1" mit dem Cmdlet "Invoke-Command" auf allen Computern ausgeführt, die in der Datei "Servers.txt" aufgeführt sind. Im Befehl wird die Skriptdatei mit dem FilePath-Parameter angegeben. Mit diesem Befehl können Sie das Skript auf den Remotecomputern ausführen, auch wenn die Skriptdatei nicht über die Remotecomputer zugreifbar ist.
Wenn Sie den Befehl senden, wird der Inhalt der Datei "Sample.ps1" in einen Skriptblock kopiert, und der Skriptblock wird auf jedem Remotecomputer ausgeführt. Dieses Verfahren entspricht dem Senden des Skriptinhalts mit dem ScriptBlock-Parameter.
Beispiel 12
C:\PS>$LiveCred = Get-Credential
C:\PS> Invoke-Command -ConfigurationName Microsoft.Exchange `
-ConnectionUri https://ps.exchangelabs.com/powershell `
-Credential $LiveCred -Authentication Basic `
-scriptblock {Invoke-Command {Set-Mailbox dan -DisplayName "Dan Park"}
Beschreibung
-----------
In diesem Beispiel wird gezeigt, wie ein Befehl auf einem Remotecomputer ausgeführt wird, der von einem URI (Internetadresse) identifiziert wird. In diesem konkreten Beispiel wird der Befehl "Set-Mailbox" auf einem Exchange-Remoteserver ausgeführt. Das Graviszeichen (`) im Befehl ist das Zeilenfortsetzungszeichen von Windows PowerShell.
Der erste Befehl verwendet das Cmdlet "Get-Credential", um die Windows Live ID-Anmeldeinformationen in der Variablen "$LiveCred" zu speichern. Geben Sie die Anmeldeinformationen für die Windows Live ID ein, wenn das entsprechende Dialogfeld angezeigt wird.
Im zweiten Befehl wird mit dem Cmdlet "Invoke-Command" der Befehl "Set-Mailbox" ausgeführt. Im Befehl wird mit dem ConfigurationName-Parameter angegeben, dass der Befehl in einer Sitzung ausgeführt werden soll, die die Microsoft.Exchange-Sitzungskonfiguration verwendet. Der ConnectionURI-Parameter gibt die URL des Exchange-Server-Endpunkts an.
Der Credential-Parameter gibt die in der Variablen "$LiveCred" gespeicherten Anmeldeinformationen für die Windows Live ID an. Der AuthenticationMechanism-Parameter gibt die Verwendung der Standardauthentifizierung an. Mit dem ScriptBlock-Parameter wird ein Skriptblock angegeben, der den Befehl enthält.
Beispiel 13
C:\PS>$max = New-PSSessionOption -MaximumRedirection 1
C:\PS> Invoke-Command -ConnectionUri https://ps.exchangelabs.com/powershell `
-scriptblock {Invoke-Command {Get-Mailbox dan} `
-AllowRedirection -SessionOption $max
Beschreibung
-----------
Dieser Befehl verdeutlicht, wie der AllowRedirection-Parameter und der SessionOption-Parameter verwendet werden, um die URI-Umleitung in einem Remotebefehl zu verwalten.
Der erste Befehl verwendet das Cmdlet "New-PSSessionOption", um ein PSSessionOpption-Objekt zu erstellen, das in der Variablen "$max" gespeichert wird. Der Befehl legt die MaximumConnectionRedirectionCount-Eigenschaft des PSSessionOption-Objekts mithilfe des MaximumRedirection-Parameters auf 1 fest.
Im zweiten Befehl wird der Befehl "Get-Mailbox" mit dem Cmdlet "Invoke-Command" auf einem Remoteserver unter Microsoft Exchange Server ausgeführt. Der Befehl stellt die explizite Berechtigung zum Umleiten der Verbindung an einen alternativen Endpunkt mit dem AllowRedirection-Parameter bereit. Er verwendet außerdem den SessionOption-Parameter, um das Sitzungsobjekt in der Variablen "$max" anzugeben.
Wenn der vom ConnectionURI-Parameter angegebene Remotecomputer eine Umleitungsmeldung zurückgibt, wird die Verbindung von Windows PowerShell daraufhin umgeleitet. Wenn das neue Ziel jedoch erneut eine Umleitungsmeldung zurückgibt, wird der Anzahlwert für die Umleitung von 1 überschritten, und von Invoke-Command wird ein Fehler ohne Abbruch zurückgegeben.
Beispiel 14
C:\PS>$so = New-PSSessionOption -SkipCACheck
PS C:\> invoke-command $s { get-hotfix } -SessionOption $so -credential server01\user01
Beschreibung
-----------
In diesem Beispiel wird gezeigt, wie ein SessionOption-Parameter erstellt und verwendet wird.
Im ersten Befehl wird mit dem Cmdlet "New-PSSessionOption" eine Sitzungsoption erstellt. Das resultierende SessionOption-Objekt wird im $so-Parameter gespeichert.
Im zweiten Befehl wird der Befehl "Get-Hotfix" mit dem Cmdlet "Invoke-Command" remote ausgeführt. Der Wert des SessionOption-Parameters entspricht dem SessionOption-Objekt in der Variablen "$so".
Beispiel 15
C:\PS>enable-wsmanCredSSP -delegate server02
C:\PS> connect-wsman Server02
C:\PS> set-item wsman:\server02*\service\auth\credSSP -value $true
C:\PS> $s = new-pssession server02
C:\PS> invoke-command -session $s -script {get-item \\Net03\Scripts\LogFiles.ps1} -authentication credssp -credential domain01\admin01
Beschreibung
-----------
In diesem Beispiel wird veranschaulicht, wie von einer Remotesitzung aus auf eine Netzwerkfreigabe zugegriffen wird.
Der Befehl erfordert, dass CredSSP-Delegierung in den Clienteinstellungen auf dem lokalen Computer und in den Diensteinstellungen auf dem Remotecomputer aktiviert wird. Um die Befehle in diesem Beispiel auszuführen, müssen Sie Mitglied der Gruppe "Administratoren" auf dem lokalen Computer und dem Remotecomputer sein.
Der erste Befehl verwendet das Cmdlet "Enable-WSManCredSSP", um die CredSSP-Delegierung vom lokalen Computer "Server01" an den Remotecomputer "Server02" zu aktivieren. Dadurch wird die CredSSP-Clienteinstellung auf dem lokalen Computer konfiguriert.
Der zweite Befehl verwendet das Cmdlet "Connect-WSman", um eine Verbindung mit dem Computer "Server02" herzustellen. Durch diese Aktion wird dem Laufwerk "WSMan:" auf dem lokalen Computer ein Knoten für Computer "Server02" hinzugefügt. So können die Einstellungen für die WS-Verwaltung auf dem Computer "Server02" angezeigt und geändert werden.
Der dritte Befehl verwendet das Cmdlet "Set-Item", um den Wert des CredSSP-Elements im Service-Knoten von Computer "Server02" in "True" zu ändern. Durch diese Aktion wird CredSSP in den Diensteinstellungen auf dem Remotecomputer aktiviert.
Der vierte Befehl verwendet das Cmdlet "New-PSSession" zum Erstellen einer PSSession auf dem Computer "Server02". Die PSSession wird in der Variablen "$s" gespeichert.
Der fünfte Befehl verwendet das Cmdlet "Invoke-Command", um einen Get-Item-Befehl in der Sitzung in "$s" auszuführen, der ein Skript aus der Netzwerkfreigabe "Net03\Scripts" abruft. Der Befehl verwendet den Credential-Parameter sowie den Authentication-Parameter mit dem Wert "CredSSP".
Siehe auch
Konzepte
about_remote
about_PSSessions
New-PSSession
Get-PSSession
Remove-PSSession
Enter-PSSession
Exit-PSSession
WSMan Provider