Invoke-Command
Parancsokat futtat helyi és távoli számítógépeken.
Syntax
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
A Invoke-Command
parancsmag parancsokat futtat helyi vagy távoli számítógépen, és visszaadja a parancsok összes kimenetét, beleértve a hibákat is. Egyetlen Invoke-Command
paranccsal több számítógépen is futtathat parancsokat.
Ha egyetlen parancsot szeretne futtatni egy távoli számítógépen, használja a ComputerName paramétert . Ha adatokat osztó kapcsolódó parancsok sorozatát szeretné futtatni, a New-PSSession
parancsmaggal hozzon létre egy PSSessiont (állandó kapcsolatot) a távoli számítógépen, majd a munkamenet paraméterrel Invoke-Command
futtassa a parancsot a PSSessionban. Ha leválasztott munkamenetben szeretne parancsot futtatni, használja az InDisconnectedSession paramétert. Ha parancsot szeretne futtatni egy háttérfeladatban, használja az AsJob paramétert.
Helyi számítógépen parancsként szkriptblokkot is Invoke-Command
futtathat. A PowerShell azonnal futtatja a szkriptblokkot az aktuális hatókör gyermek hatókörében.
Invoke-Command
Mielőtt parancsokat futtatna távoli számítógépen, olvassa el a about_Remote.
A PowerShell 6.0-tól kezdve a Secure Shell (SSH) használatával kapcsolatot létesíthet és parancsokat hívhat meg távoli számítógépeken. Az SSH-t telepíteni kell a helyi számítógépre, a távoli számítógépet pedig PowerShell SSH-végponttal kell konfigurálni. Az SSH-alapú Távoli PowerShell-munkamenet előnye, hogy több platformon (Windows, Linux, macOS) működik. SSH-alapú munkamenet esetén a HostName vagy az SSHConnection paraméterekkel adja meg a távoli számítógépet és a kapcsolódó kapcsolati adatokat. A PowerShell SSH-remoting beállításával kapcsolatos további információkért lásd : PowerShell Remoting Over SSH.
Egyes kódminták splatting használatával csökkentik a vonal hosszát. További információ: about_Splatting.
Példák
1. példa: Szkript futtatása kiszolgálón
Ez a példa a szkriptet Test.ps1
a Server01 számítógépen futtatja.
Invoke-Command -FilePath c:\scripts\test.ps1 -ComputerName Server01
A FilePath paraméter a helyi számítógépen található szkriptet adja meg. A szkript a távoli számítógépen fut, és az eredmények visszakerülnek a helyi számítógépre.
2. példa: Parancs futtatása távoli kiszolgálón
Ez a példa egy Get-Culture
parancsot futtat a Server01 távoli számítógépen.
Invoke-Command -ComputerName Server01 -Credential Domain01\User01 -ScriptBlock {
Get-Culture
}
A ComputerName paraméter a távoli számítógép nevét adja meg. A Hitelesítő paraméter a parancs futtatására szolgál a Domain01\User01 biztonsági környezetben, amely egy olyan felhasználó, aki rendelkezik engedéllyel a parancsok futtatására. A ScriptBlock paraméter megadja a távoli számítógépen futtatandó parancsot.
Válaszul a PowerShell kéri a jelszót és egy hitelesítési módszert a User01-fiókhoz. Ezután futtatja a parancsot a Server01 számítógépen, és visszaadja az eredményt.
3. példa: Parancs futtatása állandó kapcsolatban
Ez a példa ugyanazt Get-Culture
a parancsot futtatja egy munkamenetben, állandó kapcsolat használatával a Server02 nevű távoli számítógépen.
$s = New-PSSession -ComputerName Server02 -Credential Domain01\User01
Invoke-Command -Session $s -ScriptBlock { Get-Culture }
A New-PSSession
parancsmag létrehoz egy munkamenetet a Server02 távoli számítógépen, és menti a $s
változóba. Általában csak akkor hoz létre munkamenetet, ha parancsok sorozatát futtatja a távoli számítógépen.
A Invoke-Command
parancsmag futtatja a parancsot a Get-Culture
Server02 kiszolgálón. A Munkamenet paraméter a változóban mentett munkamenetet $s
adja meg.
Válaszul a PowerShell futtatja a parancsot a munkamenetben a Server02 számítógépen.
4. példa: Munkamenet használata adatok megosztására szolgáló parancsok sorozatának futtatásához
Ez a példa összehasonlítja a ComputerName és a Session paraméterek használatával járó hatásokatInvoke-Command
. Bemutatja, hogyan futtathat munkameneteket olyan parancsok sorozatához, amelyek ugyanazokat az adatokat használják.
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
Az első két parancs a ComputerName paraméterrel Invoke-Command
futtat parancsokat a Server02 távoli számítógépen. Az első parancs a Get-Process
parancsmaggal lekéri a PowerShell-folyamatot a távoli számítógépen, és menti a $p
változóba. A második parancs lekéri a PowerShell-folyamat VirtualMemorySize tulajdonságának értékét.
A ComputerName paraméter használatakor a PowerShell létrehoz egy új munkamenetet a parancs futtatásához.
A munkamenet a parancs befejeződésekor lezárul. A $p
változó egy kapcsolatban lett létrehozva, de nem létezik a második parancshoz létrehozott kapcsolatban.
A probléma megoldásához hozzon létre egy állandó munkamenetet a távoli számítógépen, majd futtassa mindkét parancsot ugyanabban a munkamenetben.
A New-PSSession
parancsmag létrehoz egy állandó munkamenetet a Server02 számítógépen, és menti a munkamenetet a $s
változóban. Azokat Invoke-Command
a sorokat, amelyek a Munkamenet paramétert követve futtatják a két parancsot ugyanabban a munkamenetben. Mivel mindkét parancs ugyanabban a munkamenetben fut, az $p
érték aktív marad.
5. példa: Parancs meghívása változóban tárolt szkriptblokkkal
Ez a példa bemutatja, hogyan futtathat egy parancsot, amely szkriptblokkként van tárolva egy változóban. Amikor a szkriptblokkot egy változóba menti, megadhatja a változót a ScriptBlock paraméter értékeként.
$command = {
Get-WinEvent -LogName PowerShellCore/Operational |
Where-Object -FilterScript { $_.Message -like '*certificate*' }
}
Invoke-Command -ComputerName S1, S2 -ScriptBlock $command
A $command
változó a Get-WinEvent
szkriptblokkként formázott parancsot tárolja. A Invoke-Command
parancs az S1 és S2 távoli számítógépeken tárolt $command
parancsot futtatja.
6. példa: Egyetlen parancs futtatása több számítógépen
Ez a példa bemutatja, hogyan futtathat Invoke-Command
egyetlen parancsot több számítógépen.
$parameters = @{
ComputerName = 'Server01', 'Server02', 'TST-0143', 'localhost'
ConfigurationName = 'MySession.PowerShell'
ScriptBlock = { Get-WinEvent -LogName PowerShellCore/Operational }
}
Invoke-Command @parameters
A ComputerName paraméter a számítógépnevek vesszővel tagolt listáját adja meg. A számítógépek listája tartalmazza a localhost értéket, amely a helyi számítógépet jelöli. A ConfigurationName paraméter egy másik munkamenet-konfigurációt határoz meg. A ScriptBlock paraméter fut Get-WinEvent
, hogy lekérje a PowerShellCore/Operational eseménynaplókat az egyes számítógépekről.
7. példa: A gazdagépprogram verziójának lekérése több számítógépen
Ez a példa a PowerShell-gazdagépprogram 200 távoli számítógépen futó verzióját kapja meg.
$version = Invoke-Command -ComputerName (Get-Content Machines.txt) -ScriptBlock {
(Get-Host).Version
}
Mivel csak egy parancs fut, nem kell állandó kapcsolatokat létrehoznia az egyes számítógépekhez. Ehelyett a parancs a ComputerName paraméterrel jelzi a számítógépeket. A számítógépek megadásához a Get-Content
parancsmag használatával lekéri a Machine.txt fájl tartalmát, egy számítógépnévfájlt.
A Invoke-Command
parancsmag egy Get-Host
parancsot futtat a távoli számítógépeken. Pont jelölést használ a PowerShell-gazdagép Verzió tulajdonságának lekéréséhez.
Ezek a parancsok egyenként futnak. Amikor a parancsok befejeződnek, a rendszer az összes számítógép parancsainak kimenetét menti a $version
változóba. A kimenet tartalmazza annak a számítógépnek a nevét, ahonnan az adatok származnak.
8. példa: Háttérfeladat futtatása több távoli számítógépen
Ez a példa egy parancsot futtat két távoli számítógépen. A Invoke-Command
parancs az AsJob paramétert használja, hogy a parancs háttérfeladatként fusson. A parancsok a távoli számítógépeken futnak, de a feladat a helyi számítógépen létezik. Az eredményeket a rendszer a helyi számítógépre továbbítja.
$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
A New-PSSession
parancsmag munkameneteket hoz létre a Server01 és a Server02 távoli számítógépeken. A Invoke-Command
parancsmag minden munkamenetben futtat egy háttérfeladatot. A parancs az AsJob paraméterrel futtatja a parancsot háttérfeladatként. Ez a parancs egy feladatobjektumot ad vissza, amely két gyermekfeladat-objektumot tartalmaz, egyet a két távoli számítógépen futtatott feladatok mindegyikéhez.
A Get-Job
parancs menti a feladatobjektumot a $j
változóba. A $j
változó ezután a parancsmagra lesz állítva, Format-List
hogy megjelenítse a feladatobjektum összes tulajdonságát egy listában. Az utolsó parancs lekéri a feladatok eredményeit. A feladatobjektumot a parancsmagba $j
Receive-Job
csövezi, és az eredményeket a $results
változóban tárolja.
9. példa: Helyi változók belefoglalása távoli számítógépen futtatott parancsba
Ez a példa bemutatja, hogyan lehet a helyi változók értékeit belefoglalni egy távoli számítógépen futtatott parancsba. A parancs a Using
hatókör-módosító használatával azonosít egy helyi változót egy távoli parancsban. Alapértelmezés szerint a rendszer feltételezi, hogy az összes változó a távoli munkamenetben lesz definiálva. A Using
hatókör-módosító a PowerShell 3.0-ban lett bevezetve. A hatókör-módosítóról további információt a Using
about_Remote_Variables és a about_Scopes című témakörben talál.
$Log = 'PowerShellCore/Operational'
Invoke-Command -ComputerName Server01 -ScriptBlock {
Get-WinEvent -LogName $Using:Log -MaxEvents 10
}
A $Log
változó a PowerShellCore/Operational eseménynapló nevét tárolja. A Invoke-Command
parancsmag a Server01-en fut Get-WinEvent
, hogy lekérje a tíz legújabb eseményt az eseménynaplóból. A LogName paraméter értéke az a $Log
változó, amelyet a Using
hatókör-módosító előtaggal előtaggal jelez, hogy a helyi munkamenetben jött létre, nem a távoli munkamenetben.
10. példa: A számítógépnév elrejtése
Ez a példa a HideComputerName paraméter Invoke-Command
használatát mutatja be.
A HideComputerName nem módosítja a parancsmag által visszaadott objektumot. Csak a kijelzőt módosítja. A Formátum parancsmagokkal továbbra is megjelenítheti az érintett objektumok PsComputerName tulajdonságát.
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
Az első két parancs a PowerShell-folyamat parancsainak Get-Process
futtatására használhatóInvoke-Command
. Az első parancs kimenete tartalmazza a PsComputerName tulajdonságot, amely annak a számítógépnek a nevét tartalmazza, amelyen a parancs futott. A HideComputerName parancsot használó második parancs kimenete nem tartalmazza a PsComputerName oszlopot.
11. példa: A Param kulcsszó használata szkriptblokkban
A Param
kulcsszó és az ArgumentList paraméter változóértékeket ad át egy szkriptblokk nevesített paramétereinek. Ez a példa a betűvel a
kezdődő és a .pdf
kiterjesztéssel rendelkező fájlneveket jeleníti meg.
A kulcsszóval kapcsolatos további információkért lásd: Param
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
A ScriptBlock paramétert használja, amely két változót határoz meg, $param1
és $param2
. Get-ChildItem
A névvel ellátott paramétereket, a Név és a Belefoglalás változóneveket használja. Az Argumentumlista átadja az értékeket a változóknak.
12. példa: Az $args automatikus változó használata szkriptblokkban
Az $args
automatikus változó és az ArgumentList paraméter tömbértékek paraméterpozícióinak átadására szolgál egy szkriptblokkban. Ez a példa egy kiszolgáló fájlkönyvtár-tartalmát .txt
jeleníti meg. Az Get-ChildItem
Elérési út paraméter a 0. pozíció, a Szűrő paraméter pedig az 1. pozíció.
A változóval kapcsolatos további információkért $args
lásd : 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
Egy ScriptBlock paramétert használ, és Get-ChildItem
megadja a $args[0]
tömb értékeit.$args[1]
Az Argumentumlista átadja a $args
tömbértékeket az Get-ChildItem
Elérési út és szűrő paraméterpozícióinak.
13. példa: Szkript futtatása a szövegfájlban felsorolt összes számítógépen
Ez a példa a Invoke-Command
parancsmaggal futtatja a Sample.ps1
szkriptet a fájlban Servers.txt
felsorolt összes számítógépen. A parancs a FilePath paraméter használatával adja meg a szkriptfájlt. Ez a parancs lehetővé teszi a szkript futtatását a távoli számítógépeken, még akkor is, ha a szkriptfájl nem érhető el a távoli számítógépek számára.
$parameters = @{
ComputerName = (Get-Content Servers.txt)
FilePath = 'C:\Scripts\Sample.ps1'
ArgumentList = 'Process', 'Service'
}
Invoke-Command @parameters
A parancs elküldésekor a fájl tartalma Sample.ps1
egy szkriptblokkba lesz másolva, és a szkriptblokk minden távoli számítógépen fut. Ez az eljárás egyenértékű a ScriptBlock paraméter használatával a szkript tartalmának elküldéséhez.
14. példa: Parancs futtatása távoli számítógépen URI használatával
Ez a példa bemutatja, hogyan futtathat parancsokat egy olyan távoli számítógépen, amelyet egy egységes erőforrás-azonosító (URI) azonosít. Ez a példa egy távoli Exchange-kiszolgálón futtat egy Set-Mailbox
parancsot.
$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
Az első sor a Get-Credential
parancsmaggal tárolja a Windows Live ID hitelesítő adatait a $LiveCred
változóban. A PowerShell felszólítja a felhasználót, hogy adja meg a Windows Live ID hitelesítő adatait.
A $parameters
változó egy kivonattábla, amely a parancsmagnak Invoke-Command
továbbítandó paramétereket tartalmazza. A Invoke-Command
parancsmag egy Set-Mailbox
parancsot futtat a Microsoft.Exchange munkamenet-konfigurációval. A ConnectionURI paraméter az Exchange-kiszolgáló végpontjának URL-címét adja meg. A hitelesítő adat paraméter a változóban $LiveCred
tárolt hitelesítő adatokat adja meg. Az AuthenticationMechanism paraméter az alapszintű hitelesítés használatát határozza meg. A ScriptBlock paraméter a parancsot tartalmazó szkriptblokkot adja meg.
15. példa: Munkamenet-beállítás használata
Ez a példa bemutatja, hogyan hozhat létre és használhat SessionOption paramétert.
$so = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck
$parameters = @{
ComputerName = 'server01'
UseSSL = $true
ScriptBlock = { Get-HotFix }
SessionOption = $so
Credential = 'server01\user01'
}
Invoke-Command @parameters
A New-PSSessionOption
parancsmag létrehoz egy munkamenet-beállításobjektumot, amely miatt a távoli végpont nem ellenőrzi a hitelesítésszolgáltatót, a canonical name és a visszavonási listákat a bejövő HTTPS-kapcsolat kiértékelése során. A SessionOption objektumot a rendszer a $so
változóba menti.
Feljegyzés
Ezeknek az ellenőrzéseknek a letiltása kényelmes a hibaelhárításhoz, de nyilvánvalóan nem biztonságos.
A Invoke-Command
parancsmag távolról futtat egy Get-HotFix
parancsot. A SessionOption paraméter adja meg a változót $so
.
16. példa: URI-átirányítás kezelése távoli parancsban
Ez a példa bemutatja, hogyan kezelheti az URI-átirányítást távoli parancsokban az AllowRedirection és a SessionOption paraméterekkel.
$max = New-PSSessionOption -MaximumRedirection 1
$parameters = @{
ConnectionUri = 'https://ps.exchangelabs.com/PowerShell'
ScriptBlock = { Get-Mailbox dan }
AllowRedirection = $true
SessionOption = $max
}
Invoke-Command @parameters
A New-PSSessionOption
parancsmag létrehoz egy PSSessionOption objektumot, amely a $max
változóba van mentve. A parancs a MaximumRedirection paramétert használja a PSSessionOption objektum MaximumConnectionRedirectionCount tulajdonságának 1 értékre állításához.
A Invoke-Command
parancsmag egy távoli Microsoft Exchange Serveren futtat egy Get-Mailbox
parancsot. Az AllowRedirection paraméter explicit engedélyt ad a kapcsolat másik végpontra való átirányítására. A SessionOption paraméter a változóban $max
tárolt munkamenet-objektumot használja.
Ennek eredményeképpen, ha a ConnectionURI által megadott távoli számítógép átirányítási üzenetet ad vissza, a PowerShell átirányítja a kapcsolatot, de ha az új cél egy másik átirányítási üzenetet ad vissza, a rendszer túllépi az 1-et, és Invoke-Command
nem végződő hibát ad vissza.
17. példa: Hálózati megosztás elérése távoli munkamenetben
Ez a példa bemutatja, hogyan férhet hozzá egy hálózati megosztáshoz egy távoli munkamenetből. A példa szemléltetésére három számítógép szolgál. A Server01 a helyi számítógép, a Server02 a távoli számítógép, a Net03 pedig a hálózati megosztást tartalmazza. A Server01 csatlakozik a Server02-hez, majd a Server02 egy második ugrást végez a Net03-hoz a hálózati megosztás eléréséhez. További információ arról, hogy a PowerShell-újramotálás hogyan támogatja a számítógépek közötti ugrásokat, olvassa el a Második ugrás készítése a PowerShell-újraküldésben című témakört.
A szükséges hitelesítőadat-biztonsági támogatási szolgáltató (CredSSP) delegálása engedélyezve van a helyi számítógép ügyfélbeállításaiban és a távoli számítógépen található szolgáltatásbeállításokban. A példában szereplő parancsok futtatásához a helyi számítógépen és a távoli számítógépen a Rendszergazdák csoport tagjának kell lennie.
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
A Enable-WSManCredSSP
parancsmag lehetővé teszi a CredSSP delegálását a Server01 helyi számítógépről a Server02 távoli számítógépre. A Szerepkör paraméter megadja, hogy az ügyfél konfigurálja a CredSSP ügyfélbeállítást a helyi számítógépen.
New-PSSession
PSSession objektumot hoz létre a Server02-hez, és az objektumot a $s
változóban tárolja.
A Invoke-Command
parancsmag a változót használja a $s
Server02 távoli számítógéphez való csatlakozáshoz. A ScriptBlock paraméter a távoli számítógépen fut Enable-WSManCredSSP
. A Szerepkör paraméter megadja, hogy a kiszolgáló konfigurálja a CredSSP-kiszolgáló beállításait a távoli számítógépen.
A $parameters
változó tartalmazza a hálózati megosztáshoz való csatlakozás paraméterértékeit. A Invoke-Command
parancsmag egy Get-Item
parancsot futtat a munkamenetben a következőben $s
: . Ez a parancs egy szkriptet kap a \\Net03\Scripts
hálózati megosztásból. A parancs a Hitelesítési paramétert CredSSP értékkel, a Hitelesítő paramétert pedig Domain01\Admin01 értékkel használja.
18. példa: Szkriptek indítása sok távoli számítógépen
Ez a példa több mint száz számítógépen futtat szkriptet. A helyi számítógépre gyakorolt hatás minimalizálása érdekében minden számítógéphez csatlakozik, elindítja a szkriptet, majd leválasztja az egyes számítógépeket. A szkript továbbra is fut a leválasztott munkamenetekben.
$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
A parancs a szkript futtatására használja Invoke-Command
. A ComputerName paraméter értéke egy Get-Content
olyan parancs, amely lekéri a távoli számítógépek nevét egy szövegfájlból. Az InDisconnectedSession paraméter leválasztja a munkameneteket, amint elindítja a parancsot. A FilePath paraméter értéke az egyes számítógépeken futó szkriptInvoke-Command
.
A SessionOption értéke egy kivonattábla. Az OutputBufferingMode érték értéke Drop
12 óra, az IdleTimeout érték pedig 12 óra.
A leválasztott munkamenetekben futó parancsok és szkriptek eredményeinek lekéréséhez használja a Receive-PSSession
parancsmagot.
19. példa: Parancs futtatása távoli számítógépen SSH használatával
Ez a példa bemutatja, hogyan futtathat parancsokat távoli számítógépen a Secure Shell (SSH) használatával. Ha az SSH úgy van konfigurálva a távoli számítógépen, hogy jelszavakat kérjen, akkor egy jelszókérést fog kapni. Ellenkező esetben SSH-kulcsalapú felhasználói hitelesítést kell használnia.
Invoke-Command -HostName UserA@LinuxServer01 -ScriptBlock { Get-MailBox * }
20. példa: Parancs futtatása távoli számítógépen SSH használatával és felhasználói hitelesítési kulcs megadása
Ez a példa bemutatja, hogyan futtathat egy parancsot egy távoli számítógépen SSH használatával, és hogyan adhat meg egy kulcsfájlt a felhasználói hitelesítéshez. A rendszer csak akkor kéri a jelszót, ha a kulcshitelesítés meghiúsul, és a távoli számítógép úgy van konfigurálva, hogy engedélyezze az alapszintű jelszóhitelesítést.
$parameters = @{
HostName = 'UserA@LinuxServer01'
ScriptBlock = { Get-MailBox * }
KeyFilePath = '/UserA/UserAKey_rsa'
}
Invoke-Command
21. példa: Szkriptfájl futtatása több távoli számítógépen SSH használatával feladatként
Ez a példa bemutatja, hogyan futtathat szkriptfájlt több távoli számítógépen az SSH és az SSHConnection paraméterkészlet használatával. Az SSHConnection paraméter az egyes számítógépek kapcsolati adatait tartalmazó kivonattáblák tömbjét használja. Ez a példa megköveteli, hogy a cél távoli számítógépek SSH-t konfigurálva támogassák a kulcsalapú felhasználói hitelesítést.
$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
22. példa: Csatlakozás távoli SSH-munkamenethez SSH-beállítások használatával
Ez a példa bemutatja, hogyan futtathat szkriptfájlt távoli Linux-alapú gépen SSH-beállítások használatával. A Beállítások paraméter azokat az értékeket kivonatolhatja, amelyeket a rendszer a távoli rendszerrel létesített kapcsolat létesített alapjául szolgáló ssh
parancsnak ad át beállításokként.
$options = @{
Port=22
User = 'UserB'
Host = 'LinuxServer5'
}
$results = Invoke-Command -FilePath c:\Scripts\CollectEvents.ps1 -KeyFilePath '/Users/UserB/id_rsa' -Options $options
Paraméterek
-AllowRedirection
Lehetővé teszi a kapcsolat átirányítását egy alternatív egységes erőforrás-azonosítóra (URI).
A ConnectionURI paraméter használatakor a távoli cél egy utasítást adhat vissza egy másik URI-ra való átirányításhoz. A PowerShell alapértelmezés szerint nem irányítja át a kapcsolatokat, de ezzel a paramétersel engedélyezheti a kapcsolat átirányítását.
A MaximumConnectionRedirectionCount munkamenet beállításértékének módosításával azt is korlátozhatja, hogy a rendszer hányszor irányítsa át a kapcsolatot. Használja a parancsmag MaximumRedirection paraméterét New-PSSessionOption
, vagy állítsa be a beállításváltozó MaximumConnectionRedirectionCount tulajdonságát $PSSessionOption
. Az alapértelmezett érték 5.
Típus: | SwitchParameter |
Position: | Named |
Alapértelmezett érték: | False |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-ApplicationName
Megadja a kapcsolati URI alkalmazásnév-szegmensét. Ezzel a paraméterrel megadhatja az alkalmazás nevét, ha nem használja a ConnectionURI paramétert a parancsban.
Az alapértelmezett érték a helyi számítógépen található $PSSessionApplicationName
beállítási változó értéke. Ha ez a beállítási változó nincs definiálva, az alapértelmezett érték a WSMAN. Ez az érték a legtöbb felhasználáshoz megfelelő. További információ: about_Preference_Variables.
A WinRM szolgáltatás az alkalmazás nevével választ ki egy figyelőt a kapcsolatkérés kiszolgálásához. A paraméter értékének meg kell egyeznie a távoli számítógépen lévő figyelő URLPrefix tulajdonságának értékével.
Típus: | String |
Position: | Named |
Alapértelmezett érték: | $PSSessionApplicationName if set on the local computer, otherwise WSMAN |
Kötelező: | False |
Folyamatbemenet elfogadása: | True |
Helyettesítő karakterek elfogadása: | False |
-ArgumentList
Megadja a szkriptblokk paramétereinek értékeit. A szkriptblokk paramétereit az Argumentumlista tömbértékének pozíciója adja át. Ezt tömbplatformnak nevezzük. Az Argumentumlista működésével kapcsolatos további információkért lásd: about_Splatting.
Típus: | Object[] |
Aliasok: | Args |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-AsJob
Azt jelzi, hogy ez a parancsmag háttérfeladatként futtatja a parancsot egy távoli számítógépen. Ezzel a paramétersel olyan parancsokat futtathat, amelyek végrehajtása sok időt vesz igénybe.
Az AsJob paraméter használatakor a parancs egy, a feladatot jelképező objektumot ad vissza, majd megjeleníti a parancssort. Folytathatja a munkát a munkamenetben, amíg a feladat befejeződik. A feladat kezeléséhez használja a *-Job
parancsmagokat. A feladat eredményeinek lekéréséhez használja a Receive-Job
parancsmagot.
Az AsJob paraméter hasonlít a Invoke-Command
parancsmag távoli futtatásához Start-Job
. Az AsJob használatával azonban a feladat a helyi számítógépen jön létre, annak ellenére, hogy a feladat távoli számítógépen fut. A távoli feladat eredményei automatikusan visszakerülnek a helyi számítógépre.
További információ a PowerShell háttérfeladatairól: about_Jobs és about_Remote_Jobs.
Típus: | SwitchParameter |
Position: | Named |
Alapértelmezett érték: | False |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-Authentication
Megadja a felhasználó hitelesítő adatainak hitelesítéséhez használt mechanizmust. A CredSSP-hitelesítés csak a Windows Vista, a Windows Server 2008 és a Windows operációs rendszer újabb verzióiban érhető el.
A paraméter elfogadható értékei a következők:
- Alapértelmezett
- Alap
- Credssp
- Emészt
- Kerberos
- Tárgyal
- NegotiateWithImplicitCredential
Az alapértelmezett érték az Alapértelmezett érték.
A paraméter értékeivel kapcsolatos további információkért lásd : AuthenticationMechanism Enumeration.
Figyelemfelhívás
A hitelesítő adatok biztonsági támogatási szolgáltatójának (CredSSP) hitelesítése, amelyben a felhasználó hitelesítő adatai átadva vannak egy hitelesítendő távoli számítógépnek, olyan parancsokhoz készült, amelyek több erőforráson is hitelesítést igényelnek, például távoli hálózati megosztáshoz való hozzáféréshez. Ez a mechanizmus növeli a távoli művelet biztonsági kockázatát. Ha a távoli számítógép biztonsága sérül, a neki átadott hitelesítő adatokkal szabályozható a hálózati munkamenet. További információ: Hitelesítő adatok biztonsági támogatási szolgáltatója.
Típus: | AuthenticationMechanism |
Elfogadott értékek: | Basic, Default, Credssp, Digest, Kerberos, Negotiate, NegotiateWithImplicitCredential |
Position: | Named |
Alapértelmezett érték: | Default |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-CertificateThumbprint
Megadja egy olyan felhasználói fiók digitális nyilvános kulcsú tanúsítványát (X509), amely jogosult csatlakozni a leválasztott munkamenethez. Adja meg a tanúsítvány ujjlenyomatát.
A tanúsítványok az ügyféltanúsítvány-alapú hitelesítésben használatosak. Ezek csak helyi felhasználói fiókokra képezhetők le, és nem működnek tartományi fiókokkal.
Tanúsítvány ujjlenyomatának lekéréséhez használjon egy vagy Get-ChildItem
több Get-Item
parancsot a PowerShell Cert: meghajtón.
Típus: | String |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-ComputerName
Meghatározza azokat a számítógépeket, amelyeken a parancs fut. Alapértelmezés szerint a helyi számítógép.
A ComputerName paraméter használatakor a PowerShell létrehoz egy ideiglenes kapcsolatot, amely csak a megadott parancs futtatására szolgál, majd bezárul. Ha állandó kapcsolatra van szüksége, használja a Munkamenet paramétert.
Írja be egy vagy több számítógép NETBIOS-nevét, IP-címét vagy teljes tartománynevét egy vesszővel tagolt listában. A helyi számítógép megadásához írja be a számítógép nevét, a localhost vagy a pont (.
).
Ha IP-címet szeretne használni a ComputerName értékben, a parancsnak tartalmaznia kell a hitelesítő adatot. A számítógépet https-átvitelre kell konfigurálni, vagy a távoli számítógép IP-címét fel kell venni a helyi számítógép WinRM TrustedHosts listájába. A Számítógép hozzáadása a megbízható gazdagépek listájához című témakörben olvashat arról, hogyan adhat hozzá számítógépnevet a Megbízható gazdagépek listájához.
A Windows Vista és a Windows operációs rendszer újabb verzióiban ahhoz, hogy a helyi számítógép szerepeljen a ComputerName értékben, a PowerShellt a Futtatás rendszergazdaként lehetőséggel kell futtatnia.
Típus: | String[] |
Aliasok: | Cn |
Position: | 0 |
Alapértelmezett érték: | Local computer |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-ConfigurationName
Megadja az új PSSession-hez használt munkamenet-konfigurációt.
Adja meg a konfiguráció nevét vagy a munkamenet-konfiguráció teljes erőforrás-URI-címét. Ha csak a konfiguráció nevét adja meg, a rendszer a következő séma URI-ját előpendálta: http://schemas.microsoft.com/PowerShell
.
Az SSH-val való használat esetén ez a paraméter határozza meg a célon használni kívánt alrendszert a megadott módon sshd_config
. Az SSH alapértelmezett értéke az powershell
alrendszer.
Egy munkamenet munkamenet-konfigurációja a távoli számítógépen található. Ha a megadott munkamenet-konfiguráció nem létezik a távoli számítógépen, a parancs meghiúsul.
Az alapértelmezett érték a helyi számítógépen található $PSSessionConfigurationName
beállítási változó értéke. Ha ez a beállítási változó nincs beállítva, az alapértelmezett a Microsoft.PowerShell. További információ: about_Preference_Variables.
Típus: | String |
Position: | Named |
Alapértelmezett érték: | $PSSessionConfigurationName if set on the local computer, otherwise Microsoft.PowerShell |
Kötelező: | False |
Folyamatbemenet elfogadása: | True |
Helyettesítő karakterek elfogadása: | False |
-ConnectingTimeout
Ezredmásodpercben adja meg, hogy a kezdeti SSH-kapcsolat befejeződjön. Ha a kapcsolat nem fejeződik be a megadott időn belül, hibaüzenet jelenik meg.
Ez a paraméter a PowerShell 7.2-ben lett bevezetve
Típus: | Int32 |
Position: | Named |
Alapértelmezett érték: | Unlimited |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-ConnectionUri
Egy egységes erőforrás-azonosítót (URI) ad meg, amely meghatározza a munkamenet kapcsolati végpontját. Az URI-nak teljes mértékben minősítettnek kell lennie.
A sztring formátuma a következő:
<Transport>://<ComputerName>:<Port>/<ApplicationName>
Az alapértelmezett érték a következő:
http://localhost:5985/WSMAN
Ha nem ad meg kapcsolati URI-t, a UseSSL és a Port paraméterekkel megadhatja a kapcsolat URI-értékeit.
Az URI átviteli szegmensének érvényes értékei a HTTP és a HTTPS. Ha egy átviteli szegmenshez tartozó kapcsolati URI-t ad meg, de nem ad meg portot, a munkamenet a szabványportokkal jön létre: HTTP-hez 80, HTTPS-hez pedig 443. A PowerShell-újraküldés alapértelmezett portjának használatához adja meg az 5985-ös portot a HTTP-hez, a HTTPS-hez pedig az 5986-os portot.
Ha a célszámítógép átirányítja a kapcsolatot egy másik URI-ra, a PowerShell megakadályozza az átirányítást, hacsak nem használja az AllowRedirection paramétert a parancsban.
Típus: | Uri[] |
Aliasok: | URI, CU |
Position: | 0 |
Alapértelmezett érték: | http://localhost:5985/WSMAN |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-ContainerId
Tárolóazonosítók tömbje.
Típus: | String[] |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | True |
Folyamatbemenet elfogadása: | True |
Helyettesítő karakterek elfogadása: | False |
-Credential
A művelet végrehajtásához engedéllyel rendelkező felhasználói fiókot ad meg. Alapértelmezés szerint az aktuális felhasználó.
Írjon be egy felhasználónevet (például User01 vagy Domain01\User01), vagy írjon be egy PSCredential objektumot, amelyet a Get-Credential
parancsmag hoz létre. Ha beír egy felhasználónevet, a rendszer kéri a jelszó megadását.
A hitelesítő adatokat PSCredential objektum tárolja, a jelszót pedig SecureStringként tárolja a rendszer.
Feljegyzés
További információ a SecureString adatvédelemről: Mennyire biztonságos a SecureString?.
Típus: | PSCredential |
Position: | Named |
Alapértelmezett érték: | Current user |
Kötelező: | False |
Folyamatbemenet elfogadása: | True |
Helyettesítő karakterek elfogadása: | False |
-EnableNetworkAccess
Azt jelzi, hogy ez a parancsmag egy interaktív biztonsági jogkivonatot ad hozzá a visszacsatolási munkamenetekhez. Az interaktív jogkivonat segítségével parancsokat futtathat a visszacsatolási munkamenetben, amelyek adatokat kapnak más számítógépekről. Futtathat például egy parancsot a munkamenetben, amely XML-fájlokat másol egy távoli számítógépről a helyi számítógépre.
A visszacsatolási munkamenet olyan PSSession , amely ugyanahhoz a számítógéphez kapcsolódik és végződik. Visszacsatolási munkamenet létrehozásához hagyja ki a ComputerName paramétert, vagy állítsa az értékét pont (.
), localhost vagy a helyi számítógép nevére.
Alapértelmezés szerint a visszacsatolási munkamenetek hálózati jogkivonat használatával jönnek létre, ami nem feltétlenül biztosít elegendő engedélyt a távoli számítógépek hitelesítéséhez.
Az EnableNetworkAccess paraméter csak visszacsatolási munkamenetekben érvényes. Ha az EnableNetworkAccess szolgáltatást használja, amikor munkamenetet hoz létre egy távoli számítógépen, a parancs sikeres lesz, de a paraméter figyelmen kívül lesz hagyva.
A visszacsatolási munkamenetben a távelérést a hitelesítési paraméter CredSSP értékével engedélyezheti, amely a munkamenet hitelesítő adatait más számítógépekre delegálja.
A számítógép rosszindulatú hozzáférés elleni védelme érdekében az interaktív jogkivonatokkal rendelkező leválasztott visszacsatolási munkamenetek, amelyek az EnableNetworkAccess használatával lettek létrehozva, csak attól a számítógéptől csatlakoztathatók újra, amelyen a munkamenet létre lett hozva. A CredSSP-hitelesítést használó leválasztott munkamenetek újra csatlakoztathatók más számítógépekről. További információ: Disconnect-PSSession
.
Ezt a paramétert a PowerShell 3.0-ban vezettük be.
Típus: | SwitchParameter |
Position: | Named |
Alapértelmezett érték: | False |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-FilePath
Egy helyi szkriptet ad meg, amelyet ez a parancsmag egy vagy több távoli számítógépen futtat. Adja meg a szkript elérési útját és fájlnevét, vagy írja be a szkript elérési útját.Invoke-Command
A szkriptnek a helyi számítógépen vagy egy olyan könyvtárban kell lennie, amelyhez a helyi számítógép hozzáférhet. Az Argumentumlista használatával adja meg a szkript paramétereinek értékeit.
Ha ezt a paramétert használja, a PowerShell szkriptblokkmá alakítja a megadott szkriptfájl tartalmát, továbbítja a szkriptblokkot a távoli számítógépre, és a távoli számítógépen futtatja.
Típus: | String |
Aliasok: | PSPath |
Position: | 1 |
Alapértelmezett érték: | None |
Kötelező: | True |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-HideComputerName
Azt jelzi, hogy ez a parancsmag kihagyja az egyes objektumok számítógépnevét a kimeneti kijelzőből. Alapértelmezés szerint az objektumot létrehozó számítógép neve jelenik meg a kijelzőn.
Ez a paraméter csak a kimeneti megjelenítésre van hatással. Ez nem módosítja az objektumot.
Típus: | SwitchParameter |
Aliasok: | HCN |
Position: | Named |
Alapértelmezett érték: | False |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-HostName
Egy SSH-alapú kapcsolat számítógépneveinek tömbjét adja meg. Ez hasonló a ComputerName paraméterhez, azzal a kivétellel, hogy a távoli számítógéphez való kapcsolat A Windows WinRM helyett SSH használatával jön létre.
Ezt a paramétert a PowerShell 6.0-ban vezettük be.
Típus: | String[] |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | True |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-InDisconnectedSession
Azt jelzi, hogy ez a parancsmag egy parancsot vagy szkriptet futtat egy leválasztott munkamenetben.
Az InDisconnectedSession paraméter Invoke-Command
használatakor minden távoli számítógépen létrehoz egy állandó munkamenetet, elindítja a ScriptBlock vagy a FilePath paraméter által megadott parancsot, majd leválasztja a munkamenetről. A parancsok továbbra is futnak a leválasztott munkamenetekben. Az InDisconnectedSession lehetővé teszi a parancsok futtatását a távoli munkamenetekhez való kapcsolat fenntartása nélkül. Mivel a munkamenet le van választva az eredmények visszaadása előtt, az InDisconnectedSession gondoskodik arról, hogy az összes parancseredmény visszakerüljön az újrakapcsolódott munkamenetbe a munkamenetek közötti megosztás helyett.
Az InDisconnectedSession nem használható a Munkamenet paraméterrel vagy az AsJob paraméterrel.
Az InDisconnectedSessiont használó parancsok egy PSSession objektumot adnak vissza, amely a leválasztott munkamenetet jelöli. Nem adnak vissza parancskimenetet. A leválasztott munkamenethez való csatlakozáshoz használja a Connect-PSSession
parancsmagokat.Receive-PSSession
A munkamenetben futtatott parancsok eredményeinek lekéréséhez használja a Receive-PSSession
parancsmagot. Ha leválasztott munkamenetben kimenetet generáló parancsokat szeretne futtatni, állítsa az OutputBufferingMode munkamenet beállítás értékét Drop értékre. Ha csatlakozni szeretne a leválasztott munkamenethez, állítsa be az inaktív időtúllépést a munkamenetben, hogy elegendő időt biztosítson a csatlakozásra a munkamenet törlése előtt.
A kimeneti pufferelési módot és az inaktív időtúllépést a SessionOption paraméterben vagy a $PSSessionOption
beállításváltozóban állíthatja be. További információ a munkamenet-beállításokról: lásd New-PSSessionOption
és about_Preference_Variables.
A Leválasztott munkamenetek funkcióval kapcsolatos további információkért lásd : about_Remote_Disconnected_Sessions.
Ezt a paramétert a PowerShell 3.0-ban vezettük be.
Típus: | SwitchParameter |
Aliasok: | Disconnected |
Position: | Named |
Alapértelmezett érték: | False |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-InputObject
Megadja a parancs bemenetét. Adjon meg egy változót, amely tartalmazza az objektumokat, vagy írjon be egy parancsot vagy kifejezést, amely lekéri az objektumokat.
Az InputObject paraméter használatakor használja az $Input
automatikus változót a ScriptBlock paraméter értékében a bemeneti objektumok megjelenítéséhez.
Típus: | PSObject |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | True |
Helyettesítő karakterek elfogadása: | False |
-JobName
A háttérfeladat rövid nevét adja meg. A feladatok Job<n>
<n>
neve alapértelmezés szerint egy sorszám.
Ha egy parancsban a JobName paramétert használja, a parancs feladatként fut, és Invoke-Command
egy feladatobjektumot ad vissza, még akkor is, ha nem szerepel az AsJob a parancsban.
További információ a PowerShell háttérfeladatairól: about_Jobs.
Típus: | String |
Position: | Named |
Alapértelmezett érték: | Job<n> |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-KeyFilePath
Megadja a Secure Shell (SSH) által a felhasználók távoli számítógépen történő hitelesítéséhez használt kulcsfájl elérési útját.
Az SSH lehetővé teszi a felhasználói hitelesítés magán- és nyilvános kulcsokkal történő végrehajtását az alapszintű jelszóhitelesítés alternatívájaként. Ha a távoli számítógép kulcshitelesítésre van konfigurálva, akkor ez a paraméter a felhasználót azonosító kulcs megadására használható.
Ezt a paramétert a PowerShell 6.0-ban vezettük be.
Típus: | String |
Aliasok: | IdentityFilePath |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-NoNewScope
Azt jelzi, hogy ez a parancsmag a megadott parancsot futtatja az aktuális hatókörben. Alapértelmezés szerint Invoke-Command
a parancsokat a saját hatókörükben futtatja.
Ez a paraméter csak az aktuális munkamenetben futtatott parancsokban érvényes, vagyis a ComputerName és a Munkamenet paramétereket kihagyó parancsokban.
Ezt a paramétert a PowerShell 3.0-ban vezettük be.
Típus: | SwitchParameter |
Position: | Named |
Alapértelmezett érték: | False |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-Options
A távoli SSH-alapú munkamenethez való csatlakozáskor használt SSH-beállítások kivonatát adja meg. A lehetséges lehetőségek az ssh-parancs Unix-alapú verziója által támogatott értékek.
A paraméterek által explicit módon átadott értékek elsőbbséget élveznek a Beállítások kivonatolóban átadott értékekkel szemben. A Port paraméterrel például felülbírálhatja Port
a Beállítások kivonatolóban átadott kulcs-érték párokat.
Ez a paraméter a PowerShell 7.3-ban lett hozzáadva.
Típus: | Hashtable |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-Port
A parancshoz használt hálózati portot adja meg a távoli számítógépen. Távoli számítógéphez való csatlakozáshoz a távoli számítógépnek a kapcsolat által használt portot kell figyelnie. Az alapértelmezett portok a következők: 5985 (WINRM-port HTTP-hez) és 5986 (WinRM-port HTTPS-hez).
Alternatív port használata előtt konfigurálja a WinRM-figyelőt a távoli számítógépen az adott port figyelésére. A figyelő konfigurálásához írja be a következő két parancsot a PowerShell-parancssorba:
Remove-Item -Path WSMan:\Localhost\listener\listener* -Recurse
New-Item -Path WSMan:\Localhost\listener -Transport http -Address * -Port \<port-number\>
Csak akkor használja a Port paramétert, ha kötelező. A parancsban beállított port az összes olyan számítógépre vagy munkamenetre vonatkozik, amelyen a parancs fut. Egy másik portbeállítás megakadályozhatja, hogy a parancs minden számítógépen fusson.
Típus: | Int32 |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-RemoteDebug
A meghívott parancs hibakeresési módban való futtatására szolgál a távoli PowerShell-munkamenetben.
Típus: | SwitchParameter |
Position: | Named |
Alapértelmezett érték: | False |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-RunAsAdministrator
Azt jelzi, hogy ez a parancsmag rendszergazdaként meghív egy parancsot.
Típus: | SwitchParameter |
Position: | Named |
Alapértelmezett érték: | False |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-ScriptBlock
Megadja a futtatandó parancsokat. A parancsokat kapcsos zárójelekbe ({ }
) ágyazva hozzon létre egy szkriptblokkot. Invoke-Command
Ha távolról futtat egy parancsot, a parancsban szereplő változók kiértékelése a távoli számítógépen történik.
Feljegyzés
A szkriptblokk paraméterei csak pozíció alapján adhatóak át az Argumentumlistából. A kapcsolóparaméterek pozíció szerint nem adhatók át. Ha olyan paraméterre van szüksége, amely a SwitchParameter típushoz hasonlóan viselkedik, használjon inkább logikai típust.
Típus: | ScriptBlock |
Aliasok: | Command |
Position: | 0 |
Alapértelmezett érték: | None |
Kötelező: | True |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-Session
Olyan munkamenet-tömböt határoz meg, amelyben ez a parancsmag futtatja a parancsot. Adjon meg egy olyan változót, amely PSSession objektumokat tartalmaz, vagy olyan parancsot, amely létrehozza vagy lekéri a PSSession objektumokat, például egy vagy Get-PSSession
egy New-PSSession
parancsot.
PSSession létrehozásakor a PowerShell állandó kapcsolatot létesít a távoli számítógéppel. PsSession használatával több kapcsolódó parancsot futtathat, amelyek adatokat osztanak meg. Egyetlen parancs vagy nem kapcsolódó parancsok sorozatának futtatásához használja a ComputerName paramétert. További információ: about_PSSessions.
Típus: | PSSession[] |
Position: | 0 |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-SessionName
Egy leválasztott munkamenet rövid nevét adja meg. A névvel hivatkozhat a munkamenetre a következő parancsokban, például egy Get-PSSession
parancsban. Ez a paraméter csak az InDisconnectedSession paraméterrel érvényes.
Ezt a paramétert a PowerShell 3.0-ban vezettük be.
Típus: | String[] |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-SessionOption
A munkamenet speciális beállításait adja meg. Adjon meg egy SessionOption objektumot, például a parancsmaggal New-PSSessionOption
létrehozott objektumot, vagy egy kivonattáblát, amelyben a kulcsok munkamenet-beállításnevek, az értékek pedig munkamenet-beállításértékek.
Feljegyzés
Ha kivonatolót ad meg a SessionOptionhoz, a PowerShell a kivonatolót System.Management.Autiomation.Remoting.PSSessionOption objektummá alakítja. A kivonatolóban megadott kulcsok értékei az objektum megfelelő tulajdonságára kerülnek. Ez a hívástól New-PSSessionOption
eltérően viselkedik. Például az időtúllépési tulajdonságok System.TimeSpan értékei (például az IdleTimeout) az ezredmásodperc helyett egy egész szám értékét osztásjelekké alakítják.
További információ a PSSessionOption objektumról és tulajdonságairól: PSSessionOption
A beállítások alapértelmezett értékeit a $PSSessionOption
beállítási változó értéke határozza meg, ha be van állítva. Ellenkező esetben az alapértelmezett értékeket a munkamenet-konfigurációban megadott beállítások állítják be.
A munkamenet-beállításértékek elsőbbséget élveznek a beállításváltozóban és a $PSSessionOption
munkamenet-konfigurációban beállított munkamenetek alapértelmezett értékeivel szemben. A munkamenet-konfigurációban beállított maximális értékek, kvóták és korlátok azonban nem elsőbbséget élveznek.
Az alapértelmezett értékeket tartalmazó munkamenet-beállítások leírását lásd: New-PSSessionOption
. A beállítási változóval kapcsolatos információkért $PSSessionOption
lásd : about_Preference_Variables. A munkamenet-konfigurációkkal kapcsolatos további tudnivalókért tekintse meg az about_Session_Configuration_Files című témakört.
Típus: | PSSessionOption |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-SSHConnection
Ez a paraméter kivonattáblák tömbjét használja, ahol minden kivonattábla egy vagy több kapcsolati paramétert tartalmaz a Secure Shell(SSH) kapcsolat létrehozásához. Az SSHConnection paraméter több munkamenet létrehozására is használható, ahol az egyes munkamenetek eltérő kapcsolati információkat igényelnek.
A kivonatolónak a következő tagjai vannak:
- ComputerName (vagy HostName)
- Port
- UserName
- KeyFilePath (vagy IdentityFilePath)
A ComputerName (vagy HostName) az egyetlen kulcs-érték pár, amelyre szükség van.
Ezt a paramétert a PowerShell 6.0-ban vezettük be.
Típus: | Hashtable[] |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | True |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-SSHTransport
Azt jelzi, hogy a távoli kapcsolat a Secure Shell (SSH) használatával jön létre.
A PowerShell alapértelmezés szerint a Windows WinRM használatával csatlakozik egy távoli számítógéphez. Ez a kapcsoló arra kényszeríti a PowerShellt, hogy használja a HostName paramétert egy SSH-alapú távoli kapcsolat létrehozásához.
Ezt a paramétert a PowerShell 6.0-ban vezettük be.
Típus: | SwitchParameter |
Elfogadott értékek: | true |
Position: | Named |
Alapértelmezett érték: | False |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-Subsystem
Az új PSSession-hez használt SSH-alrendszert adja meg.
Ez határozza meg a célon a sshd_config definiált alrendszert. Az alrendszer előre definiált paraméterekkel elindítja a PowerShell egy adott verzióját. Ha a megadott alrendszer nem létezik a távoli számítógépen, a parancs meghiúsul.
Ha ezt a paramétert nem használja, az alapértelmezett az powershell
alrendszer.
Típus: | String |
Position: | Named |
Alapértelmezett érték: | powershell |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-ThrottleLimit
Megadja a parancs futtatásához létrehozható egyidejű kapcsolatok maximális számát. Ha kihagyja ezt a paramétert, vagy 0 értéket ad meg, a rendszer az alapértelmezett 32 értéket használja.
A szabályozás korlátja csak az aktuális parancsra vonatkozik, a munkamenetre és a számítógépre nem.
Típus: | Int32 |
Position: | Named |
Alapértelmezett érték: | 32 |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-UserName
Megadja a távoli számítógépen parancs futtatásához használt fiók felhasználónevét. A felhasználói hitelesítési módszer attól függ, hogy a Secure Shell (SSH) hogyan van konfigurálva a távoli számítógépen.
Ha az SSH alapszintű jelszóhitelesítésre van konfigurálva, a rendszer kérni fogja a felhasználói jelszót.
Ha az SSH kulcsalapú felhasználói hitelesítésre van konfigurálva, akkor a KeyFilePath paraméterrel meg lehet adni egy kulcsfájl elérési útját, és nem történik jelszókérés. Ha az ügyfélfelhasználói kulcsfájl egy ismert SSH-helyen található, akkor a KeyFilePath paraméterre nincs szükség a kulcsalapú hitelesítéshez, és a felhasználó hitelesítése automatikusan megtörténik a felhasználónév alapján. További információkért tekintse meg a platform SSH-dokumentációját a kulcsalapú felhasználói hitelesítésről.
Ez nem kötelező paraméter. Ha a UserName paraméter nincs megadva, akkor a rendszer az aktuális bejelentkezett felhasználónevet használja a kapcsolathoz.
Ezt a paramétert a PowerShell 6.0-ban vezettük be.
Típus: | String |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-UseSSL
Azt jelzi, hogy ez a parancsmag a Secure Sockets Layer (SSL) protokoll használatával hoz létre kapcsolatot a távoli számítógéppel. Alapértelmezés szerint az SSL nem használatos.
A WS-Management a hálózaton keresztül továbbított összes PowerShell-tartalmat titkosítja. A UseSSL paraméter egy további védelem, amely HTTP helyett HTTPS-kapcsolaton keresztül küldi az adatokat.
Ha ezt a paramétert használja, de az SSL nem érhető el a parancshoz használt porton, a parancs meghiúsul.
Típus: | SwitchParameter |
Position: | Named |
Alapértelmezett érték: | False |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-VMId
Virtuális gépek azonosítóinak tömbje.
Típus: | Guid[] |
Aliasok: | VMGuid |
Position: | 0 |
Alapértelmezett érték: | None |
Kötelező: | True |
Folyamatbemenet elfogadása: | True |
Helyettesítő karakterek elfogadása: | False |
-VMName
A virtuális gépek nevének tömbje.
Típus: | String[] |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | True |
Folyamatbemenet elfogadása: | True |
Helyettesítő karakterek elfogadása: | False |
Bevitelek
Parancsokat parancsokat futtathat egy szkriptblokkban a következőre Invoke-Command
: . Használja az $Input
automatikus változót a parancs bemeneti objektumainak megjelenítéséhez.
Kimenetek
System.Management.Automation.PSRemotingJob
Ha az AsJob paramétert használja, ez a parancsmag egy feladatobjektumot ad vissza.
Ha az InDisconnectedSession paramétert használja, ez a parancsmag egy PSSession objektumot ad vissza.
Ez a parancsmag alapértelmezés szerint a meghívott parancs kimenetét adja vissza, amely a ScriptBlock paraméter értéke.
Jegyzetek
A PowerShell a következő aliasokat Invoke-Command
tartalmazza:
- Minden platform:
icm
A Windows Vista és a Windows operációs rendszer újabb verzióiban a Parancs helyi számítógépen való futtatásához Invoke-Command
a PowerShellt a Futtatás rendszergazdaként lehetőséggel kell futtatnia.
Ha több számítógépen futtat parancsokat, a PowerShell abban a sorrendben csatlakozik a számítógépekhez, amelyben azok megjelennek a listában. A parancs kimenete azonban a távoli számítógépektől kapott sorrendben jelenik meg, ami eltérő lehet.
A futtatott parancsból Invoke-Command
eredő hibák szerepelnek a parancs eredményei között.
A helyi parancsok hibáit megszüntető hibák távoli parancsokban nem végződő hibákként lesznek kezelve. Ez a stratégia gondoskodik arról, hogy az egyik számítógépen előforduló hibák megszüntetése ne zárja be a parancsot az összes számítógépen, amelyen fut. Ezt a gyakorlatot akkor is alkalmazzák, ha egy távoli parancsot egyetlen számítógépen futtatnak.
Ha a távoli számítógép nem olyan tartományban van, amelyet a helyi számítógép megbízik, előfordulhat, hogy a számítógép nem tudja hitelesíteni a felhasználó hitelesítő adatait. Ha hozzá szeretné adni a távoli számítógépet a WS-Management megbízható gazdagépeinek listájához, használja a következő parancsot a WSMAN
szolgáltatóban, ahol <Remote-Computer-Name>
a távoli számítógép neve szerepel:
Set-Item -Path WSMan:\Localhost\Client\TrustedHosts -Value \<Remote-Computer-Name\>
Ha leválaszt egy PSSessiont az InDisconnectedSession paraméterrel, a munkamenet állapota megszakad , a rendelkezésre állás pedig Nincs. Az Állapot tulajdonság értéke az aktuális munkamenethez viszonyítva van. A leválasztott érték azt jelenti, hogy a PSSession nincs csatlakoztatva az aktuális munkamenethez. Ez azonban nem jelenti azt, hogy a PSSession leválasztva van az összes munkamenetről. Lehet, hogy egy másik munkamenethez csatlakozik. Annak megállapításához, hogy csatlakozhat-e a munkamenethez, vagy újracsatlakozhat-e, használja a Rendelkezésre állás tulajdonságot .
A Nincs rendelkezésre állás értéke azt jelzi, hogy csatlakozhat a munkamenethez. A Foglalt érték azt jelzi, hogy nem tud csatlakozni a PSSessionhoz, mert egy másik munkamenethez van csatlakoztatva. A munkamenetek State tulajdonságának értékeiről további információt a RunspaceState-ben talál. A munkamenetek rendelkezésre állási tulajdonságának értékeiről további információt a RunspaceAvailability című témakörben talál.
A HostName és az SSHConnection paraméterek a PowerShell 6.0-val kezdődően lettek belefoglalva. A rendszer hozzáadta őket, hogy a Secure Shell (SSH) alapján biztosítsa a PowerShell-remotálást. A PowerShell és az SSH több platformon (Windows, Linux, macOS) támogatott, és a PowerShell-remoting ezeken a platformokon működik, ahol a PowerShell és az SSH telepítve és konfigurálva van. Ez eltér az előző Windows rendszertől, és csak a WinRM-en alapuló átnevezésről van szó, és a WinRM számos konkrét funkciója és korlátozása nem érvényes. A WinRM-alapú kvóták, a munkamenet-beállítások, az egyéni végpontkonfiguráció és a leválasztási/újracsatlakozási funkciók jelenleg nem támogatottak. A PowerShell SSH-remoting beállításával kapcsolatos további információkért lásd : PowerShell Remoting Over SSH.
A ssh
végrehajtható a következő forrásokból szerzi be a konfigurációs adatokat a következő sorrendben:
- parancssori beállítások
- felhasználó konfigurációs fájlja (~/.ssh/config)
- rendszerszintű konfigurációs fájl (/etc/ssh/ssh_config)
A következő parancsmagparaméterek lesznek leképezve a paraméterekre és a beállításokra ssh
:
Parancsmag paramétere | ssh paraméter | egyenértékű ssh -o lehetőség |
---|---|---|
-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> |
A paraméterek által explicit módon átadott értékek elsőbbséget élveznek a Beállítások kivonatolóban átadott értékekkel szemben. További információ a fájlokról ssh_config
: ssh_config(5).