Invoke-Command

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

Syntax

Invoke-Command
      [-ScriptBlock] <ScriptBlock>
      [-NoNewScope]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-Session] <PSSession[]>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-FilePath] <String>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-Session] <PSSession[]>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      [-RemoteDebug]
      [-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]
      [-RemoteDebug]
      [-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]
      [-RemoteDebug]
      [-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]
      [-RemoteDebug]
      [-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]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-ScriptBlock] <ScriptBlock>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-VMId] <Guid[]>
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-ScriptBlock] <ScriptBlock>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -VMName <String[]>
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-FilePath] <String>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-VMId] <Guid[]>
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-FilePath] <String>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -VMName <String[]>
      [<CommonParameters>]
Invoke-Command
      [-Port <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      -HostName <String[]>
      [-UserName <String>]
      [-KeyFilePath <String>]
      [-SSHTransport]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-Subsystem <String>]
      [-ConnectingTimeout <int>]
      [<CommonParameters>]
Invoke-Command
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      [-RunAsAdministrator]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -ContainerId <String[]>
      [<CommonParameters>]
Invoke-Command
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-FilePath] <String>
      [-RunAsAdministrator]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -ContainerId <String[]>
      [<CommonParameters>]
Invoke-Command
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      -SSHConnection <Hashtable[]>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [-AsJob]
      [-HideComputerName]
      -FilePath <String>
      -HostName <String[]>
      [-UserName <String>]
      [-KeyFilePath <String>]
      [-SSHTransport]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [-AsJob]
      [-HideComputerName]
      -FilePath <String>
      -SSHConnection <Hashtable[]>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<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 z příkazů, včetně chyb. Pomocí jednoho Invoke-Command příkazu můžete spouštět příkazy na více počítačích.

Pokud chcete spustit jeden příkaz na vzdáleném počítači, použijte parametr ComputerName . Pokud chcete spustit řadu souvisejících příkazů, které sdílejí data, použijte New-PSSession rutinu k vytvoření psSession (trvalé připojení) na vzdáleném počítači a pak pomocí parametruInvoke-Command Relace spuštění příkazu 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 .

Můžete také použít Invoke-Command na místním počítači ke spuštění bloku skriptu jako příkazu. 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 si přečtěte about_Remote.

Počínaje PowerShellem 6.0 můžete pomocí protokolu Secure Shell (SSH) navázat připojení a vyvolat příkazy na vzdálených počítačích. Protokol SSH musí být nainstalovaný na místním počítači a vzdálený počítač musí být nakonfigurovaný s koncovým bodem SSH PowerShellu. Výhodou vzdálené relace PowerShellu založeného na SSH je, že funguje na různých platformách (Windows, Linux, macOS). Pro relaci založenou na SSH použijete parametry HostName nebo SSHConnection k určení vzdáleného počítače a relevantních informací o připojení. Další informace o nastavení vzdálené komunikace přes SSH PowerShellu najdete v tématu Vzdálené komunikace PowerShellu přes SSH.

Některé ukázky kódu používají k zmenšení délky čáry splatting. Další informace najdete v tématu about_Splatting.

Příklady

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

Tento příklad spustí Test.ps1 skript 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í Get-Culture příkaz na vzdáleném počítači Serveru01.

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 spuštění příkazů. Parametr ScriptBlock určuje příkaz, který se má spustit na 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ý Get-Culture příkaz 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 $s proměnné. Relaci obvykle vytvoříte jenom v případě, že na vzdáleném počítači spustíte řadu příkazů.

Rutina Invoke-CommandGet-Culture spustí příkaz na serveru Server02. Parametr Relace určuje relaci uloženou $s v proměnné.

V reakci na to PowerShell spustí příkaz v relaci na počítači Server02.

Příklad 4: Spuštění řady příkazů, které sdílejí data pomocí relace

Tento příklad porovnává účinky použití vlastnosti ComputerName a Session parametru 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í parametr Invoke-CommandComputerName ke spuš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 $p do proměnné. Druhý příkaz získá hodnotu Vlastnosti VirtualMemorySize procesu PowerShellu.

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

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

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

