Invoke-Command

Parancsokat futtat helyi és távoli számítógépeken.

Syntax

Invoke-Command
      [-ScriptBlock] <ScriptBlock>
      [-NoNewScope]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-Session] <PSSession[]>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-FilePath] <String>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-Session] <PSSession[]>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-ComputerName] <String[]>]
      [-Credential <PSCredential>]
      [-Port <Int32>]
      [-UseSSL]
      [-ConfigurationName <String>]
      [-ApplicationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-InDisconnectedSession]
      [-SessionName <String[]>]
      [-HideComputerName]
      [-JobName <String>]
      [-FilePath] <String>
      [-SessionOption <PSSessionOption>]
      [-Authentication <AuthenticationMechanism>]
      [-EnableNetworkAccess]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-ComputerName] <String[]>]
      [-Credential <PSCredential>]
      [-Port <Int32>]
      [-UseSSL]
      [-ConfigurationName <String>]
      [-ApplicationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-InDisconnectedSession]
      [-SessionName <String[]>]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      [-SessionOption <PSSessionOption>]
      [-Authentication <AuthenticationMechanism>]
      [-EnableNetworkAccess]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-CertificateThumbprint <String>]
      [<CommonParameters>]
Invoke-Command
      [-Credential <PSCredential>]
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [[-ConnectionUri] <Uri[]>]
      [-AsJob]
      [-InDisconnectedSession]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      [-AllowRedirection]
      [-SessionOption <PSSessionOption>]
      [-Authentication <AuthenticationMechanism>]
      [-EnableNetworkAccess]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-CertificateThumbprint <String>]
      [<CommonParameters>]
Invoke-Command
      [-Credential <PSCredential>]
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [[-ConnectionUri] <Uri[]>]
      [-AsJob]
      [-InDisconnectedSession]
      [-HideComputerName]
      [-JobName <String>]
      [-FilePath] <String>
      [-AllowRedirection]
      [-SessionOption <PSSessionOption>]
      [-Authentication <AuthenticationMechanism>]
      [-EnableNetworkAccess]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-ScriptBlock] <ScriptBlock>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-VMId] <Guid[]>
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-ScriptBlock] <ScriptBlock>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -VMName <String[]>
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-FilePath] <String>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-VMId] <Guid[]>
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-FilePath] <String>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -VMName <String[]>
      [<CommonParameters>]
Invoke-Command
      [-Port <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      -HostName <String[]>
      [-UserName <String>]
      [-KeyFilePath <String>]
      [-SSHTransport]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-Subsystem <String>]
      [-ConnectingTimeout <int>]
      [<CommonParameters>]
Invoke-Command
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      [-RunAsAdministrator]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -ContainerId <String[]>
      [<CommonParameters>]
Invoke-Command
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-FilePath] <String>
      [-RunAsAdministrator]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -ContainerId <String[]>
      [<CommonParameters>]
Invoke-Command
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      -SSHConnection <Hashtable[]>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [-AsJob]
      [-HideComputerName]
      -FilePath <String>
      -HostName <String[]>
      [-UserName <String>]
      [-KeyFilePath <String>]
      [-SSHTransport]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [-AsJob]
      [-HideComputerName]
      -FilePath <String>
      -SSHConnection <Hashtable[]>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]

Description

A Invoke-Command parancsmag helyi vagy távoli számítógépen futtat parancsokat, é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. Az adatokat megosztó kapcsolódó parancsok futtatásához a parancsmaggal New-PSSession hozzon létre egy PSSession -t (állandó kapcsolatot) a távoli számítógépen, majd futtassa a parancsot a PSSessionmunkamenetparaméterévelInvoke-Command. 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 .

Parancsként parancsfájlblokkot is futtathat Invoke-Command helyi számítógépen. A PowerShell azonnal futtatja a szkriptblokkot az aktuális hatókör gyermekhatókörében.

Invoke-Command Mielőtt parancsokat futtatna egy távoli számítógépen, olvassa el 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. További információ a PowerShell SSH-remoting beállításáról: 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 egy parancsfájlt határoz meg, amely a helyi számítógépen található. 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őadat-paraméter a parancs futtatására szolgál a Domain01\User01 biztonsági környezetben, amely egy olyan felhasználó, aki rendelkezik parancsok futtatására jogosult felhasználóval. A ScriptBlock paraméter megadja a távoli számítógépen futtatandó parancsot.

