Sdílet prostřednictvím


Invoke-Command

Spouští příkazy na místních a vzdálených počítačích.

Syntaxe

Invoke-Command
      [-ScriptBlock] <ScriptBlock>
      [-NoNewScope]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-Session] <PSSession[]>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-Session] <PSSession[]>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-FilePath] <String>
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-ComputerName] <String[]>]
      [-Credential <PSCredential>]
      [-Port <Int32>]
      [-UseSSL]
      [-ConfigurationName <String>]
      [-ApplicationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-InDisconnectedSession]
      [-SessionName <String[]>]
      [-HideComputerName]
      [-JobName <String>]
      [-FilePath] <String>
      [-SessionOption <PSSessionOption>]
      [-Authentication <AuthenticationMechanism>]
      [-EnableNetworkAccess]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-ComputerName] <String[]>]
      [-Credential <PSCredential>]
      [-Port <Int32>]
      [-UseSSL]
      [-ConfigurationName <String>]
      [-ApplicationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-InDisconnectedSession]
      [-SessionName <String[]>]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      [-SessionOption <PSSessionOption>]
      [-Authentication <AuthenticationMechanism>]
      [-EnableNetworkAccess]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-CertificateThumbprint <String>]
      [<CommonParameters>]
Invoke-Command
      [-Credential <PSCredential>]
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [[-ConnectionUri] <Uri[]>]
      [-AsJob]
      [-InDisconnectedSession]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      [-AllowRedirection]
      [-SessionOption <PSSessionOption>]
      [-Authentication <AuthenticationMechanism>]
      [-EnableNetworkAccess]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-CertificateThumbprint <String>]
      [<CommonParameters>]
Invoke-Command
      [-Credential <PSCredential>]
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [[-ConnectionUri] <Uri[]>]
      [-AsJob]
      [-InDisconnectedSession]
      [-HideComputerName]
      [-JobName <String>]
      [-FilePath] <String>
      [-AllowRedirection]
      [-SessionOption <PSSessionOption>]
      [-Authentication <AuthenticationMechanism>]
      [-EnableNetworkAccess]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-ScriptBlock] <ScriptBlock>
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-VMGuid] <Guid[]>
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-ScriptBlock] <ScriptBlock>
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -VMName <String[]>
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-FilePath] <String>
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-VMGuid] <Guid[]>
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-FilePath] <String>
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -VMName <String[]>
      [<CommonParameters>]

Description

Rutina Invoke-Command spouští příkazy na místním nebo vzdáleném počítači a vrací veškerý výstup příkazů, včetně chyb. Pomocí jednoho příkazu Invoke-Command můžete spouštět příkazy na více počítačích.

Pokud chcete na vzdáleném počítači spustit jeden příkaz, použijte parametr ComputerName. Ke spuštění řady souvisejících příkazů, které sdílejí data, použijte rutinu New-PSSession k vytvoření psSession (trvalé připojení) na vzdáleném počítači a potom pomocí parametru SessionInvoke-Command spusťte příkaz v PSSession. Pokud chcete spustit příkaz v odpojené relaci, použijte parametr InDisconnectedSession. Pokud chcete spustit příkaz v úloze na pozadí, použijte parametr AsJob.

Jako příkaz můžete také použít Invoke-Command na místním počítači k bloku skriptu. PowerShell spustí blok skriptu okamžitě v podřízené oblasti aktuálního oboru.

Před použitím Invoke-Command ke spuštění příkazů na vzdáleném počítači about_Remote.

Některé vzorové kódy používají k zmenšení délky řádku splatting. Další informace naleznete v tématu about_Splatting.

Příklady

Příklad 1: Spuštění skriptu na serveru

Tento příklad spustí skript Test.ps1 na počítači Server01.

Invoke-Command -FilePath c:\scripts\test.ps1 -ComputerName Server01

Parametr FilePath určuje skript umístěný v místním počítači. Skript běží na vzdáleném počítači a výsledky se vrátí do místního počítače.

Příklad 2: Spuštění příkazu na vzdáleném serveru

Tento příklad spustí příkaz Get-Culture na vzdáleném počítači Server01.

Invoke-Command -ComputerName Server01 -Credential Domain01\User01 -ScriptBlock { Get-Culture }

Parametr ComputerName určuje název vzdáleného počítače. Parametr Credential slouží ke spuštění příkazu v kontextu zabezpečení domain01\User01, uživatele, který má oprávnění ke spouštění příkazů. Parametr ScriptBlock určuje příkaz, který se má spustit ve vzdáleném počítači.

V reakci powershell požaduje heslo a metodu ověřování pro účet User01. Potom spustí příkaz na počítači Server01 a vrátí výsledek.

Příklad 3: Spuštění příkazu v trvalém připojení

Tento příklad spustí stejný příkaz Get-Culture v relaci pomocí trvalého připojení na vzdáleném počítači s názvem Server02.

$s = New-PSSession -ComputerName Server02 -Credential Domain01\User01
Invoke-Command -Session $s -ScriptBlock {Get-Culture}

Rutina New-PSSession vytvoří relaci na vzdáleném počítači Serveru02 a uloží ji do proměnné $s. Relaci obvykle vytvoříte jenom v případě, že na vzdáleném počítači spustíte řadu příkazů.

Rutina Invoke-Command spustí příkaz Get-Culture na serveru Server02. Parametr relace určuje relaci uloženou v proměnné .

V reakci powershell spustí příkaz v relaci na počítači se serverem Server02.

Příklad 4: Použití relace ke spuštění řady příkazů, které sdílejí data

Tento příklad porovnává účinky použití ComputerName a Relace parametry Invoke-Command. Ukazuje, jak pomocí relace spustit řadu příkazů, které sdílejí stejná data.