Příklad 5: Vyvolání příkazu s blokem skriptu uloženým v proměnné

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

$command = { Get-WinEvent -LogName PowerShellCore/Operational |
  Where-Object {$_.Message -like "*certificate*"} }
Invoke-Command -ComputerName S1, S2 -ScriptBlock $command

Proměnná $command ukládá Get-WinEvent příkaz formátovaný jako blok skriptu. Spustí Invoke-Command příkaz uložený ve $command 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, jak použít 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-WinEvent -LogName PowerShellCore/Operational }
}
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 konfiguraci alternativní relace. Parametr ScriptBlock se spustí Get-WinEvent , aby se z každého počítače získaly protokoly událostí PowerShellCore/Operational.

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 vzdálených počítačích 200.

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

Protože se spouští jenom jeden příkaz, nemusíte vytvářet trvalá připojení k jednotlivým počítačům. Místo toho příkaz používá parametr ComputerName k označení počítačů. K určení počítačů používá Get-Content rutinu k získání obsahu souboru Machine.txt, souboru názvů počítačů.

Rutina Invoke-CommandGet-Host spustí příkaz na vzdálených počítačích. K získání vlastnosti Verze hostitele PowerShellu se používá tečka.

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

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 příkaz běžel 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 Serveru01 a Server02. Rutina Invoke-Command spustí ú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 z úloh spuštěných na dvou vzdálených počítačích.

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

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 na vzdáleném počítači. Příkaz používá Using modifikátor oboru 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 Using oboru byl zaveden v PowerShellu 3.0. Další informace o modifikátoru Using oboru najdete v tématu about_Remote_Variables a about_Scopes.

$Log = "PowerShellCore/Operational"
Invoke-Command -ComputerName Server01 -ScriptBlock {Get-WinEvent -LogName $Using:Log -MaxEvents 10}

Proměnná $Log ukládá název protokolu událostí, PowerShellCore/Operational. Rutina Invoke-Command běží Get-WinEvent na Serveru01, aby získala deset nejnovějších událostí z protokolu událostí. Hodnota parametru LogName je $Log proměnná, která je předponou Using modifikátoru oboru, která označuje, že byla vytvořena v místní relaci, ne ve vzdálené relaci.

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

Tento příklad ukazuje účinek použití parametru HideComputerName parametru Invoke-Command. HideComputerName nezmění objekt, který tato rutina vrátí. Změní se jenom zobrazení. Pomocí rutin Format můžete stále zobrazit vlastnost PsComputerName libovolného ovlivněného objektu.

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 slouží Invoke-Command ke spuštění Get-Process příkazu pro proces PowerShellu. Výstup prvního příkazu obsahuje 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, neobsahuje sloupec PsComputerName .

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

Klíčové Param slovo 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ů, které začínají písmenem a a mají příponu .pdf .

Další informace o klíčovém slově Param najdete 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, Název a Zahrnout 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

Automatická $args proměnná a parametr ArgumentList slouží k předávání hodnot matice do umístění parametrů v bloku skriptu. V tomto příkladu se zobrazí obsah .txt adresáře serveru souborů. Parametr Get-ChildItemPath je pozice 0 a parametr Filter je pozice 1.

Další informace o $args proměnné 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

Invoke-Commandpoužívá parametr ScriptBlock a Get-ChildItem určuje $args[0] hodnoty polí.$args[1] ArgumentList předá $args hodnoty Get-ChildItem pole do umístění parametrů 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-CommandSample.ps1 ke spuštění skriptu na všech počítačích uvedených v souboru Servers.txt . Příkaz používá parametr FilePath k určení souboru skriptu. 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

Při odeslání příkazu se obsah Sample.ps1 souboru zkopíruje do bloku skriptu a blok skriptu se spustí na všech vzdálených počítačích. Tento postup je ekvivalentní 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í Set-Mailbox příkaz 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 $LiveCred proměnné. 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-CommandSet-Mailbox spustí příkaz pomocí konfigurace relace Microsoft.Exchange . Parametr ConnectionURI určuje adresu URL koncového bodu serveru Exchange. Parametr Credential určuje přihlašovací údaje uložené v $LiveCred proměnné. Parametr AuthenticationMechanism určuje použití základního ověřování. Parametr ScriptBlock určuje blok skriptu, který obsahuje příkaz.

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 $so proměnné.