A PowerShell válaszul kéri a user01 fiók jelszavát és hitelesítési módját. 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 $s mentett munkamenetet 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 futtatásához

Ez a példa összehasonlítja a ComputerName és a Session paraméterek használatával járó hatásokat Invoke-Command. Bemutatja, hogyan futtathat egy munkamenetet olyan parancsok sorozatának futtatásá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 Server02 távoli számítógépen futtatott parancsok ComputerName paraméterét Invoke-Command használja. Az első parancs a Get-Process parancsmag használatával 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 parancs befejeződésekor a munkamenet 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óba. A Invoke-CommandMunkamenet paramétert használó sorok a két parancs ugyanazon munkamenetben való futtatásához. Mivel mindkét parancs ugyanabban a munkamenetben fut, az $p érték aktív marad.

5. példa: Változóban tárolt szkriptblokkot tartalmazó parancs meghívása

Ez a példa bemutatja, hogyan futtathat egy szkriptblokkként tárolt parancsot 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 {$_.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ásodlagos munkamenet-konfigurációt határoz meg. A ScriptBlock paraméter futtatásával Get-WinEvent lekérheti 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 lekéri a 200 távoli számítógépen futó PowerShell-gazdaprogram verzióját.

$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, amely egy számítógépnévfájl.

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 Version 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, amelyről 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, amelyek mindegyike a két távoli számítógépen fut.

A Get-Job parancs menti a feladatobjektumot a $j változóba. A $j változó ezután át lesz állítva a Format-List parancsmagra, hogy megjelenítse a feladatobjektum összes tulajdonságát egy listában. Az utolsó parancs lekéri a feladatok eredményeit. A feladatobjektumot a Receive-Job parancsmagba $j 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 foglalhatja bele a helyi változók értékeit egy távoli számítógépen futtatott parancsba. A parancs a Using hatókör-módosító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 van 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 Usingabout_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ó tárolja az eseménynapló nevét( PowerShellCore/Operational). 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ép nevének elrejtése

Ez a példa a HideComputerName paraméter Invoke-Commandhasználatát mutatja be. A HideComputerName nem módosítja a parancsmag által visszaadott objektumot. Csak a kijelzőt módosítja. A Format 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 -ScriptBlock {Get-Process PowerShell} -HideComputerName

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id   ProcessName
-------  ------    -----      ----- -----   ------     --   -----------
575      15        45100      40988   200     4.68     1392 PowerShell
777      14        35100      30988   150     3.68     67   PowerShell

Az első két parancs egy Get-Process parancs futtatására használható Invoke-Command a PowerShell-folyamathoz. 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 Második parancs kimenete, amely a HideComputerName nevet használja, 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ékek átadására szolgál egy szkriptblokk nevesített paramétereinek. Ebben a példában a betűvel a kezdődő és .pdf a kiterjesztéssel kezdődő fájlnevek láthatók.

További információ a Param kulcsszóról: 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 a scriptBlock paramétert használja, amely két változót határoz meg, $param1 és $param2a . Get-ChildItem A a névvel ellátott paramétereket használja, a Név és az Include paramétert a változónevekkel együtt. Az Argumentumlista továbbítja 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ájlok könyvtártartalmát .txt jeleníti meg. Az Get-ChildItemElérési út paraméter a 0. pozíció, a Szűrő paraméter pedig az 1. pozíció.

A változóval kapcsolatos $args további információkért 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-CommandA egy ScriptBlock paramétert használ, és Get-ChildItem megadja a $args[0] tömb értékeit.$args[1] Az Argumentumlista továbbítja a $args tömbértékeket az Get-ChildItemElérési út és a Szűrő paraméterpozícióinak.

13. példa: Parancsfájl futtatása a szövegfájlban felsorolt összes számítógépen

Ez a példa a Invoke-Command parancsmag használatával 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 parancsfájl távoli számítógépeken való futtatását, még akkor is, ha a parancsfájl nem érhető el a távoli számítógépek számára.

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

A parancs elküldésekor a fájl tartalma Sample.ps1 egy parancsfájlblokkba lesz másolva, és a parancsfájlblokk minden távoli számítógépen lefut. 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 parancsmag használatával 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 átadandó paramétereket tartalmazza. A Invoke-Command parancsmag a Microsoft.Exchange munkamenet-konfigurációval futtat egy Set-Mailbox parancsot. 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 határozza 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
Invoke-Command -ComputerName server01 -UseSSL -ScriptBlock { Get-HotFix } -SessionOption $so -Credential server01\user01

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.

Megjegyzé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 használhatja az AllowRedirection és SessionOption paramétereket az URI-átirányítás távoli parancsokban való kezelésére.

$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, amelyet a rendszer a $max változóba ment. A parancs a MaximumRedirection paraméter használatával a PSSessionOption objektum MaximumConnectionRedirectionCount tulajdonságát 1-re állítja.

A Invoke-Command parancsmag egy távoli Microsoft Exchange Server futtat egy Get-Mailbox parancsot. Az AllowRedirection paraméter explicit engedélyt biztosít a kapcsolat másik végpontra való átirányításához. 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, az átirányítások száma 1 túllépi az értéket, és Invoke-Command nem megszakító hibát ad vissza.

17. példa: Hálózati megosztás elérése távoli munkamenetben

Ez a példa bemutatja, hogyan érhet el egy hálózati megosztást 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 kiszolgálóhoz, majd a Server02 egy második ugrást végez a Net03-ra a hálózati megosztás eléréséhez. További információ arról, hogy a PowerShell-távelérés hogyan támogatja a számítógépek közötti ugrásokat: A második ugrás végrehajtása a PowerShell-távelérésben.

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 engedélyezi a CredSSP delegálást 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 A létrehoz egy PSSession objektumot a Server02 számára, és az objektumot a $s változóban tárolja.

A Invoke-Command parancsmag a $s változó használatával csatlakozik a server02 távoli számítógéphez. 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ást a távoli számítógépen.

A $parameters változó tartalmazza a hálózati megosztáshoz való csatlakozáshoz használt paraméterértékeket. A Invoke-Command parancsmag egy Get-Item parancsot futtat a munkamenetben a következőben $s: . Ez a parancs lekér egy szkriptet a \\Net03\Scripts hálózati megosztásból. A parancs a Hitelesítési paramétert a CredSSP értékkel, a Hitelesítő paramétert pedig a 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 csatlakozik az egyes számítógépekhez, elindítja a szkriptet, majd leválasztja azokat az egyes számítógépekről. 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=43200000}
}
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ó szkript Invoke-Command .