Invoke-Command -ComputerName Server02 -ScriptBlock {$p = Get-Process PowerShell}
Invoke-Command -ComputerName Server02 -ScriptBlock {$p.VirtualMemorySize}
$s = New-PSSession -ComputerName Server02
Invoke-Command -Session $s -ScriptBlock {$p = Get-Process PowerShell}
Invoke-Command -Session $s -ScriptBlock {$p.VirtualMemorySize}

17930240

První dva příkazy používají ComputerName parametr Invoke-Command ke spouštění příkazů na vzdáleném počítači Server02. První příkaz pomocí rutiny Get-Process získá proces PowerShellu na vzdáleném počítači a uloží ho do proměnné $p. Druhý příkaz získá hodnotu VirtualMemorySize vlastnost procesu PowerShellu.

Pokud použijete parametr ComputerName, PowerShell vytvoří novou relaci pro spuštění příkazu. Relace se po dokončení příkazu zavře. Proměnná $p byla vytvořena v jednom připojení, ale v připojení vytvořeném pro druhý příkaz neexistuje.

Problém je vyřešen vytvořením trvalé relace na vzdáleném počítači a spuštěním obou příkazů ve stejné relaci.

Rutina New-PSSession vytvoří trvalou relaci v počítači Server02 a uloží relaci do proměnné $s. Následující řádky Invoke-Command používají parametr Session ke spuštění obou příkazů ve stejné relaci. Vzhledem k tomu, že oba příkazy běží ve stejné relaci, $p hodnota zůstane aktivní.

Příklad 5: Zadejte příkaz uložený v místní proměnné.

Tento příklad ukazuje, jak vytvořit příkaz uložený jako blok skriptu v místní proměnné. Pokud je blok skriptu uložen v místní proměnné, můžete proměnnou zadat jako hodnotu parametru ScriptBlock.

$command = { Get-EventLog -LogName "Windows PowerShell" |
  Where-Object {$_.Message -like "*certificate*"} }
Invoke-Command -ComputerName S1, S2 -ScriptBlock $command

Proměnná $command ukládá příkaz Get-EventLog, který je formátovaný jako blok skriptu. Invoke-Command spustí příkaz uložený ve $command na vzdálených počítačích S1 a S2.

Příklad 6: Spuštění jednoho příkazu na několika počítačích

Tento příklad ukazuje použití Invoke-Command ke spuštění jednoho příkazu na více počítačích.

$parameters = @{
  ComputerName = "Server01", "Server02", "TST-0143", "localhost"
  ConfigurationName = 'MySession.PowerShell'
  ScriptBlock = { Get-EventLog "Windows PowerShell" }
}
Invoke-Command @parameters

Parametr ComputerName určuje seznam názvů počítačů oddělených čárkami. Seznam počítačů obsahuje hodnotu localhost, která představuje místní počítač. Parametr ConfigurationName určuje alternativní konfiguraci relace. Parametr ScriptBlock spustí Get-EventLog pro získání protokolů událostí Prostředí Windows PowerShell z každého počítače.

Příklad 7: Získání verze hostitelského programu na více počítačích

Tento příklad získá verzi hostitelského programu PowerShellu běžícího na 200 vzdálených počítačích.

$version = Invoke-Command -ComputerName (Get-Content Machines.txt) -ScriptBlock {(Get-Host).Version}

Protože je spuštěn pouze jeden příkaz, nemusíte vytvářet trvalá připojení ke každému počítači. Místo toho příkaz používá k označení počítačů parametr ComputerName. K určení počítačů používá rutinu Get-Content k získání obsahu souboru Machine.txt, souboru názvů počítačů.

Rutina Invoke-Command spustí na vzdálených počítačích příkaz Get-Host. K získání vlastnosti verze hostitele PowerShellu používá zápis tečky.

Tyto příkazy běží po jednom. Po dokončení příkazů se výstup příkazů ze všech počítačů uloží do proměnné $version. Výstup obsahuje název počítače, ze kterého data pocházejí.

Příklad 8: Spuštění úlohy na pozadí na několika vzdálených počítačích

Tento příklad spustí příkaz na dvou vzdálených počítačích. Příkaz Invoke-Command používá parametr AsJob, aby se příkaz spustil jako úloha na pozadí. Příkazy běží na vzdálených počítačích, ale úloha existuje na místním počítači. Výsledky se přenesou do místního počítače.

$s = New-PSSession -ComputerName Server01, Server02
Invoke-Command -Session $s -ScriptBlock {Get-EventLog system} -AsJob

Id   Name    State      HasMoreData   Location           Command
---  ----    -----      -----         -----------        ---------------
1    Job1    Running    True          Server01,Server02  Get-EventLog system

$j = Get-Job
$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  :

$results = $j | Receive-Job

Rutina New-PSSession vytvoří relace na vzdálených počítačích Server01 a Server02. Rutina Invoke-Command spouští úlohu na pozadí v každé relaci. Příkaz používá parametr AsJob ke spuštění příkazu jako úlohu na pozadí. Tento příkaz vrátí objekt úlohy, který obsahuje dva podřízené objekty úlohy, jeden pro každou úlohu spuštěnou na dvou vzdálených počítačích.

Příkaz Get-Job uloží objekt úlohy do proměnné $j. Proměnná $j se pak předá do rutiny Format-List, aby se zobrazily všechny vlastnosti objektu úlohy v seznamu. Poslední příkaz získá výsledky úloh. Objekt úlohy v $j předá rutině Receive-Job a uloží výsledky do proměnné $results.

Příklad 9: Zahrnutí místních proměnných do příkazu spuštěného na vzdáleném počítači

Tento příklad ukazuje, jak zahrnout hodnoty místních proměnných do příkazu spuštěného ve vzdáleném počítači. Příkaz používá modifikátor oboru Using k identifikaci místní proměnné ve vzdáleném příkazu. Ve výchozím nastavení se předpokládá, že všechny proměnné budou definovány ve vzdálené relaci. Modifikátor oboru Using byl zaveden v PowerShellu 3.0. Další informace o modifikátoru oboru Using naleznete v tématu about_Remote_Variables a about_Scopes.