Poznámka

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

Rutina Invoke-CommandGet-HotFix spustí příkaz 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 SessionOption 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 , který je uložen v $max proměnné. Příkaz používá parametr MaximumRedirection k nastavení MaximumConnectionRedirectionCount vlastnost PSSessionOption objektu 1.

Rutina Invoke-CommandGet-Mailbox spustí příkaz na vzdáleném 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 $max proměnné.

V důsledku toho, pokud vzdálený počítač určený identifikátorem 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í, překročí se hodnota počtu přesměrování 1 a Invoke-Command vrátí chybu, která není ukončena.

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íť. Server01 se připojí k Serveru02 a pak 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 PowerShellu podporuje směrování mezi počítači, najdete v tématu Vytvoření druhého segmentu směrování v vzdálené komunikace PowerShellu.

Požadované delegování poskytovatele 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 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 = @{
  ComputerName = 'Server02'
  ScriptBlock = { Get-Item \\Net03\Scripts\LogFiles.ps1 }
  Authentication = "CredSSP"
  Credential = "Domain01\Admin01"
}
Invoke-Command @parameters

Tato Enable-WSManCredSSP rutina umožňuje delegování CredSSP z místního počítače Serveru01 na vzdálený počítač Server02. Parametr role určuje klient , aby na místním počítači nakonfiguroval nastavení klienta CredSSP.

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

Rutina Invoke-Command používá proměnnou $s pro připojení ke vzdálenému počítači Server02. Parametr ScriptBlock běží Enable-WSManCredSSP na vzdáleném počítači. Parametr role určuje Server pro konfiguraci 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-CommandGet-Item spustí příkaz v relaci v $s. Tento příkaz získá skript ze \\Net03\Scripts sdílené síťové složky. Příkaz používá parametr Authentication s hodnotou CredSSP a parametr credential s hodnotou Domain01\Admin01.

Příklad 18: Spouš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 používá Invoke-Command ke spuštění skriptu. Hodnota parametru ComputerName je Get-Content příkaz, který získá názvy vzdálených počítačů z textového souboru. Parametr InDisconnectedSession odpojí relace, jakmile spustí příkaz. 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 Drop a hodnota IdleTimeout je nastavená na 432000000 milisekund (12 hodin).

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

Příklad 19: Spuštění příkazu na vzdáleném počítači pomocí SSH

Tento příklad ukazuje, jak spustit příkaz na vzdáleném počítači pomocí Secure Shellu (SSH). Pokud je na vzdáleném počítači nakonfigurovaný protokol SSH tak, aby se zobrazila výzva k zadání hesel, zobrazí se výzva k zadání hesla. Jinak budete muset použít ověřování uživatelů na základě klíče SSH.

Invoke-Command -HostName UserA@LinuxServer01 -ScriptBlock { Get-MailBox * }

Příklad 20: Spuštění příkazu na vzdáleném počítači pomocí SSH a zadání ověřovacího klíče uživatele

Tento příklad ukazuje, jak spustit příkaz na vzdáleném počítači pomocí SSH a zadat soubor klíče pro ověření uživatele. Nebudete vyzváni k zadání hesla, pokud se ověření klíče nezdaří a vzdálený počítač je nakonfigurovaný tak, aby povoloval základní ověřování hesla.

Invoke-Command -HostName UserA@LinuxServer01 -ScriptBlock { Get-MailBox * } -KeyFilePath /UserA/UserAKey_rsa

Příklad 21: Spuštění souboru skriptu na více vzdálených počítačích pomocí SSH jako úlohy

Tento příklad ukazuje, jak spustit soubor skriptu na více vzdálených počítačích pomocí SSH a sady parametrů SSHConnection . Parametr SSHConnection přebírá pole hodnot hash tabulek, které obsahují informace o připojení pro každý počítač. Tento příklad vyžaduje, aby cílové vzdálené počítače měly nakonfigurovaný protokol SSH pro podporu ověřování uživatelů založených na klíčích.