A SessionOption értéke egy kivonattábla. Az OutputBufferingMode értéke Drop , az IdleTimeout értéke pedig 43200000 ezredmásodperc (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 egy 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 jelszót 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 sikertelen, és a távoli számítógép úgy van konfigurálva, hogy engedélyezze az alapszintű jelszóhitelesítést.

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

21. példa: Szkriptfájl futtatása több távoli számítógépen SSH-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épeken konfigurálva legyen az SSH a kulcsalapú felhasználóhitelesítés támogatására.

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

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 visszaadhat egy utasítást, amely egy másik URI-ra irányít át. 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.

Azt is korlátozhatja, hogy a rendszer hányszor irányítsa át a kapcsolatot a MaximumConnectionRedirectionCount munkamenet-beállítás értékének módosításával. Használja a parancsmag MaximumRedirection paraméterét New-PSSessionOption , vagy állítsa be a beállítási változó MaximumConnectionRedirectionCount tulajdonságát $PSSessionOption . Az alapértelmezett érték 5.

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

-ApplicationName

Megadja a kapcsolati URI alkalmazásnév-szegmensét. Ezzel a paraméterrel adhatja meg 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ásváltozó értéke. Ha ez a beállításváltozó nincs definiálva, az alapértelmezett érték a WSMAN. Ez az érték a legtöbb használathoz 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.

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

-ArgumentList

Megadja a szkriptblokk paramétereinek értékeit. A szkriptblokk paramétereit a rendszer az Argumentumlista tömbértékéből származó pozíció alapján 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.

Type:Object[]
Aliases:Args
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters: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 befejezése hosszabb időt vesz igénybe.

Az AsJob paraméter használatakor a parancs egy objektumot ad vissza, amely a feladatot jelöli, majd megjeleníti a parancssort. A munkamenetben folytathatja a munkát, 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 a parancsmag használatával Invoke-Command hasonlít egy Start-Job parancsmag távoli futtatására. Az AsJobs-feladattal azonban a feladat a helyi számítógépen jön létre, még akkor is, ha a feladat egy 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.

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters: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
  • Alapszintű
  • Credssp
  • Emészt
  • Kerberos
  • Negotiate
  • NegotiateWithImplicitCredential

Az alapértelmezett érték az Alapértelmezett.

A paraméter értékeivel kapcsolatos további információkért lásd: AuthenticationMechanism Enumerálás.

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 lett kialakítva, amelyek több erőforráson is hitelesítést igényelnek, például egy 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őadat-biztonsági támogatási szolgáltató.

Type:AuthenticationMechanism
Accepted values:Basic, Default, Credssp, Digest, Kerberos, Negotiate, NegotiateWithImplicitCredential
Position:Named
Default value:Default
Accept pipeline input:False
Accept wildcard characters:False

-CertificateThumbprint

Megadja egy olyan felhasználói fiók digitális nyilvános kulcsú tanúsítványát (X509), amely engedéllyel rendelkezik a leválasztott munkamenethez való csatlakozáshoz. 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. Csak helyi felhasználói fiókokhoz rendelhetők, és nem működnek tartományi fiókokkal.

A tanúsítvány ujjlenyomatának lekéréséhez használja a PowerShell Tanúsítvány: meghajtó egyik Get-Item parancsát Get-ChildItem .

Type:String
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters: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, amelyet csak a megadott parancs futtatásához használ, majd bezár. 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, localhost vagy pont (.).

Ha ip-címet szeretne használni a ComputerName értékben, a parancsnak tartalmaznia kell a hitelesítőadat-paramétert . A számítógépet https-átvitelre kell konfigurálni, vagy a távoli számítógép IP-címének szerepelnie kell a helyi számítógép WinRM TrustedHosts listájában. A számítógép nevének a TrustedHosts listához való hozzáadására vonatkozó utasításokért tekintse meg a Számítógép hozzáadása a megbízható gazdagépek listájához című témakört.

A Windows Vista és a Windows operációs rendszer újabb verzióiban, ha a helyi számítógépet fel szeretné venni a ComputerName értékbe, a PowerShellt a Futtatás rendszergazdaként beállítással kell futtatnia.

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

-ConfigurationName

Megadja az új PSSession-hoz használt munkamenet-konfigurációt.

Adja meg a konfiguráció nevét vagy a munkamenet-konfiguráció teljes erőforrás-URI-ját. Ha csak a konfiguráció nevét adja meg, a következő séma URI-ja lesz előtagként megadva: http://schemas.microsoft.com/PowerShell.

Az SSH-val való használat esetén ez a paraméter határozza meg a célon használandó alrendszert a következőben meghatározott módon sshd_config: . Az SSH alapértelmezett értéke az powershell alrendszer.

A 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 sikertelen lesz.

Az alapértelmezett érték a helyi számítógépen található $PSSessionConfigurationName beállításváltozó értéke. Ha ez a beállításváltozó nincs megadva, az alapértelmezett beállítás a Microsoft.PowerShell. További információ: about_Preference_Variables.

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

-ConnectingTimeout

A kezdeti SSH-kapcsolat befejezéséhez engedélyezett idő ezredmásodpercben megszabva. Ha a kapcsolat nem fejeződik be a megadott időn belül, a függvény hibát ad vissza.

Ez a paraméter a PowerShell 7.2-ben lett bevezetve

Type:Int32
Position:Named
Default value:unlimited
Accept pipeline input:False
Accept wildcard characters: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 szegmenssel rendelkező kapcsolati URI-t ad meg, de nem ad meg portot, a munkamenet a szabványoknak megfelelő portokkal jön létre: 80 HTTP-hez és 443 HTTPS-hez. Ha az alapértelmezett portokat szeretné használni a PowerShell-táveléréshez, adja meg az 5985-ös portot HTTP-hez vagy 5986-ot HTTPS-hez.

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.

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

-ContainerId

Tárolóazonosítók tömbje.

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

-Credential

Olyan felhasználói fiókot ad meg, amely rendelkezik a művelet végrehajtásához szükséges engedéllyel. Alapértelmezés szerint az aktuális felhasználó.

Írjon be egy felhasználónevet (például User01 vagy Domain01\User01), vagy adjon meg egy, a Get-Credential parancsmag által létrehozott PSCredential objektumot. Ha beír egy felhasználónevet, a rendszer kéri a jelszó megadását.

A hitelesítő adatokat egy PSCredential objektum tárolja, a jelszó pedig SecureStringként van tárolva.

Megjegyzés

További információ a SecureString adatvédelméről: How secure is SecureString?.

Type:PSCredential
Position:Named
Default value:Current user
Accept pipeline input:True
Accept wildcard characters:False

-EnableNetworkAccess

Azt jelzi, hogy ez a parancsmag interaktív biztonsági jogkivonatot ad hozzá a visszacsatolási munkamenetekhez. Az interaktív jogkivonat lehetővé teszi, hogy olyan parancsokat futtasson a visszacsatolási munkamenetben, amelyek más számítógépekről szereznek be adatokat. 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 ugyanarról a számítógépről származik é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 jogkivonattal jönnek létre, ami nem feltétlenül biztosít elegendő engedélyt a távoli számítógépeken való hitelesítéshez.

Az EnableNetworkAccess paraméter csak visszacsatolási munkamenetekben érvényes. Ha az EnableNetworkAccess parancsot akkor 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 engedélyezheti a távelérést a Hitelesítési paraméter CredSSP értékével, 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 arról a számítógépről csatlakoztathatók újra, amelyen a munkamenet létre lett hozva. A CredSSP-hitelesítést használó leválasztott munkamenetek újracsatlakoztathatók más számítógépekről. További információ: Disconnect-PSSession.

Ez a paraméter a PowerShell 3.0-ban lett bevezetve.

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters: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 irányt adjon a parancsprogram elérési útjának Invoke-Command. A parancsfájlnak 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 parancsfájlblokkmá alakítja a megadott parancsfájl tartalmát, továbbítja a parancsfájlblokkot a távoli számítógépnek, és futtatja azt a távoli számítógépen.

Type:String
Aliases:PSPath
Position:1
Default value:None
Accept pipeline input:False
Accept wildcard characters: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 változtatja meg az objektumot.

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

-HostName

A Secure Shell- (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éppel való kapcsolat a Windows WinRM helyett SSH használatával jön létre.

Ez a paraméter a PowerShell 6.0-ban lett bevezetve.

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

-InDisconnectedSession

Azt jelzi, hogy ez a parancsmag egy parancsot vagy szkriptet futtat egy leválasztott munkamenetben.

Ha az InDisconnectedSession paramétert használja, Invoke-Command minden távoli számítógépen létrehoz egy állandó munkamenetet, elindítja a ScriptBlock vagy FilePath paraméter által megadott parancsot, majd megszakítja a kapcsolatot a munkamenettel. A parancsok továbbra is futnak a leválasztott munkamenetekben. Az InDisconnectedSession lehetővé teszi a parancsok futtatását anélkül, hogy kapcsolatot tartana fenn a távoli munkamenetekkel. Mivel a munkamenet le van választva az eredmények visszaadása előtt, az InDisconnectedSession gondoskodik arról, hogy a rendszer minden parancseredményt visszaadjon az újracsatlakoztatott munkamenetnek ahelyett, hogy felosztaná őket a munkamenetek között.

Az InDisconnectedSession nem használható a Munkamenet 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 olyan parancsokat szeretne futtatni, amelyek kimenetet hoznak létre egy leválasztott munkamenetben, állítsa az OutputBufferingMode munkamenetbeállítás értékét Drop értékre. Ha csatlakozni kíván a leválasztott munkamenethez, állítsa be a tétlen 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 üresjárati időtúllépést a SessionOption paraméterben vagy a $PSSessionOption beállítási változóban állíthatja be. A munkamenet-beállításokkal kapcsolatos további információkért 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.

Ez a paraméter a PowerShell 3.0-ban lett bevezetve.

Type:SwitchParameter
Aliases:Disconnected
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters: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.

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

-JobName

A háttérfeladat rövid nevét adja meg. Alapértelmezés szerint a feladatok neve Job<n>egy <n> sorszám.

Ha egy parancsban a JobName paramétert használja, a parancs feladatként fut, és Invoke-Command feladatobjektumot ad vissza, még akkor is, ha nem adja hozzá az AsJobs-feladatot a parancshoz.

További információ a PowerShell háttérfeladatairól: about_Jobs.

Type:String
Position:Named
Default value:Job<n>
Accept pipeline input:False
Accept wildcard characters: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 privát é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 használható a felhasználót azonosító kulcs megadására.

Ez a paraméter a PowerShell 6.0-ban lett bevezetve.

Type:String
Aliases:IdentityFilePath
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters: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, azaz olyan parancsokban, amelyek nem használják a ComputerName és a Session paramétereket.

Ez a paraméter a PowerShell 3.0-ban lett bevezetve.

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters: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 (HTTP WinRM-port) és 5986 (HTTPS WinRM-port).

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 az összes számítógépen fusson.

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

-RemoteDebug

A meghívott parancs hibakeresési módban való futtatására szolgál a távoli PowerShell-munkamenetben.

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

-RunAsAdministrator

Azt jelzi, hogy ez a parancsmag rendszergazdaként hív meg egy parancsot.

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

-ScriptBlock

Megadja a futtatandó parancsokat. A parancsokat kapcsos zárójelekbe ({ }) foglalva hozzon létre egy szkriptblokkot. Invoke-Command Ha távolról futtat egy parancsot, a rendszer kiértékeli a parancsban szereplő változókat a távoli számítógépen.

Megjegyzés

A scriptblock paraméterei csak pozíciónként adhatók át az ArgumentList listából. A kapcsolóparaméterek pozíciónként 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.

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

-Session

Megadja azoknak a munkameneteknek a tömbét, amelyekben ez a parancsmag futtatja a parancsot. Adjon meg egy pssession objektumokat tartalmazó változót, vagy egy olyan parancsot, amely létrehozza vagy lekéri a PSSession objektumokat, például egy New-PSSession vagy Get-PSSession egy 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.

Type:PSSession[]
Position:0
Default value:None
Accept pipeline input:False
Accept wildcard characters: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.

Ez a paraméter a PowerShell 3.0-ban lett bevezetve.

Type:String[]
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters: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.

A beállítások alapértelmezett értékeit a beállítási változó értéke $PSSessionOption 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 határozzák meg.

A munkamenet-beállítás értékei elsőbbséget élveznek a $PSSessionOption beállításváltozóban és a munkamenet-konfigurációban beállított munkamenetek alapértelmezett értékeivel szemben. Azonban nem elsőbbséget élveznek a munkamenet-konfigurációban beállított maximális értékekkel, kvótával vagy korlátokkal szemben.

Az alapértelmezett értékeket tartalmazó munkamenet-beállítások leírását lásd: New-PSSessionOption. A preferenciaváltozóval $PSSessionOption kapcsolatos információkért 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.

Type:PSSessionOption
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters: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 akkor hasznos, ha több munkamenetet hoz létre, ahol az egyes munkamenetek eltérő kapcsolati adatokat igényelnek.

A kivonattáblának a következő tagjai vannak:

  • ComputerName (vagy HostName)
  • Port
  • Felhasználónév
  • KeyFilePath (vagy IdentityFilePath)

A ComputerName (vagy HostName) az egyetlen kötelező kulcs-érték pár.

Ez a paraméter a PowerShell 6.0-ban lett bevezetve.

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

-SSHTransport

Azt jelzi, hogy a távoli kapcsolat Secure Shell (SSH) használatával jött 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ó kényszeríti a PowerShellt, hogy a HostName paramétert használja egy SSH-alapú távoli kapcsolat létrehozásához.

Ez a paraméter a PowerShell 6.0-ban lett bevezetve.

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

-Subsystem

Megadja az új PSSession-hoz használt SSH-alrendszert.

Ez határozza meg a célhoz használni kívánt alrendszert a sshd_config. 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 sikertelen lesz.

Ha nem használja ezt a paramétert, az alapértelmezett a "powershell" alrendszer.

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

-ThrottleLimit

A parancs futtatásához létrehozható egyidejű kapcsolatok maximális számát határozza meg. 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ási korlát csak az aktuális parancsra vonatkozik, a munkamenetre vagy a számítógépre nem.

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

-UserName

Megadja annak a fióknak a felhasználónevét, amellyel parancsot futtathat a távoli számítógépen. A felhasználó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óhitelesítésre van konfigurálva, a kulcsfájl elérési útja a KeyFilePath paraméterrel adható meg, és nem jelenik meg 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és 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.

Ez a paraméter a PowerShell 6.0-ban lett bevezetve.

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

-UseSSL

Azt jelzi, hogy ez a parancsmag a Secure Sockets Layer (SSL) protokollt használja a távoli számítógéppel való kapcsolat létesítéséhez. Alapértelmezés szerint a rendszer nem használ SSL-t.

WS-Management titkosítja a hálózaton keresztül továbbított összes PowerShell-tartalmat. A UseSSL paraméter egy további védelem, amely HTTP helyett HTTPS-kapcsolaton keresztül küldi el az adatokat.

Ha ezt a paramétert használja, de az SSL nem érhető el a parancshoz használt porton, a parancs sikertelen lesz.

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

-VMId

Virtuális gépek azonosítóinak tömbje.

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

-VMName

A virtuális gépek nevének tömbje.

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

Bevitelek

ScriptBlock

Parancsot parancsblokkban átadhatja a parancsnak Invoke-Command. Használja az $Input automatikus változót a bemeneti objektumok megjelenítéséhez a parancsban.

Kimenetek

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

Ez a parancsmag egy feladatobjektumot ad vissza, ha az AsJob paramétert használja. Ha megadja az InDisconnectedSession paramétert, Invoke-Command egy PSSession objektumot ad vissza. Ellenkező esetben a meghívott parancs kimenetét adja vissza, amely a ScriptBlock paraméter értéke.

Jegyzetek

Windows Vista rendszeren és a Windows operációs rendszer újabb verzióiban, ha a ComputerName paraméterrel Invoke-Command szeretne parancsot futtatni a helyi számítógépen, a PowerShellt a Futtatás rendszergazdaként beállítással 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 abban a sorrendben jelenik meg, ahogyan a távoli számítógépekről érkezik, ami eltérő lehet.

A futtatott parancsból Invoke-Command eredő hibák szerepelnek a parancs eredményei között. A helyi parancsokban előforduló hibákat a rendszer nem megszakító hibákként kezeli egy távoli parancsban. Ez a stratégia biztosítja, hogy az egyik számítógépen előforduló hibák megszakítása 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, amelyben 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 szolgáltató következő parancsát WSMAN , ahol <Remote-Computer-Name> a távoli számítógép neve látható:

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

Ha leválaszt egy PSSession-t az InDisconnectedSession paraméterrel, a munkamenet állapota Megszakad , a rendelkezésre állás pedig Nincs. Az State tulajdonság értéke az aktuális munkamenethez képest van megadva. A Leválasztva érték azt jelenti, hogy a PSSession nincs csatlakoztatva az aktuális munkamenethez. Ez azonban nem jelenti azt, hogy a PSSession le van választva az összes munkamenetről. Lehet, hogy egy másik munkamenethez csatlakozik. Annak megállapításához, hogy tud-e csatlakozni a munkamenethez, vagy újra tud-e csatlakozni, használja a Rendelkezésre állás tulajdonságot .

A Nincs rendelkezésre állási érték azt jelzi, hogy csatlakozhat a munkamenethez. A Foglalt érték azt jelzi, hogy nem tud csatlakozni a PSSession-hoz , mert egy másik munkamenethez van csatlakoztatva. A munkamenetek State tulajdonságának értékeivel kapcsolatos további információkért lásd: RunspaceState. A munkamenetek Rendelkezésre állási tulajdonságának értékeiről a RunspaceAvailability című témakörben olvashat bővebben.

A HostName és az SSHConnection paraméterek a PowerShell 6.0-val kezdődően szerepelnek. A rendszer hozzáadta őket, hogy a Secure Shell (SSH) alapján biztosítsa a PowerShell-távelérést. A PowerShell és az SSH több platformon is támogatott (Windows, Linux, macOS), és a PowerShell-távelérés ezeken a platformokon működik, amelyeken telepítve és konfigurálva van a PowerShell és az SSH. Ez nem ugyanaz, mint az előző, Csak a WinRM-en alapuló Windows-távelérés, és számos WinRM-specifikus funkció és korlátozás 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-újraegyenlítésének beállításával kapcsolatos további információkért lásd: PowerShell-távelérés SSH-val.