$Log = "Windows PowerShell"
Invoke-Command -ComputerName Server01 -ScriptBlock { Get-EventLog -LogName $Using:Log -Newest 10 }

Proměnná $Log ukládá název protokolu událostí v prostředí Windows PowerShell. Rutina Invoke-Command spouští Get-EventLog na Serveru01, aby získala deset nejnovějších událostí z protokolu událostí. Hodnota parametru LogName je proměnná $Log, která je předponou modifikátoru oboru Using, který označuje, že byl vytvořen v místní relaci, nikoli ve vzdálené relaci.

Příklad 10: Skrytí názvu počítače

Tento příklad ukazuje účinek použití HideComputerName parametr Invoke-Command. HideComputerName nezmění objekt, který tato rutina vrátí. Změní se jenom zobrazení. Stále můžete použít rutiny Format k zobrazení vlastnosti PsComputerName některého z ovlivněných objektů.

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

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

První dva příkazy používají Invoke-Command ke spuštění příkazu Get-Process pro proces PowerShellu. Výstup prvního příkazu zahrnuje vlastnost PsComputerName, která obsahuje název počítače, na kterém byl příkaz spuštěn. Výstup druhého příkazu, který používá HideComputerName, nezahrnuje sloupec PsComputerName.

Příklad 11: Použití klíčového slova Param v bloku skriptu

Klíčové slovo Param a parametr ArgumentList slouží k předání hodnot proměnných pojmenovaným parametrům v bloku skriptu. Tento příklad zobrazuje názvy souborů začínající písmenem a a mají příponu .pdf.

Další informace o klíčovém slově Param naleznete v tématu about_Language_Keywords.

$parameters = @{
    ComputerName = "Server01"
    ScriptBlock = { Param ($param1,$param2) Get-ChildItem -Name $param1 -Include $param2 }
    ArgumentList = "a*", "*.pdf"
}
Invoke-Command @parameters

aa.pdf
ab.pdf
ac.pdf
az.pdf

Invoke-Command používá parametr ScriptBlock, který definuje dvě proměnné, $param1 a $param2. Get-ChildItem používá pojmenované parametry, Name a Include s názvy proměnných. ArgumentList předá hodnoty proměnným.

Příklad 12: Použití $args automatické proměnné v bloku skriptu

$args automatické proměnné a parametr ArgumentList slouží k předávání hodnot pole do pozic parametrů v bloku skriptu. Tento příklad zobrazuje obsah adresáře serveru .txt souborů. Parametr Get-ChildItemPath je pozice 0 a parametr Filter je pozice 1.

Další informace o proměnné $args najdete v tématu about_Automatic_Variables

$parameters = @{
    ComputerName = "Server01"
    ScriptBlock = { Get-ChildItem $args[0] $args[1] }
    ArgumentList = "C:\Test", "*.txt*"
}
Invoke-Command @parameters

Directory: C:\Test

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           6/12/2019    15:15            128 alog.txt
-a---           7/27/2019    15:16            256 blog.txt
-a---           9/28/2019    17:10             64 zlog.txt

používá parametr ScriptBlock a určuje a maticové hodnoty. ArgumentList předává hodnoty pole $args do umístění parametrů Get-ChildItem pro path a filter.

Příklad 13: Spuštění skriptu na všech počítačích uvedených v textovém souboru

Tento příklad používá rutinu Invoke-Command ke spuštění skriptu Sample.ps1 na všech počítačích uvedených v souboru Servers.txt. Příkaz k zadání souboru skriptu používá parametr FilePath. Tento příkaz umožňuje spustit skript na vzdálených počítačích, i když soubor skriptu není přístupný vzdáleným počítačům.

Invoke-Command -ComputerName (Get-Content Servers.txt) -FilePath C:\Scripts\Sample.ps1 -ArgumentList Process, Service

Když příkaz odešlete, obsah souboru Sample.ps1 se zkopíruje do bloku skriptu a blok skriptu se spustí na každém ze vzdálených počítačů. Tento postup odpovídá použití parametru ScriptBlock k odeslání obsahu skriptu.

Příklad 14: Spuštění příkazu na vzdáleném počítači pomocí identifikátoru URI

Tento příklad ukazuje, jak spustit příkaz na vzdáleném počítači, který je identifikován identifikátorem URI (Uniform Resource Identifier). Tento konkrétní příklad spustí příkaz Set-Mailbox na vzdáleném serveru Exchange.

$LiveCred = Get-Credential
$parameters = @{
  ConfigurationName = 'Microsoft.Exchange'
  ConnectionUri = 'https://ps.exchangelabs.com/PowerShell'
  Credential = $LiveCred
  Authentication = 'Basic'
  ScriptBlock = {Set-Mailbox Dan -DisplayName "Dan Park"}
}
Invoke-Command @parameters

První řádek používá rutinu Get-Credential k uložení přihlašovacích údajů Windows Live ID do proměnné $LiveCred. PowerShell vyzve uživatele k zadání přihlašovacích údajů windows Live ID.

Proměnná $parameters je tabulka hash obsahující parametry, které se mají předat rutině Invoke-Command. Rutina Invoke-Command spustí příkaz Set-Mailbox pomocí konfigurace relace Microsoft.Exchange. Parametr ConnectionURI určuje adresu URL koncového bodu serveru Exchange. Parametr přihlašovacích údajů přihlašovacích údajů určuje přihlašovací údaje uložené v proměnné . Parametr AuthenticationMechanism určuje použití základního ověřování. Parametr ScriptBlock určuje blok skriptu, který tento příkaz obsahuje.

Příklad 15: Použití možnosti relace

Tento příklad ukazuje, jak vytvořit a použít parametr SessionOption.