$sshConnections =
@{ HostName="WinServer1"; UserName="Domain\UserA"; KeyFilePath="C:\Users\UserA\id_rsa" },
@{ HostName="UserB@LinuxServer5"; KeyFilePath="/Users/UserB/id_rsa" }
$results = Invoke-Command -FilePath c:\Scripts\CollectEvents.ps1 -SSHConnection $sshConnections

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 instrukce pro přesměrování na jiný identifikátor URI. PowerShell ve výchozím nastavení přesměrovává připojení, ale pomocí tohoto parametru můžete připojení přesměrovat.

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

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False

-ApplicationName

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

Výchozí hodnota je hodnota $PSSessionApplicationName proměnné předvoleb 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 najdete 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ě vlastnosti URLPrefix naslouchacího procesu na vzdáleném počítači.

Type:String
Position:Named
Default value:$PSSessionApplicationName if set on the local computer, otherwise WSMAN
Accept pipeline input:True
Accept wildcard characters:False

-ArgumentList

Poskytuje hodnoty parametrů pro skriptblock. Parametry v bloku skriptu se předávají umístěním z hodnoty pole zadané argumentu ArgumentList. To se označuje jako maticové splatování. Další informace o chování ArgumentList najdete v tématu about_Splatting.

Type:Object[]
Aliases:Args
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters: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é potrvá dlouhou dobu.

Když použijete parametr AsJob , příkaz vrátí 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 *-Job rutiny. Pokud chcete získat výsledky úlohy, použijte rutinu Receive-Job .

Parametr AsJob se podobá použití Invoke-Command rutiny ke vzdálenému Start-Job spuštění rutiny. Při použití AsJob se ale úloha vytvoří na místním počítači, i když je úloha spuštěná 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.

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters: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í
  • Basic
  • Credssp
  • Trávit
  • Kerberos
  • Negotiate
  • NegotiateWithImplicitCredential

Výchozí hodnota je Výchozí.

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

Upozornění

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ěřování u více než jednoho prostředku, jako je například 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 přihlašovací údaje předávané do ní použít k řízení síťové relace. Další informace najdete v tématu Poskytovatel podpory zabezpečení přihlašovacích údajů.

Type:AuthenticationMechanism
Accepted values:Basic, Default, Credssp, Digest, Kerberos, Negotiate, NegotiateWithImplicitCredential
Position:Named
Default value:Default
Accept pipeline input:False
Accept wildcard characters: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í v ověřování založeném na klientských certifikátech. Je možné je namapovat jenom na místní uživatelské účty a nefungují s doménovými účty.

Pokud chcete získat kryptografický otisk certifikátu, použijte jednotku Get-ItemGet-ChildItem PowerShell Cert nebo příkaz.

Type:String
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-ComputerName

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

Když použijete parametr ComputerName , PowerShell vytvoří dočasné připojení, které se používá pouze 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čů. Pokud chcete zadat místní počítač, zadejte název počítače, localhost nebo tečku (.).

Pokud chcete použít IP adresu v hodnotě ComputerName, musí příkaz obsahovat parametr Credential . Počítač musí být nakonfigurovaný pro přenos HTTPS nebo IP adresu vzdáleného počítače musí být součástí seznamu Důvěryhodných hostitelů WinRM místního počítače. Pokyny k přidání názvu počítače do seznamu TrustedHosts najdete 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 Název_počítače, musíte spustit PowerShell pomocí možnosti Spustit jako správce .

Type:String[]
Aliases:Cn
Position:0
Default value:Local computer
Accept pipeline input:False
Accept wildcard characters:False

-ConfigurationName

Určuje konfiguraci relace, která se používá pro novou konfiguraci 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: http://schemas.microsoft.com/PowerShell.

Při použití s protokolem SSH tento parametr určuje subsystém, který se má použít v cíli, jak je definováno v sshd_config. Výchozí hodnota pro SSH je powershell subsystém.

Konfigurace relace relace se nachází na 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 $PSSessionConfigurationName proměnné předvoleb v místním počítači. Pokud tato proměnná předvoleb není nastavená, výchozí je Microsoft.PowerShell. Další informace najdete v tématu about_Preference_Variables.

