Invoke-Command
Spouští příkazy na místních a vzdálených počítačích.
Syntaxe
Invoke-Command
[-StrictMode <Version>]
[-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>]
[-Subsystem <String>]
[-ConnectingTimeout <Int32>]
[-SSHTransport]
[-Options <Hashtable>]
[-RemoteDebug]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<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>]
[-Subsystem <String>]
[-ConnectingTimeout <Int32>]
[-SSHTransport]
[-Options <Hashtable>]
[-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 na vzdáleném počítači spustit jeden příkaz, použijte parametr ComputerName . Pokud chcete spustit řadu souvisejících příkazů, které sdílejí data, použijte rutinu k vytvoření psSession (trvalé připojení) na vzdáleném počítači a pak pomocí parametru Invoke-Command
Relace spusťte příkaz v PSSession.New-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říkaz. PowerShell spustí blok skriptu okamžitě v podřízené oblasti aktuálního oboru.
Před spuštěním Invoke-Command
příkazů na vzdáleném počítači si přečtěte about_Remote.
Počínaje PowerShellem 6.0 můžete použít Secure Shell (SSH) k navázání připojení a vyvolání příkazů na vzdálených počítačích. Na místním počítači musí být nainstalovaný SSH 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 to, ž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 SSH PowerShellu najdete v tématu Vzdálené komunikace PowerShellu přes SSH.
Některé vzorové kódy používají k zmenšení délky řádku 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 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 se používá ke spuštění příkazu v kontextu zabezpečení Domain01\User01, 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ý 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 Server02 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-Command
spustí Get-Culture
příkaz na serveru Server02. Parametr Relace určuje relaci uloženou $s
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 Parametry relace 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-Command
ComputerName 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 $p
do proměnné. Druhý příkaz získá hodnotu Vlastnosti VirtualMemorySize procesu PowerShellu.
Při použití parametru ComputerName vytvoří PowerShell 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 na počítači Server02 a uloží relaci do $s
proměnné. Následující Invoke-Command
řádky 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
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 uložený jako blok skriptu v proměnné. Pokud 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 -FilterScript { $_.Message -like '*certificate*' }
}
Invoke-Command -ComputerName S1, S2 -ScriptBlock $command
Proměnná $command
ukládá Get-WinEvent
příkaz, který je 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 alternativní konfiguraci relace. Parametr ScriptBlock se spustí Get-WinEvent
, aby z každého počítače získal 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 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í Get-Host
příkaz na vzdálených počítačích. K získání vlastnosti Version 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 $version
proměnné. 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
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 úlohu spuštěnou 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á do Format-List
rutiny, aby se zobrazily všechny vlastnosti objektu úlohy v seznamu. Poslední příkaz získá výsledky úloh. Předá objekt $j
úlohy do Receive-Job
rutiny 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 ve 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, nikoli ve vzdálené relaci.
Příklad 10: Skrytí názvu počítače
Tento příklad ukazuje účinek použití HideComputerName parametru Invoke-Command
.
HideComputerName nemění objekt, který tato rutina vrací. 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 -HideComputerName -ScriptBlock {
Get-Process PowerShell
}
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 zahrnuje PsComputerName vlastnost, 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é 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é a $param1
$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
Automatická $args
proměnná a parametr ArgumentList slouží k předávání hodnot pole do pozic parametrů v bloku skriptu. Tento příklad zobrazuje obsah .txt
adresáře serveru souborů. Parametr Get-ChildItem
Path 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-Command
používá parametr ScriptBlock a Get-ChildItem
určuje $args[0]
hodnoty pole.$args[1]
ArgumentList předá $args
hodnoty Get-ChildItem
pole do pozic 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-Command
Sample.ps1
ke spuštění skriptu na všech počítačích uvedených v Servers.txt
souboru. 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.
$parameters = @{
ComputerName = (Get-Content Servers.txt)
FilePath = 'C:\Scripts\Sample.ps1'
ArgumentList = 'Process', 'Service'
}
Invoke-Command @parameters
Když příkaz odešlete, obsah Sample.ps1
souboru se zkopíruje do bloku skriptu a blok skriptu se spustí na každém ze vzdálených počítačů. 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-Command
spustí Set-Mailbox
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
$parameters = @{
ComputerName = 'server01'
UseSSL = $true
ScriptBlock = { Get-HotFix }
SessionOption = $so
Credential = 'server01\user01'
}
Invoke-Command @parameters
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í bezpečné.
Rutina Invoke-Command
spustí Get-HotFix
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á MaximumRedirection parametr nastavit MaximumConnectionRedirectionCount vlastnost PSSessionOption objektu na 1.
Rutina Invoke-Command
spustí Get-Mailbox
příkaz 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 $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í, 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í v vzdálené komunikace Prostředí PowerShell.
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. Chcete-li spustit příkazy v tomto příkladu, musíte být členem skupiny Administrators v 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 = @{
ComputerName = 'Server02'
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 na vzdálený počítač Server02. Parametr role určuje klienta pro konfiguraci nastavení klienta CredSSP v místním počítači.
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-Command
spustí Get-Item
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: 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 = [timespan]::FromHours(12)
}
}
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 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 Drop
hodnotu A hodnota IdleTimeout je nastavena na 12 hodin.
Pokud chcete získat výsledky příkazů a skriptů, které se spouští v odpojených relacích, použijte tuto 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í protokolu Secure Shell (SSH). Pokud je na vzdáleném počítači nakonfigurovaný protokol SSH tak, aby zobrazoval výzvu k zadání hesel, zobrazí se výzva k zadání hesla. V opačném případě budete muset použít ověřování uživatele založené na klíči 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ěřování uživatelů. Nebudete vyzváni k zadání hesla, pokud se ověření klíče nezdaří a vzdálený počítač je nakonfigurovaný tak, aby umožňoval základní ověřování heslem.
$parameters = @{
HostName = 'UserA@LinuxServer01'
ScriptBlock = { Get-MailBox * }
KeyFilePath = '/UserA/UserAKey_rsa'
}
Invoke-Command
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 tabulek hash, 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\GetInfo.ps1 -SSHConnection $sshConnections
Příklad 22: Připojení ke vzdálené relaci SSH pomocí možností SSH
Tento příklad ukazuje, jak spustit soubor skriptu na vzdáleném počítači s Linuxem pomocí možností SSH. Parametr Options přebírá hashtable hodnot, které jsou předány jako možnosti podkladovému ssh
příkazu navázáno připojení ke vzdálenému systému.
$options = @{
Port=22
User = 'UserB'
Host = 'LinuxServer5'
}
$results = Invoke-Command -FilePath c:\Scripts\CollectEvents.ps1 -KeyFilePath '/Users/UserB/id_rsa' -Options $options
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í 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 parametru relace MaximumConnectionRedirectionCount . Použijte parametr New-PSSessionOption
MaximumRedirection rutiny nebo nastavte Vlastnost $PSSessionOption
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 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 se měla shodovat s hodnotou vlastnosti URLPrefix 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 parametrů pro skriptblock. Parametry v bloku skriptu jsou předány umístěním z hodnoty pole zadané argumentList. To se označuje jako dělení polí. Další informace o chování ArgumentList naleznete v tématu about_Splatting.
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 , příkaz vrátí objekt, který představuje úlohu, a poté 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. K získání výsledků ú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. S úlohou AsJob se však úloha vytvoří na 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í
- Basic
- 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.
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ěř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ředkovatel podpory zabezpečení přihlašovacích údajů.
Typ: | AuthenticationMechanism |
Přípustné hodnoty: | Basic, Default, Credssp, Digest, Kerberos, Negotiate, NegotiateWithImplicitCredential |
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
v jednotce PowerShell Cert: příkaz nebo Get-ChildItem
příkaz.
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í. Ve výchozím nastavení je to místní počítač.
Když použijete parametr ComputerName , PowerShell vytvoří dočasné připojení, které se použije 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čů. Chcete-li 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 musí být IP adresa vzdáleného počítače zahrnuta do 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 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, pokud chcete 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 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řed tomuto identifikátoru 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í 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 $PSSessionConfigurationName
proměnné předvoleb v místním počítači. Pokud tato proměnná předvoleb není nastavená, výchozí hodnota je Microsoft.PowerShell. Další informace najdete 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 |
-ConnectingTimeout
Určuje dobu v milisekundách povolenou k dokončení počátečního připojení SSH. Pokud se připojení v zadaném čase nedokončí, vrátí se chyba.
Tento parametr byl představen v PowerShellu 7.2.
Typ: | Int32 |
Position: | Named |
Default value: | Unlimited |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
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í:
http://localhost:5985/WSMAN
Pokud nezadáte identifikátor URI připojení, můžete k určení hodnot identifikátoru URI připojení použít parametry UseSSL a Port .
Platné hodnoty pro segment přenosu 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 AllowRedirection .
Typ: | Uri[] |
Aliasy: | URI, CU |
Position: | 0 |
Default value: | http://localhost:5985/WSMAN |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-ContainerId
Určuje pole ID kontejneru.
Typ: | String[] |
Position: | Named |
Default value: | None |
Vyžadováno: | True |
Přijmout vstup kanálu: | True |
Přijmout zástupné znaky: | 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ý rutinouGet-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?.
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 relace 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.
Relace zpětné smyčky se ve výchozím nastavení 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 ve vzdáleném počítači použijete 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 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, lze odpojené relace zpětné smyčky, které mají interaktivní tokeny vytvořené pomocí EnableNetworkAccess, 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 na webu 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 nasouvejte 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.
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: | False |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-HostName
Určuje pole názvů počítačů pro připojení založené na SSH (Secure Shell). Podobá se parametru ComputerName s tím rozdílem, že připojení ke vzdálenému počítači se provádí pomocí SSH místo Windows WinRM.
Tento parametr byl představen v PowerShellu 6.0.
Typ: | String[] |
Position: | Named |
Default value: | None |
Vyžadováno: | True |
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 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ýsledků, inDisconnectedSession zajistí, aby se všechny výsledky příkazů vrátily do znovu propojené relace, a ne rozdělení mezi relacemi.
InDisconnectedSession nemůžete použít 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
Receive-PSSession
. Pokud chcete získat výsledky příkazů spuštěných v relaci, použijte tuto rutinu Receive-PSSession
. Chcete-li 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, abyste měli dostatek času na připojení před odstraněním relace.
Režim ukládání výstupu do vyrovnávací paměti a časový limit nečinnosti můžete nastavit v parametru $PSSessionOption
SessionOption 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 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í InputObject parametru použijte $Input
automatickou proměnnou v hodnotě ScriptBlock parametru 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í 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.
Typ: | String |
Position: | Named |
Default value: | Job<n> |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | 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í hesla. Pokud je vzdálený počítač nakonfigurovaný pro ověřování pomocí klíče, můžete tento parametr použít k zadání klíče, který identifikuje uživatele.
Tento parametr byl představen v PowerShellu 6.0.
Typ: | String |
Aliasy: | IdentityFilePath |
Position: | Named |
Default value: | None |
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 i Session .
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 |
-Options
Určuje hashovací tabulku možností SSH používaných při připojování ke vzdálené relaci založené na SSH. Možné možnosti jsou všechny hodnoty podporované v unixové verzi příkazu ssh .
Všechny hodnoty, které parametry explicitně předávají, mají přednost před hodnotami předanými v tabulce Hashtable Možnosti . Například použití parametru Port přepíše všechny Port
páry klíč-hodnota předané v hashtable Možnosti .
Tento parametr byl přidán v PowerShellu 7.3.
Typ: | Hashtable |
Position: | Named |
Default value: | None |
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 (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, 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 |
-RemoteDebug
Slouží ke spuštění vyvolaného příkazu v režimu ladění ve vzdálené relaci PowerShellu.
Typ: | SwitchParameter |
Position: | Named |
Default value: | False |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-RunAsAdministrator
Označuje, že tato rutina vyvolá příkaz jako správce.
Typ: | SwitchParameter |
Position: | Named |
Default value: | False |
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 ({ }
) a vytvořte blok skriptu. Při vzdáleném Invoke-Command
spuštění příkazu se na vzdáleném počítači vyhodnocují všechny proměnné v příkazu.
Poznámka:
Parametry pro skriptblock lze předat pouze z ArgumentList podle pozice. Parametry přepínače nelze předat umístěním. Pokud potřebujete parametr, který se chová jako typ SwitchParameter , použijte místo toho logický typ.
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 objekty PSSession nebo příkaz, který vytvoří nebo získá objekty PSSession, například New-PSSession
příkaz nebo Get-PSSession
příkaz.
Při vytváření psSession vytvoří PowerShell trvalé připojení ke vzdálenému počítači. Pomocí příkazu 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.
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 odkazu 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 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í rutinyNew-PSSessionOption
, nebo tabulku hash, ve které jsou klíče názvy možností relace a hodnoty jsou hodnoty možností relace.
Poznámka:
Pokud zadáte hashtable pro SessionOption, PowerShell převede hashtable na System.Management.Automation.Remoting.PSSessionOption objekt. Hodnoty pro klíče zadané v hashtable jsou přetypovány na odpovídající vlastnost objektu. Chová se jinak než volání New-PSSessionOption
. Například hodnoty System.TimeSpan pro vlastnosti časového limitu, jako je IdleTimeout, převádějí celočíselnou hodnotu na ticks místo milisekund.
Další informace o PSSessionOption objektu a jeho vlastnostech naleznete v tématu PSSessionOption
Výchozí hodnoty pro možnosti jsou určeny hodnotou $PSSessionOption
proměnné předvoleb, pokud je nastavena. 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 $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, naleznete 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.
Typ: | PSSessionOption |
Position: | Named |
Default value: | None |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | 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ý při 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
- UserName
- KeyFilePath (nebo IdentityFilePath)
Název_počítače (nebo Název hostitele) je jediný pár klíč-hodnota, který je povinný.
Tento parametr byl představen v PowerShellu 6.0.
Typ: | Hashtable[] |
Position: | Named |
Default value: | None |
Vyžadováno: | True |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-SSHTransport
Označuje, že vzdálené připojení je vytvořeno pomocí Secure Shellu (SSH).
PowerShell ve výchozím nastavení 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 vytvoření vzdáleného připojení založeného na SSH.
Tento parametr byl představen v PowerShellu 6.0.
Typ: | SwitchParameter |
Přípustné hodnoty: | true |
Position: | Named |
Default value: | False |
Vyžadováno: | False |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | 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á, je výchozím subsystémem powershell
.
Typ: | String |
Position: | Named |
Default value: | powershell |
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 |
-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 protokolu Secure Shell (SSH) na vzdáleném počítači.
Pokud je pro základní ověřování hesla nakonfigurovaný protokol SSH, zobrazí se výzva k zadání hesla uživatele.
Pokud je protokol SSH nakonfigurovaný pro ověřování uživatele na základě klíčů, je možné zadat cestu k souboru klíče prostřednictvím parametru KeyFilePath a nedojde k 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íčů a ověřování uživatelů 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 není zadaný parametr UserName, použije se pro připojení aktuální přihlášené uživatelské jméno.
Tento parametr byl představen v PowerShellu 6.0.
Typ: | String |
Position: | Named |
Default value: | None |
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[] |
Aliasy: | VMGuid |
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
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
Pokud použijete parametr AsJob , vrátí tato rutina objekt úlohy.
Pokud použijete parametr InDisconnectedSession , vrátí tato rutina objekt PSSession .
Ve výchozím nastavení tato rutina vrátí výstup vyvolaného příkazu, což je hodnota parametru ScriptBlock .
Poznámky
PowerShell obsahuje následující aliasy pro Invoke-Command
:
- Všechny platformy:
icm
V systému Windows Vista a novějších verzích operačního systému Windows je nutné použít parametr ComputerName ke spuštění příkazu na místním počítači, musíte spustit PowerShell pomocí možnosti Spustit jako správceInvoke-Command
.
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.
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 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 v zprostředkovateli 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 je odpojen 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. Chcete-li zjistit, zda se můžete připojit nebo znovu připojit k relaci, použijte vlastnost Dostupnost .
Hodnota Dostupnost none označuje, ž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 Availability 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 se podporují 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 windows, která je založená na WinRM, a řada konkrétních funkcí a omezení WinRM se nevztahují. V současné době se nepodporují například kvóty založené na WinRM, možnosti relace, vlastní konfigurace koncového bodu a funkce odpojení/opětovného připojení. Další informace o nastavení vzdálené komunikace SSH PowerShellu najdete v tématu Vzdálené komunikace PowerShellu přes SSH.
ssh
Spustitelný soubor získá konfigurační data z následujících zdrojů v následujícím pořadí:
- Možnosti příkazového řádku
- konfigurační soubor uživatele (~/.ssh/config)
- konfigurační soubor pro celý systém (/etc/ssh/ssh_config)
Následující parametry rutiny se mapují na ssh
parametry a možnosti:
Parametr rutiny | Parametr ssh | ekvivalentní ssh -o option |
---|---|---|
-KeyFilePath |
-i <KeyFilePath> |
-o IdentityFile=<KeyFilePath> |
-UserName |
-l <UserName> |
-o User=<UserName> |
-Port |
-p <Port> |
-o Port=<Port> |
-ComputerName -Subsystem |
-s <ComputerName> <Subsystem> |
-o Host=<ComputerName> |
Všechny hodnoty, které parametry explicitně předávají, mají přednost před hodnotami předanými v tabulce Hashtable Možnosti . Další informace o ssh_config
souborech najdete v tématu ssh_config(5).