$so = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck
Invoke-Command -ComputerName server01 -UseSSL -ScriptBlock { Get-HotFix } -SessionOption $so -Credential server01\user01

Rutina New-PSSessionOption vytvoří objekt možnosti relace, který způsobí, že vzdálený konec neověří certifikační autoritu, canonický název a seznamy odvolaných certifikátů při vyhodnocování příchozího připojení HTTPS. Objekt SessionOption je uložen v proměnné $so.

Poznámka

Zakázání těchto kontrol je vhodné pro řešení potíží, ale samozřejmě není bezpečné.

Rutina Invoke-Command spouští příkaz Get-HotFix vzdáleně. Parametr SessionOption má proměnnou $so.

Příklad 16: Správa přesměrování identifikátoru URI ve vzdáleném příkazu

Tento příklad ukazuje, jak pomocí parametrů AllowRedirection a SessionOp tion spravovat přesměrování identifikátoru URI ve vzdáleném příkazu.

$max = New-PSSessionOption -MaximumRedirection 1
$parameters = @{
  ConnectionUri = "https://ps.exchangelabs.com/PowerShell"
  ScriptBlock = { Get-Mailbox dan }
  AllowRedirection = $true
  SessionOption = $max
}
Invoke-Command @parameters

Rutina New-PSSessionOption vytvoří objekt PSSessionOption uložený v proměnné $max. Příkaz používá MaximumRedirection parametr nastavit MaximumConnectionRedirectionCount vlastnost PSSessionOption objektu na 1.

Rutina Invoke-Command spustí příkaz Get-Mailbox na vzdáleném serveru Microsoft Exchange Server. Parametr AllowRedirection poskytuje explicitní oprávnění k přesměrování připojení na alternativní koncový bod. Parametr SessionOption používá objekt relace uložený v proměnné $max.

V důsledku toho, pokud vzdálený počítač určený ConnectionURI vrátí zprávu přesměrování, PowerShell přesměruje připojení, ale pokud nový cíl vrátí jinou zprávu přesměrování, je překročena hodnota počtu přesměrování 1 a Invoke-Command vrátí neukončující chybu.

Příklad 17: Přístup ke sdílené síťové složce ve vzdálené relaci

Tento příklad ukazuje, jak získat přístup ke sdílené síťové složce ze vzdálené relace. K předvedení příkladu se používají tři počítače. Server01 je místní počítač, Server02 je vzdálený počítač a Net03 obsahuje sdílenou síťovou složku. Server01 se připojí k Serveru02 a server02 provede druhý segment směrování na Net03 pro přístup ke sdílené síťové složce. Další informace o tom, jak vzdálené komunikace Prostředí PowerShell podporuje směrování mezi počítači, najdete v tématu Vytvoření druhého segmentu směrování vvzdálené komunikace PowerShellu .

Požadované delegování zprostředkovatele podpory zabezpečení přihlašovacích údajů (CredSSP) je povolené v nastavení klienta na místním počítači a v nastavení služby na vzdáleném počítači. Pokud chcete příkazy spustit v tomto příkladu, musíte být členem skupiny Administrators na místním počítači a ve vzdáleném počítači.

Enable-WSManCredSSP -Role Client -DelegateComputer Server02
$s = New-PSSession Server02
Invoke-Command -Session $s -ScriptBlock {Enable-WSManCredSSP -Role Server -Force}
$parameters = @{
  Session = $s
  ScriptBlock = { Get-Item \\Net03\Scripts\LogFiles.ps1 }
  Authentication = "CredSSP"
  Credential = "Domain01\Admin01"
}
Invoke-Command @parameters

Rutina Enable-WSManCredSSP umožňuje delegování CredSSP z místního počítače Serveru01 do vzdáleného počítače Server02. Parametr role určuje, Klient nakonfigurovat nastavení klienta CredSSP v místním počítači.

New-PSSession vytvoří objekt PSSession pro Server02 a uloží objekt do proměnné $s.

Rutina Invoke-Command používá proměnnou $s pro připojení ke vzdálenému počítači Server02. Parametr ScriptBlock spustí Enable-WSManCredSSP na vzdáleném počítači. Parametr role určuje, Server nakonfigurovat nastavení serveru CredSSP na vzdáleném počítači.

Proměnná $parameters obsahuje hodnoty parametrů pro připojení ke sdílené síťové složce. Rutina Invoke-Command spustí příkaz Get-Item v relaci v $s. Tento příkaz získá skript ze sdílené síťové složky \\Net03\Scripts. Příkaz používá parametr ověřování s hodnotou CredSSP a parametrem Credential s hodnotou Domain01\Admin01.

Příklad 18: Spuštění skriptů na mnoha vzdálených počítačích

Tento příklad spustí skript na více než sto počítačích. Pokud chcete minimalizovat dopad na místní počítač, připojí se ke každému počítači, spustí skript a pak se odpojí od každého počítače. Skript se bude dál spouštět v odpojených relacích.

$parameters = @{
  ComputerName = (Get-Content -Path C:\Test\Servers.txt)
  InDisconnectedSession = $true
  FilePath = "\\Scripts\Public\ConfigInventory.ps1"
  SessionOption = @{OutputBufferingMode="Drop";IdleTimeout=43200000}
}
Invoke-Command @parameters

Příkaz ke spuštění skriptu používá Invoke-Command. Hodnota parametru ComputerName je příkaz Get-Content, který získá názvy vzdálených počítačů z textového souboru. Parametr InDisconnectedSession odpojí relace hned po spuštění příkazu. Hodnota parametru FilePath je skript, který Invoke-Command běží na každém počítači.

Hodnota SessionOption je tabulka hash. Hodnota OutputBufferingMode je nastavená na hodnotu Drop a hodnota IdleTimeout je nastavená na 43200000 milisekund (12 hodin).