Type:String
Position:Named
Default value:$PSSessionConfigurationName if set on the local computer, otherwise Microsoft.PowerShell
Accept pipeline input:True
Accept wildcard characters:False

-ConnectingTimeout

Určuje dobu v milisekundách povolených pro dokončení počátečního připojení SSH. Pokud se připojení nedokončí v zadaném čase, vrátí se chyba.

Tento parametr byl zaveden v PowerShellu 7.2.

Type:Int32
Position:Named
Default value:unlimited
Accept pipeline input:False
Accept wildcard characters: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í:

http://localhost:5985/WSMAN

Pokud nezadáte identifikátor URI připojení, můžete pomocí parametrů UseSSL a Port zadat hodnoty identifikátoru URI připojení.

Platné hodnoty pro segment přenosu identifikátoru URI jsou HTTP a HTTPS. Pokud zadáte identifikátor URI připojení se segmentem přenosu, 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žíváte parametr AllowRedirection .

Type:Uri[]
Aliases:URI, CU
Position:0
Default value:http://localhost:5985/WSMAN
Accept pipeline input:False
Accept wildcard characters:False

-ContainerId

Určuje pole ID kontejneru.

Type:String[]
Position:Named
Default value:None
Accept pipeline input:True
Accept wildcard characters:False

-Credential

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

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

Přihlašovací údaje jsou uloženy v objektu PSCredential a heslo je uloženo jako SecureString.

Poznámka

Další informace o ochraně dat SecureString naleznete v tématu Jak zabezpečený je SecureString?.

Type:PSCredential
Position:Named
Default value:Current user
Accept pipeline input:True
Accept wildcard characters: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ává 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žijete EnableNetworkAccess , příkaz bude úspěšný, ale parametr se ignoruje.

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

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

Tento parametr byl zaveden v PowerShellu 3.0.

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters: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 zadejte cestu ke skriptu.Invoke-Command Skript musí existovat v místním počítači nebo v adresáři, ke kterému má místní počítač přístup. Pomocí argumentu 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.

Type:String
Aliases:PSPath
Position:1
Default value:None
Accept pipeline input:False
Accept wildcard characters: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 název počítače, který vygeneroval objekt, zobrazí v zobrazení.

Tento parametr ovlivňuje pouze zobrazení výstupu. Objekt se nezmění.

Type:SwitchParameter
Aliases:HCN
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False

-HostName

Určuje pole názvů počítačů pro připojení založené na SSH (Secure Shell). To se podobá parametru ComputerName s výjimkou toho, že připojení ke vzdálenému počítači se provádí pomocí SSH místo windows WinRM.

Tento parametr byl zaveden v PowerShellu 6.0.

Type:String[]
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-InDisconnectedSession

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

Když použijete parametr InDisconnectedSession , Invoke-Command vytvoří trvalou relaci na každém vzdáleném počítači, spustí příkaz určený 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. A vzhledem k tomu, že relace je odpojena před vrácením všech výsledků, InDisconnectedSession zajistí, aby se všechny výsledky příkazů vrátily do znovu připojené relace, a ne rozdělení mezi relacemi.

InDisconnectedSession nemůžete použít s parametrem Relace nebo parametrem AsJob.

Příkazy používající InDisconnectedSession vracejí objekt PSSession , který představuje odpojenou relaci. Nevrátí výstup příkazu. Pokud se chcete připojit k odpojené relaci, použijte rutiny Connect-PSSession nebo Receive-PSSession rutiny. 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 Hodnotu Drop. Pokud se chcete připojit k odpojené relaci, nastavte časový limit nečinnosti v relaci tak, aby vám před odstraněním relace poskytoval dostatečný čas pro připojení.

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

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

Tento parametr byl zaveden v PowerShellu 3.0.

Type:SwitchParameter
Aliases:Disconnected
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

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

Při použití parametru InputObject použijte automatickou $Input proměnnou v hodnotě Parametr ScriptBlock k reprezentaci vstupních objektů.

Type:PSObject
Position:Named
Default value:None
Accept pipeline input:True
Accept wildcard characters:False