Pokud chcete získat výsledky příkazů a skriptů, které se spouští v odpojených relacích, použijte rutinu Receive-PSSession.

Parametry

-AllowRedirection

Umožňuje přesměrování tohoto připojení na alternativní identifikátor URI (Uniform Resource Identifier).

Pokud použijete parametr ConnectionURI, vzdálený cíl může vrátit pokyn k přesměrování na jiný identifikátor URI. PowerShell ve výchozím nastavení nesměruje připojení, ale tento parametr můžete použít k povolení přesměrování připojení.

Můžete také omezit počet přesměrování připojení změnou hodnoty možnosti MaximumConnectionRedirectionCount relace. Použijte parametr MaximumRedirection rutiny nebo nastavte vlastnost MaximumConnectionRedirectionCount proměnné předvolby . Výchozí hodnota je 5.

Typ:SwitchParameter
Position:Named
Default value:False
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-ApplicationName

Určuje segment názvu aplikace identifikátoru URI připojení. Tento parametr použijte k zadání názvu aplikace, pokud v příkazu nepoužíváte parametr ConnectionURI.

Výchozí hodnota je hodnota proměnné předvoleb $PSSessionApplicationName v místním počítači. Pokud tato proměnná předvoleb není definovaná, výchozí hodnota je WSMAN. Tato hodnota je vhodná pro většinu použití. Další informace naleznete v tématu about_Preference_Variables.

Služba WinRM používá název aplikace k výběru naslouchacího procesu pro službu žádosti o připojení. Hodnota tohoto parametru by měla odpovídat hodnotě URLPrefix vlastnosti naslouchacího procesu ve vzdáleném počítači.

Typ:String
Position:Named
Default value:$PSSessionApplicationName if set on the local computer, otherwise WSMAN
Vyžadováno:False
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

-ArgumentList

Poskytuje hodnoty místních proměnných v příkazu. Proměnné v příkazu se před spuštěním příkazu na vzdáleném počítači nahradí těmito hodnotami. Zadejte hodnoty v seznamu odděleném čárkami. Hodnoty jsou přidružené k proměnným v pořadí, v jakém jsou uvedeny. Alias pro ArgumentList je Args.

Hodnoty v parametru ArgumentList mohou být skutečné hodnoty, například 1024, nebo mohou být odkazy na místní proměnné, například $max.

Pokud chcete v příkazu použít místní proměnné, použijte následující formát příkazu:

{param($<name1>[, $<name2>]...) <command-with-local-variables>} -ArgumentList <value> nebo <local-variable>

Klíčové slovo param uvádí místní proměnné, které se používají v příkazu. ArgumentList poskytuje hodnoty proměnných v pořadí, v jakém jsou uvedeny.

Typ:Object[]
Aliasy:Args
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-AsJob

Označuje, že tato rutina spustí příkaz jako úlohu na pozadí na vzdáleném počítači. Pomocí tohoto parametru můžete spouštět příkazy, které dlouho trvá dokončení.

Pokud použijete parametr AsJob, vrátí příkaz objekt, který představuje úlohu, a pak zobrazí příkazový řádek. Během dokončení úlohy můžete pokračovat v práci v relaci. Ke správě úlohy použijte rutiny *-Job. K získání výsledků úlohy použijte rutinu Receive-Job.

Parametr AsJob se podobá použití rutiny ke vzdálenému spuštění rutiny . Nicméně s AsJob, úloha se vytvoří v místním počítači, i když úloha běží na vzdáleném počítači. Výsledky vzdálené úlohy se automaticky vrátí do místního počítače.

Další informace o úlohách na pozadí PowerShellu najdete v tématu about_Jobs a about_Remote_Jobs.

Typ:SwitchParameter
Position:Named
Default value:False
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-Authentication

Určuje mechanismus, který se používá k ověření přihlašovacích údajů uživatele. Ověřování CredSSP je k dispozici pouze v systémech Windows Vista, Windows Server 2008 a novějších verzích operačního systému Windows.

Přijatelné hodnoty pro tento parametr jsou následující:

  • Výchozí
  • Základní
  • Credssp
  • Trávit
  • Kerberos
  • Vyjednávat
  • NegotiateWithImplicitCredential

Výchozí hodnota je Default.

Další informace o hodnotách tohoto parametru naleznete v tématu AuthenticationMechanism – výčet.

Opatrnost

Ověřování zprostředkovatele podpory zabezpečení přihlašovacích údajů (CredSSP), ve kterém jsou přihlašovací údaje uživatele předány vzdálenému počítači, který se má ověřit, je určený pro příkazy, které vyžadují ověření u více než jednoho prostředku, například pro přístup ke vzdálené síťové sdílené složce. Tento mechanismus zvyšuje riziko zabezpečení vzdálené operace. Pokud dojde k ohrožení zabezpečení vzdáleného počítače, dají se k řízení síťové relace použít přihlašovací údaje, které jsou mu předány. Další informace najdete v tématu zprostředkovatele podpory zabezpečení přihlašovacích údajů .

Typ:AuthenticationMechanism
Přípustné hodnoty:Default, Basic, Negotiate, NegotiateWithImplicitCredential, Credssp, Digest, Kerberos
Position:Named
Default value:Default
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-CertificateThumbprint

Určuje certifikát digitálního veřejného klíče (X509) uživatelského účtu, který má oprávnění k připojení k odpojené relaci. Zadejte kryptografický otisk certifikátu.

Certifikáty se používají při ověřování na základě klientských certifikátů. Dají se mapovat jenom na místní uživatelské účty a nefungují s doménovými účty.

Pokud chcete získat kryptografický otisk certifikátu, použijte Get-Item nebo Get-ChildItem příkaz v jednotce PowerShell Cert:

Typ:String
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-ComputerName

Určuje počítače, na kterých se příkaz spouští. Výchozí hodnota je místní počítač.

Pokud použijete parametr ComputerName, PowerShell vytvoří dočasné připojení, které se použije jenom ke spuštění zadaného příkazu a pak se zavře. Pokud potřebujete trvalé připojení, použijte parametr relace .

Do seznamu oddělených čárkami zadejte název NETBIOS, IP adresu nebo plně kvalifikovaný název domény jednoho nebo více počítačů. Chcete-li zadat místní počítač, zadejte název počítače, localhost nebo tečku (.).

Chcete-li použít IP adresu v hodnotě ComputerName, musí příkaz obsahovat parametr credential. Počítač musí být nakonfigurovaný pro přenos HTTPS nebo musí být IP adresa vzdáleného počítače zahrnuta do seznamu WinRM místního počítače TrustedHosts. Pokyny k přidání názvu počítače do seznamu TrustedHosts naleznete v tématu Postup přidání počítače do seznamu důvěryhodných hostitelů.

V systému Windows Vista a novějších verzích operačního systému Windows je nutné zahrnout místní počítač do hodnoty ComputerName, musíte spustit PowerShell pomocí možnosti Spustit jako správce.

Typ:String[]
Aliasy:Cn
Position:0
Default value:Local computer
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-ConfigurationName

Určuje konfiguraci relace, která se používá pro novou PSSession .

Zadejte název konfigurace nebo plně kvalifikovaný identifikátor URI prostředku pro konfiguraci relace. Pokud zadáte pouze název konfigurace, předzálohuje se následující identifikátor URI schématu: https://schemas.microsoft.com/PowerShell.

Konfigurace relace relace se nachází ve vzdáleném počítači. Pokud zadaná konfigurace relace ve vzdáleném počítači neexistuje, příkaz selže.

Výchozí hodnota je hodnota proměnné předvoleb $PSSessionConfigurationName v místním počítači. Pokud tato proměnná předvoleb není nastavená, výchozí hodnota je Microsoft.PowerShell. Další informace naleznete v tématu about_Preference_Variables.

Typ:String
Position:Named
Default value:$PSSessionConfigurationName if set on the local computer, otherwise Microsoft.PowerShell
Vyžadováno:False
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

-ConnectionUri

Určuje identifikátor URI (Uniform Resource Identifier), který definuje koncový bod připojení relace. Identifikátor URI musí být plně kvalifikovaný.

Formát tohoto řetězce je následující:

<Transport>://<ComputerName>:<Port>/<ApplicationName>

Výchozí hodnota je následující:

https://localhost:5985/WSMAN

Pokud nezadáte identifikátor URI připojení, můžete použít parametry UseSSL a Port k zadání hodnot identifikátoru URI připojení.

Platné hodnoty pro segment Transport identifikátoru URI jsou HTTP a HTTPS. Pokud zadáte identifikátor URI připojení s přenosovým segmentem, ale nezadáte port, relace se vytvoří s porty standardů: 80 pro HTTP a 443 pro HTTPS. Pokud chcete použít výchozí porty pro vzdálené komunikace PowerShellu, zadejte port 5985 pro HTTP nebo 5986 pro HTTPS.

Pokud cílový počítač přesměruje připojení na jiný identifikátor URI, PowerShell zabrání přesměrování, pokud v příkazu nepoužijete parametr AllowRedirect ion.

Typ:Uri[]
Aliasy:URI, CU
Position:0
Default value:https://localhost:5985/WSMAN
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-Credential

Určuje uživatelský účet, který má oprávnění k provedení této akce. Výchozí hodnota je aktuální uživatel.

Zadejte uživatelské jméno, například User01 nebo Domain01\User01. Nebo zadejte objekt PSCredential, například objekt vygenerovaný rutinou Get-Credential. Pokud zadáte uživatelské jméno, tato rutina vás vyzve k zadání hesla.

Typ:PSCredential
Position:Named
Default value:Current user
Vyžadováno:False
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

-EnableNetworkAccess

Označuje, že tato rutina přidá interaktivní token zabezpečení do relací zpětné smyčky. Interaktivní token umožňuje spouštět příkazy v relaci zpětné smyčky, které získávají data z jiných počítačů. Můžete například spustit příkaz v relaci, která kopíruje soubory XML ze vzdáleného počítače do místního počítače.

Relace zpětné smyčky je PSSession, která pochází a končí na stejném počítači. Pokud chcete vytvořit relaci zpětné smyčky, vynecháte parametr ComputerName nebo nastavte jeho hodnotu na tečku (.), localhost nebo název místního počítače.

Ve výchozím nastavení se relace zpětné smyčky vytvářejí pomocí síťového tokenu, který nemusí poskytovat dostatečná oprávnění k ověření ve vzdálených počítačích.

Parametr EnableNetworkAccess je efektivní pouze v relacích zpětné smyčky. Pokud při vytváření relace na vzdáleném počítači používáte EnableNetworkAccess, příkaz bude úspěšný, ale parametr bude ignorován.

Vzdálený přístup v relaci zpětné smyčky můžete povolit pomocí hodnoty CredSSP parametru Authentication, který deleguje přihlašovací údaje relace na jiné počítače.

Chcete-li chránit počítač před škodlivým přístupem, odpojené relace zpětné smyčky, které mají interaktivní tokeny, které jsou vytvořeny pomocí EnableNetworkAccess, lze znovu připojit pouze z počítače, na kterém byla relace vytvořena. Odpojené relace, které používají ověřování CredSSP, je možné znovu připojit z jiných počítačů. Další informace najdete v tématu Disconnect-PSSession.

Tento parametr byl představen v PowerShellu 3.0.

Typ:SwitchParameter
Position:Named
Default value:False
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-FilePath

Určuje místní skript, který tato rutina spouští na jednom nebo více vzdálených počítačích. Zadejte cestu a název souboru skriptu nebo vložte cestu ke skriptu, která se má Invoke-Command. Skript musí být umístěn v místním počítači nebo v adresáři, ke kterému má místní počítač přístup. Pomocí ArgumentList zadejte hodnoty parametrů ve skriptu.