-JobName

Určuje popisný název úlohy na pozadí. Ve výchozím nastavení jsou úlohy pojmenované 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.

Type:String
Position:Named
Default value:Job<n>
Accept pipeline input:False
Accept wildcard characters:False

-KeyFilePath

Určuje cestu k souboru klíče, kterou používá Secure Shell (SSH) k ověření uživatele na vzdáleném počítači.

SSH umožňuje provádět ověřování uživatelů prostřednictvím privátních a veřejných klíčů jako alternativu k základnímu ověřování heslem. Pokud je vzdálený počítač nakonfigurovaný pro ověřování klíčů, můžete tento parametr použít k zadání klíče, který identifikuje uživatele.

Tento parametr byl zaveden v PowerShellu 6.0.

Type:String
Aliases:IdentityFilePath
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-NoNewScope

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

Tento parametr je platný pouze v příkazech, které se spouští v aktuální relaci, tj. příkazy, které vynechávají parametry Název počítače i Relace .

Tento parametr byl zaveden v PowerShellu 3.0.

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters: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 (port WinRM pro HTTP) a 5986 (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, zadejte následující dva příkazy na příkazovém řádku PowerShellu:

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

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

Pokud ho nepotřebujete, nepoužívejte parametr Port . 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.

Type:Int32
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-RemoteDebug

Používá se ke spuštění vyvolaného příkazu v režimu ladění ve vzdálené relaci PowerShellu.

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False

-RunAsAdministrator

Označuje, že tato rutina vyvolá příkaz jako správce.

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False

-ScriptBlock

Určuje příkazy, které se mají spustit. Uzavřete příkazy do závorek ({ }) a vytvořte blok skriptu. Invoke-Command Při vzdáleném spuštění příkazu se vyhodnocují všechny proměnné v příkazu na vzdáleném počítači.

Poznámka

Parametry pro skriptblock lze předat pouze z ArgumentList podle pozice. Parametry přepínače nelze předat podle pozice. Pokud potřebujete parametr, který se chová jako typ SwitchParameter , použijte místo toho logický typ.

Type:ScriptBlock
Aliases:Command
Position:0
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-Session

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

Když vytvoříte 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 najdete v tématu about_PSSessions.

Type:PSSession[]
Position:0
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-SessionName

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

Tento parametr byl zaveden v PowerShellu 3.0.

Type:String[]
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-SessionOption

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

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

Hodnoty možností relace mají přednost před výchozími hodnotami pro relace nastavené v $PSSessionOption proměnné předvoleb 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 $PSSessionOption proměnné předvoleb najdete v tématu about_Preference_Variables. Další informace o konfiguracích relace najdete v tématu about_Session_Configurations.

Type:PSSessionOption
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-SSHConnection

Tento parametr přebírá pole hodnot hash tabulek, kde každá tabulka hash obsahuje jeden nebo více parametrů připojení potřebných k navázání připojení SSH (Secure Shell). Parametr SSHConnection je užitečný pro vytváření více relací, kde každá relace vyžaduje jiné informace o připojení.

Hashtable má následující členy:

  • Název počítače (nebo název hostitele)
  • Port
  • Uživatelské jméno
  • KeyFilePath (nebo IdentityFilePath)

Název počítače (nebo Název hostitele) je jediný pár klíč-hodnota, který je povinný.

Tento parametr byl zaveden v PowerShellu 6.0.

Type:Hashtable[]
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-SSHTransport

Označuje, že vzdálené připojení se naváže pomocí protokolu Secure Shell (SSH).

Ve výchozím nastavení PowerShell používá Windows WinRM pro připojení ke vzdálenému počítači. Tento přepínač vynutí, aby PowerShell použil parametr HostName k navazování vzdáleného připojení založeného na SSH.

Tento parametr byl zaveden v PowerShellu 6.0.

Type:SwitchParameter
Accepted values:true
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False

-Subsystem

Určuje subsystém SSH používaný pro novou konfiguraci PSSession.

Určuje subsystém, který se má použít v cíli, jak je definováno v sshd_config. Subsystém spustí konkrétní verzi PowerShellu s předdefinovanými parametry. Pokud zadaný subsystém ve vzdáleném počítači neexistuje, příkaz selže.

Pokud se tento parametr nepoužívá, výchozí je subsystém PowerShell.

Type:String
Position:Named
Default value:powershell
Accept pipeline input:True
Accept wildcard characters: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.

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

Type:Int32
Position:Named
Default value:32
Accept pipeline input:False
Accept wildcard characters:False

-UserName

Určuje uživatelské jméno účtu použitého ke spuštění příkazu na vzdáleném počítači. Metoda ověřování uživatele závisí na konfiguraci SSH (Secure Shell) na vzdáleném počítači.

Pokud je SSH nakonfigurovaný pro základní ověřování hesel, zobrazí se výzva k zadání hesla uživatele.

Pokud je pro ověřování uživatele na základě klíče nakonfigurovaný protokol SSH, je možné zadat cestu k souboru klíče prostřednictvím parametru KeyFilePath a nedojde k žádné výzvě k zadání hesla. Pokud se soubor uživatelského klíče klienta nachází ve známém umístění SSH, není parametr KeyFilePath nutný pro ověřování na základě klíče a ověření uživatele probíhá automaticky na základě uživatelského jména. Další informace najdete v dokumentaci SSH vaší platformy k ověřování uživatelů na základě klíčů.

Nejedná se o povinný parametr. Pokud parametr UserName není zadaný, použije se pro připojení aktuální přihlášené uživatelské jméno.

Tento parametr byl zaveden v PowerShellu 6.0.

Type:String
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters: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 další ochrana, která odesílá data přes protokol HTTPS místo HTTP.

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

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False

-VMId

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

Type:Guid[]
Aliases:VMGuid
Position:0
Default value:None
Accept pipeline input:True
Accept wildcard characters:False

-VMName

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

Type:String[]
Position:Named
Default value:None
Accept pipeline input:True
Accept wildcard characters:False

Vstupy

ScriptBlock

Příkaz v bloku skriptu můžete převést na Invoke-Command. $Input Pomocí automatické proměnné můžete znázorňovat vstupní objekty 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 parametru ScriptBlock .

Poznámky

V systému Windows Vista a novějších verzích operačního systému Windows použijte parametr Invoke-CommandComputerName ke spuštění příkazu na místním počítači, je nutné 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í, ve které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ž může být jiné.

Chyby, které jsou výsledkem příkazu, které Invoke-Command jsou součástí výsledků příkazu. Chyby, které by ukončovaly chyby v místním příkazu, se považují za neukončující chyby ve vzdáleném příkazu. Tato strategie zajišťuje, aby ukončování chyb na jednom počítači nezavíralo příkaz na všech počítačích, na kterých se spouští. 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á místnímu počítači důvěřuje, 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 v poskytovateli následující příkaz 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\>

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

Hodnota Dostupnostžádné značí, že se můžete připojit k relaci. Hodnota Zaneprázdněn označuje, že se nemůžete připojit k psSession , protože je připojen k jiné relaci. Další informace o hodnotách vlastnosti State relací naleznete v tématu RunspaceState. Další informace o hodnotách vlastnosti Dostupnost relací naleznete v tématu RunspaceAvailability.

Parametry HostName a SSHConnection byly zahrnuty od PowerShellu 6.0. Přidali jsme je, aby poskytovaly vzdálené komunikace PowerShellu na základě protokolu Secure Shell (SSH). PowerShell a SSH jsou podporované na různých platformách (Windows, Linux, macOS) a vzdálené komunikace PowerShellu na těchto platformách, kde jsou nainstalované a nakonfigurované PowerShell a SSH. Tato komunikace je oddělená od předchozího vzdálené komunikace systému Windows, která je založená na prostředí WinRM, a mnoho konkrétních funkcí a omezení WinRM se nevztahuje. Například kvóty založené na WinRM, možnosti relace, vlastní konfigurace koncového bodu a funkce odpojení/opětovného připojení se v současné době nepodporují. Další informace o nastavení vzdálené komunikace přes SSH PowerShellu najdete v tématu Vzdálené komunikace PowerShellu přes SSH.