Při použití tohoto parametru PowerShell převede obsah zadaného souboru skriptu na blok skriptu, přenese blok skriptu do vzdáleného počítače a spustí ho na vzdáleném počítači.

Typ:String
Aliasy:PSPath
Position:1
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-HideComputerName

Označuje, že tato rutina vynechá název počítače každého objektu z zobrazení výstupu. Ve výchozím nastavení se v zobrazení zobrazí název počítače, který objekt vygeneroval.

Tento parametr má vliv pouze na zobrazení výstupu. Objekt se nezmění.

Typ:SwitchParameter
Aliasy:HCN
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-InDisconnectedSession

Označuje, že tato rutina spouští příkaz nebo skript v odpojené relaci.

Pokud použijete parametr InDisconnectedSession, Invoke-Command vytvoří trvalou relaci na každém vzdáleném počítači, spustí příkaz zadaný parametrem ScriptBlock nebo FilePath a pak se odpojí od relace. Příkazy se budou dál spouštět v odpojených relacích. inDisconnectedSession umožňuje spouštět příkazy bez zachování připojení ke vzdáleným relacím. Vzhledem k tomu, že se relace před vrácením výsledků odpojí, InDisconnectedSession zajistí, aby se všechny výsledky příkazů vrátily do znovu propojené relace, a ne rozdělení mezi relacemi.

Nemůžete použít InDisconnectedSession s parametrem Session nebo parametrem AsJob.

Příkazy, které používají InDisconnectedSession vracejí objekt PSSession, který představuje odpojenou relaci. Nevrací výstup příkazu. Pokud se chcete připojit k odpojené relaci, použijte rutiny Connect-PSSession nebo Receive-PSSession. Pokud chcete získat výsledky příkazů spuštěných v relaci, použijte rutinu Receive-PSSession. Pokud chcete spustit příkazy, které generují výstup v odpojené relaci, nastavte hodnotu OutputBufferingMode relace na Drop. Pokud se chcete připojit k odpojené relaci, nastavte časový limit nečinnosti v relaci tak, abyste měli dostatek času na připojení před odstraněním relace.

Režim vyrovnávací paměti výstupu a časový limit nečinnosti můžete nastavit v parametru SessionOption nebo v proměnné předvoleb $PSSessionOption. Další informace o možnostech relace naleznete v tématu New-PSSessionOption a about_Preference_Variables.

Další informace o funkci Odpojené relace naleznete v tématu about_Remote_Disconnected_Sessions.

Tento parametr byl představen v PowerShellu 3.0.

Typ:SwitchParameter
Aliasy:Disconnected
Position:Named
Default value:False
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-InputObject

Určuje vstup pro příkaz. Zadejte proměnnou obsahující objekty nebo zadejte příkaz nebo výraz, který objekty získá.

Při použití parametru InputObject použijte $Input automatickou proměnnou v hodnotě parametru ScriptBlock představující vstupní objekty.

Typ:PSObject
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

-JobName

Určuje popisný název úlohy na pozadí. Ve výchozím nastavení se úlohy nazývají Job<n>, kde <n> je pořadové číslo.

Pokud v příkazu použijete parametr JobName, příkaz se spustí jako úloha a Invoke-Command vrátí objekt úlohy, i když do příkazu nezahrnete asjob.

Další informace o úlohách na pozadí PowerShellu najdete v tématu about_Jobs.

Typ:String
Position:Named
Default value:Job<n>
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-NoNewScope

Označuje, že tato rutina spouští zadaný příkaz v aktuálním oboru. Ve výchozím nastavení Invoke-Command spouští příkazy ve vlastním oboru.

Tento parametr je platný pouze v příkazech, které se spouští v aktuální relaci, tj. příkazy, které vynechají parametry ComputerName a Relace.

Tento parametr byl představen v PowerShellu 3.0.

Typ:SwitchParameter
Position:Named
Default value:False
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-Port

Určuje síťový port na vzdáleném počítači, který se používá pro tento příkaz. Pokud se chcete připojit ke vzdálenému počítači, musí vzdálený počítač naslouchat na portu, který připojení používá. Výchozí porty jsou 5985, což je port WinRM pro HTTP a 5986, což je port WinRM pro HTTPS.

Před použitím alternativního portu nakonfigurujte naslouchací proces WinRM na vzdáleném počítači tak, aby naslouchal na tomto portu. Pokud chcete nakonfigurovat naslouchací proces, na příkazovém řádku PowerShellu zadejte následující dva příkazy:

Remove-Item -Path WSMan:\Localhost\listener\listener* -Recurse

New-Item -Path WSMan:\Localhost\listener -Transport http -Address * -Port \<port-number\>

Nepoužívejte parametr Port, pokud ho nepotřebujete. Port nastavený v příkazu se vztahuje na všechny počítače nebo relace, na kterých se příkaz spouští. Alternativní nastavení portu může zabránit spuštění příkazu na všech počítačích.

Typ:Int32
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-ScriptBlock

Určuje příkazy, které se mají spustit. Uzavřete příkazy do složených závorek { } k vytvoření bloku skriptu. Tento parametr je povinný.

Ve výchozím nastavení se na vzdáleném počítači vyhodnocují všechny proměnné v příkazu. Chcete-li do příkazu zahrnout místní proměnné, použijte ArgumentList.

Typ:ScriptBlock
Aliasy:Command
Position:0
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-Session

Určuje pole relací, ve kterých tato rutina spouští příkaz. Zadejte proměnnou, která obsahuje psSession objekty nebo příkaz, který vytvoří nebo získá psSession objekty, například New-PSSession nebo Get-PSSession příkaz.

Při vytváření psSession, PowerShell vytvoří trvalé připojení ke vzdálenému počítači. Pomocí PSSession spusťte řadu souvisejících příkazů, které sdílejí data. Pokud chcete spustit jeden příkaz nebo řadu nesouvisejících příkazů, použijte parametr ComputerName. Další informace naleznete v tématu about_PSSessions.

Typ:PSSession[]
Position:0
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-SessionName

Určuje popisný název odpojené relace. Název můžete použít k odkaz na relaci v dalších příkazech, jako je například příkaz Get-PSSession. Tento parametr je platný pouze s parametrem InDisconnectedSession.

Tento parametr byl představen v PowerShellu 3.0.

Typ:String[]
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-SessionOption

Určuje upřesňující možnosti relace. Zadejte objekt SessionOption, například objekt, který vytvoříte pomocí rutiny New-PSSessionOption, nebo tabulku hash, ve které jsou klíče názvy možností relace a hodnoty jsou hodnoty možností relace.

Výchozí hodnoty možností jsou určeny hodnotou proměnné předvoleb $PSSessionOption, pokud je nastavená. V opačném případě se výchozí hodnoty vytvoří pomocí možností nastavených v konfiguraci relace.

Hodnoty možností relace mají přednost před výchozími hodnotami pro relace nastavené v proměnné předvoleb $PSSessionOption a v konfiguraci relace. Nemají však přednost před maximálními hodnotami, kvótami nebo limity nastavenými v konfiguraci relace.

Popis možností relace, které obsahují výchozí hodnoty, najdete v tématu New-PSSessionOption. Informace o proměnné předvoleb $PSSessionOption naleznete v tématu about_Preference_Variables. Další informace o konfiguracích relací najdete v tématu about_Session_Configurations.

Typ:PSSessionOption
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-ThrottleLimit

Určuje maximální počet souběžných připojení, která lze navázat pro spuštění tohoto příkazu. Pokud tento parametr vynecháte nebo zadáte hodnotu 0, použije se výchozí hodnota 32.

Omezení se vztahuje pouze na aktuální příkaz, ne na relaci nebo na počítač.

Typ:Int32
Position:Named
Default value:32
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-UseSSL

Označuje, že tato rutina používá protokol SSL (Secure Sockets Layer) k navázání připojení ke vzdálenému počítači. Ve výchozím nastavení se ssl nepoužívá.

WS-Management šifruje veškerý obsah PowerShellu přenášený přes síť. Parametr UseSSL je dodatečná ochrana, která odesílá data přes protokol HTTPS místo protokolu HTTP.

Pokud použijete tento parametr, ale ssl není k dispozici na portu použitém pro příkaz, příkaz selže.

Typ:SwitchParameter
Position:Named
Default value:False
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-VMId

Určuje pole ID virtuálních počítačů.

Typ:Guid[]
Position:0
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

-VMName

Určuje pole názvů virtuálních počítačů.

Typ:String[]
Position:Named
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

Vstupy

ScriptBlock

Příkaz můžete převést do bloku skriptu tak, aby Invoke-Command. Použijte $Input automatickou proměnnou k reprezentaci vstupních objektů v příkazu.

Výstupy

System.Management.Automation.PSRemotingJob, System.Management.Automation.Runspaces.PSSession, or the output of the invoked command

Tato rutina vrátí objekt úlohy, pokud použijete parametr AsJob. Pokud zadáte parametr InDisconnectedSession, Invoke-Command vrátí objekt PSSession. V opačném případě vrátí výstup vyvolaného příkazu, což je hodnota ScriptBlock parametru.

Poznámky

V systému Windows Vista a novějších verzích operačního systému Windows použijte parametr ComputerNameInvoke-Command ke spuštění příkazu na místním počítači, musíte spustit PowerShell pomocí možnosti Spustit jako správce.

Když spustíte příkazy na více počítačích, PowerShell se připojí k počítačům v pořadí, v jakém se zobrazí v seznamu. Výstup příkazu se ale zobrazí v pořadí, v jakém se přijímá ze vzdálených počítačů, což se může lišit.

Do výsledků příkazu jsou zahrnuty chyby, které jsou výsledkem příkazu, který Invoke-Command spuštění. Chyby, které by ukončovaly chyby v místním příkazu, se ve vzdáleném příkazu považují za neukončující chyby. Tato strategie zajišťuje, že ukončení chyb na jednom počítači nezavře příkaz na všech počítačích, na kterých je spuštěný. Tento postup se používá i v případě, že je vzdálený příkaz spuštěný na jednom počítači.

Pokud vzdálený počítač není v doméně, které důvěřuje místnímu počítači, nemusí být počítač schopen ověřit přihlašovací údaje uživatele. Chcete-li přidat vzdálený počítač do seznamu důvěryhodných hostitelů ve službě WS-Management, použijte následující příkaz ve zprostředkovateli WSMAN, kde <Remote-Computer-Name> je název vzdáleného počítače:

Set-Item -Path WSMan:\Localhost\Client\TrustedHosts -Value \<Remote-Computer-Name\>

Při odpojení PSSession pomocí parametru InDisconnectedSession je stav relace Odpojeno a dostupnost je None. Hodnota vlastnosti State je relativní vzhledem k aktuální relaci. Hodnota Odpojeno znamená, že PSSession není připojený k aktuální relaci. Neznamená to ale, že PSSession je odpojený od všech relací. Může se připojit k jiné relaci. Pokud chcete zjistit, jestli se k relaci můžete připojit nebo znovu připojit, použijte vlastnost Availability.

Hodnota dostupnost none None indikuje, že se můžete připojit k relaci. Hodnota Busy značí, že se nemůžete připojit k PSSession, protože je připojený k jiné relaci. Další informace o hodnotách State vlastnost relace naleznete v tématu RunspaceState. Další informace o hodnotách vlastnosti Availability relace naleznete v tématu RunspaceAvailability.