Invoke-Command

Kör kommandon på lokala datorer och fjärrdatorer.

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

Cmdleten Invoke-Command kör kommandon på en lokal dator eller fjärrdator och returnerar alla utdata från kommandona, inklusive fel. Med ett enda Invoke-Command kommando kan du köra kommandon på flera datorer.

Om du vill köra ett enda kommando på en fjärrdator använder du parametern ComputerName . Om du vill köra en serie relaterade kommandon som delar data använder du cmdleten New-PSSession för att skapa en PSSession (en beständig anslutning) på fjärrdatorn och använder sedan sessionsparametern Invoke-Command för för att köra kommandot i PSSession. Om du vill köra ett kommando i en frånkopplad session använder du parametern InDisconnectedSession . Om du vill köra ett kommando i ett bakgrundsjobb använder du parametern AsJob .

Du kan också använda Invoke-Command ett körningsskriptblock som ett kommando på en lokal dator. PowerShell kör skriptblocket omedelbart i ett underordnat omfång för det aktuella omfånget.

Läs about_Remote innan du använder Invoke-Command för att köra kommandon på en fjärrdator.

Från och med PowerShell 6.0 kan du använda Secure Shell (SSH) för att upprätta en anslutning till och anropa kommandon på fjärrdatorer. SSH måste vara installerat på den lokala datorn och fjärrdatorn måste konfigureras med en PowerShell SSH-slutpunkt. Fördelen med en SSH-baserad PowerShell-fjärrsession är att den fungerar på flera plattformar (Windows, Linux, macOS). För SSH-baserad session använder du parametrarna HostName eller SSHConnection för att ange fjärrdatorn och relevant anslutningsinformation. Mer information om hur du konfigurerar PowerShell SSH-fjärrkommunikation finns i PowerShell-fjärrkommunikation via SSH.

Vissa kodexempel använder splatting för att minska radlängden. Mer information finns i about_Splatting.

Exempel

Exempel 1: Kör ett skript på en server

Det här exemplet kör skriptet Test.ps1 på Server01-datorn.

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

Parametern FilePath anger ett skript som finns på den lokala datorn. Skriptet körs på fjärrdatorn och resultatet returneras till den lokala datorn.

Exempel 2: Kör ett kommando på en fjärrserver

Det här exemplet kör ett Get-Culture kommando på server01-fjärrdatorn.

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

Parametern ComputerName anger namnet på fjärrdatorn. Parametern Credential används för att köra kommandot i säkerhetskontexten för Domain01\User01, en användare som har behörighet att köra kommandon. Parametern ScriptBlock anger vilket kommando som ska köras på fjärrdatorn.

Som svar begär PowerShell lösenordet och en autentiseringsmetod för User01-kontot. Sedan körs kommandot på Server01-datorn och returnerar resultatet.

Exempel 3: Kör ett kommando i en beständig anslutning

I det här exemplet körs samma Get-Culture kommando i en session, med hjälp av en beständig anslutning, på fjärrdatorn med namnet Server02.

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

Cmdleten New-PSSession skapar en session på server02-fjärrdatorn och sparar den i variabeln $s . Vanligtvis skapar du bara en session när du kör en serie kommandon på fjärrdatorn.

Cmdleten Invoke-Command Get-Culture kör kommandot på Server02. Parametern Session anger den session som sparats i variabeln $s .

Som svar kör PowerShell kommandot i sessionen på Server02-datorn.

Exempel 4: Använd en session för att köra en serie kommandon som delar data

I det här exemplet jämförs effekterna av att använda parametrarna ComputerName och Session för Invoke-Command. Den visar hur du använder en session för att köra en serie kommandon som delar samma data.

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

17930240

De två första kommandona använder parametern Invoke-Command ComputerName för för att köra kommandon på server02-fjärrdatorn. Det första kommandot använder cmdleten Get-Process för att hämta PowerShell-processen på fjärrdatorn och för att spara den i variabeln $p . Det andra kommandot hämtar värdet för egenskapen VirtualMemorySize för PowerShell-processen.

När du använder parametern ComputerName skapar PowerShell en ny session för att köra kommandot. Sessionen stängs när kommandot har slutförts. Variabeln $p skapades i en anslutning, men den finns inte i anslutningen som skapades för det andra kommandot.

Problemet löses genom att skapa en beständig session på fjärrdatorn och sedan köra båda kommandona i samma session.

Cmdleten New-PSSession skapar en beständig session på datorn Server02 och sparar sessionen i variabeln $s . Raderna Invoke-Command som följer använder parametern Session för att köra båda kommandona i samma session. Eftersom båda kommandona körs i samma session förblir $p värdet aktivt.

Exempel 5: Anropa ett kommando med ett skriptblock som lagras i en variabel

Det här exemplet visar hur du kör ett kommando som lagras som ett skriptblock i en variabel. När skriptblocket sparas i en variabel kan du ange variabeln som värdet för parametern ScriptBlock .

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

Variabeln $command lagrar kommandot Get-WinEvent som är formaterat som ett skriptblock. Invoke-Command Kör kommandot som lagras i $command på fjärrdatorerna S1 och S2.

Exempel 6: Kör ett enda kommando på flera datorer

Det här exemplet visar hur du använder Invoke-Command för att köra ett enda kommando på flera datorer.

$parameters = @{
  ComputerName      = 'Server01', 'Server02', 'TST-0143', 'localhost'
  ConfigurationName = 'MySession.PowerShell'
  ScriptBlock       = { Get-WinEvent -LogName PowerShellCore/Operational }
}
Invoke-Command @parameters

Parametern ComputerName anger en kommaavgränsad lista med datornamn. Listan över datorer innehåller värdet localhost, som representerar den lokala datorn. Parametern ConfigurationName anger en alternativ sessionskonfiguration. Parametern ScriptBlock körs Get-WinEvent för att hämta händelseloggarna PowerShellCore/Operational från varje dator.

Exempel 7: Hämta versionen av värdprogrammet på flera datorer

Det här exemplet hämtar versionen av PowerShell-värdprogrammet som körs på 200 fjärrdatorer.

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

Eftersom endast ett kommando körs behöver du inte skapa beständiga anslutningar till var och en av datorerna. I stället använder kommandot parametern ComputerName för att ange datorerna. För att ange datorerna använder den cmdleten Get-Content för att hämta innehållet i filen Machine.txt, en fil med datornamn.

Cmdleten Invoke-Command kör ett Get-Host kommando på fjärrdatorerna. Den använder punkt notation för att hämta egenskapen Version för PowerShell-värden.

Dessa kommandon körs en i taget. När kommandona har slutförts sparas utdata från kommandona från alla datorer i variabeln $version . Utdata innehåller namnet på den dator som data kommer från.

Exempel 8: Kör ett bakgrundsjobb på flera fjärrdatorer

Det här exemplet kör ett kommando på två fjärrdatorer. Kommandot Invoke-Command använder parametern AsJob så att kommandot körs som ett bakgrundsjobb. Kommandona körs på fjärrdatorerna, men jobbet finns på den lokala datorn. Resultaten överförs till den lokala datorn.

$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

Cmdleten New-PSSession skapar sessioner på fjärrdatorerna Server01 och Server02. Cmdleten Invoke-Command kör ett bakgrundsjobb i var och en av sessionerna. Kommandot använder parametern AsJob för att köra kommandot som ett bakgrundsjobb. Det här kommandot returnerar ett jobbobjekt som innehåller två underordnade jobbobjekt, ett för vart och ett av jobben som körs på de två fjärrdatorerna.

Kommandot Get-Job sparar jobbobjektet i variabeln $j . Variabeln $j skickas sedan till cmdleten Format-List för att visa alla egenskaper för jobbobjektet i en lista. Det sista kommandot hämtar resultatet av jobben. Det skickar jobbobjektet till $j cmdleten Receive-Job och lagrar resultatet i variabeln $results .

Exempel 9: Inkludera lokala variabler i en kommandokörning på en fjärrdator

Det här exemplet visar hur du inkluderar värdena för lokala variabler i en kommandokörning på en fjärrdator. Kommandot använder omfångsmodifieraren Using för att identifiera en lokal variabel i ett fjärrkommando. Som standard antas alla variabler definieras i fjärrsessionen. Omfångsmodifieraren Using introducerades i PowerShell 3.0. Mer information om omfångsmodifieraren Using finns i about_Remote_Variables och about_Scopes.

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

Variabeln $Log lagrar namnet på händelseloggen, PowerShellCore/Operational. Cmdleten Invoke-Command körs Get-WinEvent på Server01 för att hämta de tio senaste händelserna från händelseloggen. Värdet för LogName-parametern är variabeln $Log som prefixeras av Using omfångsmodifieraren för att indikera att den skapades i den lokala sessionen, inte i fjärrsessionen.

Exempel 10: Dölj datornamnet

Det här exemplet visar effekten av att använda parametern HideComputerName för Invoke-Command. HideComputerName ändrar inte det objekt som den här cmdleten returnerar. Den ändrar bara visningen. Du kan fortfarande använda cmdletarna Format för att visa egenskapen PsComputerName för något av de berörda objekten.

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

De första två kommandona använder Invoke-Command för att köra ett Get-Process kommando för PowerShell-processen. Utdata från det första kommandot innehåller egenskapen PsComputerName , som innehåller namnet på den dator där kommandot kördes. Utdata från det andra kommandot, som använder HideComputerName, innehåller inte kolumnen PsComputerName .

Exempel 11: Använd nyckelordet Param i ett skriptblock

Nyckelordet Param och parametern ArgumentList används för att skicka variabelvärden till namngivna parametrar i ett skriptblock. I det här exemplet visas filnamn som börjar med bokstaven a och har .pdf tillägget.

Mer information om nyckelordet finns i 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 använder parametern ScriptBlock som definierar två variabler och $param1 $param2. Get-ChildItem använder de namngivna parametrarna, Namn och Inkludera med variabelnamnen. ArgumentList skickar värdena till variablerna.

Exempel 12: Använd den $args automatiska variabeln i ett skriptblock

Den $args automatiska variabeln och parametern ArgumentList används för att skicka matrisvärden till parameterpositioner i ett skriptblock. I det här exemplet visas en servers kataloginnehåll i .txt filer. Parametern Get-ChildItem Path är position 0 och filterparametern är position 1.

Mer information om variabeln finns i $args 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 använder en ScriptBlock-parameter och Get-ChildItem anger matrisvärdena $args[0] och $args[1] . ArgumentList skickar $args matrisvärdena till parameterpositionerna Get-ChildItem för Sökväg och Filter.

Exempel 13: Kör ett skript på alla datorer som anges i en textfil

I det här exemplet används cmdleten Invoke-Command för att köra skriptet Sample.ps1 på alla datorer som anges i Servers.txt filen. Kommandot använder parametern FilePath för att ange skriptfilen. Med det här kommandot kan du köra skriptet på fjärrdatorerna, även om skriptfilen inte är tillgänglig för fjärrdatorerna.

$parameters = @{
    ComputerName = (Get-Content Servers.txt)
    FilePath     = 'C:\Scripts\Sample.ps1'
    ArgumentList = 'Process', 'Service'
}
Invoke-Command @parameters

När du skickar kommandot kopieras innehållet i Sample.ps1 filen till ett skriptblock och skriptblocket körs på var och en av fjärrdatorerna. Den här proceduren motsvarar att använda parametern ScriptBlock för att skicka innehållet i skriptet.

Exempel 14: Kör ett kommando på en fjärrdator med hjälp av en URI

Det här exemplet visar hur du kör ett kommando på en fjärrdator som identifieras av en URI (Uniform Resource Identifier). Det här exemplet kör ett Set-Mailbox kommando på en fjärransluten Exchange-server.

$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

Den första raden använder cmdleten Get-Credential för att lagra Windows Live ID-autentiseringsuppgifter i variabeln $LiveCred . PowerShell uppmanar användaren att ange autentiseringsuppgifter för Windows Live ID.

Variabeln $parameters är en hash-tabell som innehåller de parametrar som ska skickas till cmdleten Invoke-Command . Cmdleten Invoke-Command kör ett Set-Mailbox kommando med microsoft.Exchange-sessionskonfigurationen. Parametern ConnectionURI anger URL:en för Exchange-serverslutpunkten. Parametern Credential anger de autentiseringsuppgifter som lagras i variabeln $LiveCred . Parametern AuthenticationMechanism anger användningen av grundläggande autentisering. Parametern ScriptBlock anger ett skriptblock som innehåller kommandot.

Exempel 15: Använd ett sessionsalternativ

Det här exemplet visar hur du skapar och använder en SessionOption-parameter .

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

Cmdleten New-PSSessionOption skapar ett sessionsalternativobjekt som gör att fjärrslutet inte verifierar certifikatutfärdare, kanoniskt namn och återkallningslistor när den inkommande HTTPS-anslutningen utvärderas. SessionOption-objektet sparas i variabeln$so.

Kommentar

Det är praktiskt att inaktivera dessa kontroller för felsökning, men uppenbarligen inte säkert.

Cmdleten Invoke-Command kör ett Get-HotFix kommando via fjärranslutning. Parametern SessionOption får variabeln $so .

Exempel 16: Hantera URI-omdirigering i ett fjärrkommando

Det här exemplet visar hur du använder parametrarna AllowRedirection och SessionOption för att hantera URI-omdirigering i ett fjärrkommando.

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

Cmdleten New-PSSessionOption skapar ett PSSessionOption-objekt som sparas i variabeln $max . Kommandot använder parametern MaximumRedirection för att ange egenskapen MaximumConnectionRedirectionCount för PSSessionOption-objektet till 1.

Cmdleten Invoke-Command kör ett Get-Mailbox kommando på en fjärransluten Microsoft Exchange Server. Parametern AllowRedirection ger explicit behörighet att omdirigera anslutningen till en alternativ slutpunkt. Parametern SessionOption använder sessionsobjektet som lagras i variabeln $max .

Om fjärrdatorn som anges av ConnectionURI returnerar ett omdirigeringsmeddelande omdirigerar PowerShell anslutningen, men om det nya målet returnerar ett annat omdirigeringsmeddelande överskrids omdirigeringsvärdet 1 och Invoke-Command returnerar ett icke-avslutande fel.

Exempel 17: Få åtkomst till en nätverksresurs i en fjärrsession

Det här exemplet visar hur du kommer åt en nätverksresurs från en fjärrsession. Tre datorer används för att demonstrera exemplet. Server01 är den lokala datorn, Server02 är fjärrdatorn och Net03 innehåller nätverksresursen. Server01 ansluter till Server02 och sedan gör Server02 ett andra hopp till Net03 för att få åtkomst till nätverksresursen. Mer information om hur PowerShell-fjärrkommunikation stöder hopp mellan datorer finns i Göra det andra hoppet i PowerShell-fjärrkommunikation.

Den nödvändiga CredSSP-delegeringen (CredSSP) är aktiverad i klientinställningarna på den lokala datorn och i tjänstinställningarna på fjärrdatorn. Om du vill köra kommandona i det här exemplet måste du vara medlem i gruppen Administratörer på den lokala datorn och fjärrdatorn.

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

Cmdleten Enable-WSManCredSSP aktiverar CredSSP-delegering från den lokala Server01-datorn till server02-fjärrdatorn. Parametern Roll anger Klienten för att konfigurera credSSP-klientinställningen på den lokala datorn.

New-PSSession skapar ett PSSession-objekt för Server02 och lagrar objektet i variabeln $s .

Cmdleten Invoke-Command använder variabeln $s för att ansluta till fjärrdatorn Server02. Parametern ScriptBlock körs Enable-WSManCredSSP på fjärrdatorn. Parametern Roll anger Server för att konfigurera credSSP-serverinställningen på fjärrdatorn.

Variabeln $parameters innehåller parametervärdena för att ansluta till nätverksresursen. Cmdleten Invoke-Command kör ett Get-Item kommando i sessionen i $s. Det här kommandot hämtar ett skript från nätverksresursen \\Net03\Scripts . Kommandot använder parametern Autentisering med värdet CredSSP och parametern Credential med värdet Domain01\Admin01.

Exempel 18: Starta skript på många fjärrdatorer

Det här exemplet kör ett skript på mer än hundra datorer. För att minimera påverkan på den lokala datorn ansluter den till varje dator, startar skriptet och kopplar sedan från varje dator. Skriptet fortsätter att köras i de frånkopplade sessionerna.

$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

Kommandot använder Invoke-Command för att köra skriptet. Värdet för parametern ComputerName är ett Get-Content kommando som hämtar namnen på fjärrdatorerna från en textfil. Parametern InDisconnectedSession kopplar från sessionerna så snart kommandot startas. Värdet för Parametern FilePath är skriptet som Invoke-Command körs på varje dator.

Värdet för SessionOption är en hash-tabell. Värdet OutputBufferingMode är inställt på Drop och värdet IdleTimeout är inställt på 12 timmar.

Använd cmdleten Receive-PSSession för att hämta resultatet av kommandon och skript som körs i frånkopplade sessioner.

Exempel 19: Kör ett kommando på en fjärrdator med hjälp av SSH

Det här exemplet visar hur du kör ett kommando på en fjärrdator med secure shell (SSH). Om SSH har konfigurerats på fjärrdatorn för att fråga efter lösenord får du en lösenordsprompt. Annars måste du använda SSH-nyckelbaserad användarautentisering.

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

Exempel 20: Kör ett kommando på en fjärrdator med hjälp av SSH och ange en användarautentiseringsnyckel

Det här exemplet visar hur du kör ett kommando på en fjärrdator med hjälp av SSH och anger en nyckelfil för användarautentisering. Du uppmanas inte att ange ett lösenord om inte nyckelautentiseringen misslyckas och fjärrdatorn har konfigurerats för att tillåta grundläggande lösenordsautentisering.

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

Exempel 21: Kör en skriptfil på flera fjärrdatorer med SSH som jobb

Det här exemplet visar hur du kör en skriptfil på flera fjärrdatorer med hjälp av SSH och parameteruppsättningen SSHConnection . Parametern SSHConnection tar en matris med hash-tabeller som innehåller anslutningsinformation för varje dator. Det här exemplet kräver att mål-fjärrdatorerna har SSH konfigurerat för att stödja nyckelbaserad användarautentisering.

$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

Exempel 22: Ansluta till en fjärr-SSH-session med SSH-alternativ

Det här exemplet visar hur du kör en skriptfil på en Linux-baserad fjärrdator med hjälp av SSH-alternativ. Parametern Alternativ tar en hashtabell med värden som skickas som alternativ till det underliggande ssh kommandot den etablerade anslutningen till fjärrsystemet.

$options = @{
    Port=22
    User = 'UserB'
    Host = 'LinuxServer5'
}
$results = Invoke-Command -FilePath c:\Scripts\CollectEvents.ps1 -KeyFilePath '/Users/UserB/id_rsa' -Options $options

Parametrar

-AllowRedirection

Tillåter omdirigering av den här anslutningen till en alternativ URI (Uniform Resource Identifier).

När du använder parametern ConnectionURI kan fjärrmålet returnera en instruktion för att omdirigera till en annan URI. Som standard omdirigerar Inte PowerShell anslutningar, men du kan använda den här parametern för att tillåta att den omdirigerar anslutningen.

Du kan också begränsa antalet gånger anslutningen omdirigeras genom att ändra sessionsalternativvärdet MaximumConnectionRedirectionCount . Använd parametern MaximumRedirection för cmdleten New-PSSessionOption eller ange egenskapen MaximumConnectionRedirectionCount för inställningsvariabeln$PSSessionOption. Standardvärdet är 5.

Typ:SwitchParameter
Position:Named
Standardvärde:False
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-ApplicationName

Anger programnamnssegmentet för anslutnings-URI:n. Använd den här parametern för att ange programnamnet när du inte använder parametern ConnectionURI i kommandot .

Standardvärdet är värdet för $PSSessionApplicationName inställningsvariabeln på den lokala datorn. Om den här inställningsvariabeln inte har definierats är standardvärdet WSMAN. Det här värdet är lämpligt för de flesta användningsområden. Mer information finns i about_Preference_Variables.

WinRM-tjänsten använder programnamnet för att välja en lyssnare som ska betjäna anslutningsbegäran. Värdet för den här parametern ska matcha värdet för egenskapen URLPrefix för en lyssnare på fjärrdatorn.

Typ:String
Position:Named
Standardvärde:$PSSessionApplicationName if set on the local computer, otherwise WSMAN
Obligatorisk:False
Godkänn pipeline-indata:True
Godkänn jokertecken:False

-ArgumentList

Tillhandahåller värdena för parametrarna för scriptblock. Parametrarna i skriptblocket skickas efter position från matrisvärdet som anges till ArgumentList. Detta kallas för matrissplattning. Mer information om beteendet för ArgumentList finns i about_Splatting.

Typ:Object[]
Alias:Args
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-AsJob

Anger att den här cmdleten kör kommandot som ett bakgrundsjobb på en fjärrdator. Använd den här parametern för att köra kommandon som tar lång tid att slutföra.

När du använder parametern AsJob returnerar kommandot ett objekt som representerar jobbet och visar sedan kommandotolken. Du kan fortsätta att arbeta i sessionen medan jobbet är klart. Använd cmdletarna för *-Job att hantera jobbet. Använd cmdleten för att hämta jobbresultatet Receive-Job .

Parametern AsJob liknar att använda cmdleten Invoke-Command för att fjärrköra en Start-Job cmdlet. Men med AsJob skapas jobbet på den lokala datorn, även om jobbet körs på en fjärrdator. Resultatet av fjärrjobbet returneras automatiskt till den lokala datorn.

Mer information om PowerShell-bakgrundsjobb finns i about_Jobs och about_Remote_Jobs.

Typ:SwitchParameter
Position:Named
Standardvärde:False
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-Authentication

Anger den mekanism som används för att autentisera användarens autentiseringsuppgifter. CredSSP-autentisering är endast tillgängligt i Windows Vista, Windows Server 2008 och senare versioner av Windows-operativsystemet.

Godkända värden för den här parametern är följande:

  • Standardvärde
  • Grundläggande
  • Credssp
  • Smälta
  • Kerberos
  • Förhandla
  • NegotiateWithImplicitCredential

Standardvärdet är Standard.

Mer information om värdena för den här parametern finns i AuthenticationMechanism Enumeration.

Varning

CredSSP-autentisering (CredSSP), där användarens autentiseringsuppgifter skickas till en fjärrdator som ska autentiseras, är utformad för kommandon som kräver autentisering på mer än en resurs, till exempel åtkomst till en fjärrnätverksresurs. Den här mekanismen ökar säkerhetsrisken för fjärråtgärden. Om fjärrdatorn komprometteras kan de autentiseringsuppgifter som skickas till den användas för att styra nätverkssessionen. Mer information finns i Autentiseringssäkerhetssupportleverantör.

Typ:AuthenticationMechanism
Godkända värden:Basic, Default, Credssp, Digest, Kerberos, Negotiate, NegotiateWithImplicitCredential
Position:Named
Standardvärde:Default
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-CertificateThumbprint

Anger det digitala offentliga nyckelcertifikatet (X509) för ett användarkonto som har behörighet att ansluta till den frånkopplade sessionen. Ange certifikatets tumavtryck.

Certifikat används i klientcertifikatbaserad autentisering. De kan endast mappas till lokala användarkonton och de fungerar inte med domänkonton.

Om du vill hämta ett tumavtryck för certifikat använder du ett Get-Item eller Get-ChildItem -kommando i PowerShell Cert: -enheten.

Typ:String
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-ComputerName

Anger de datorer som kommandot körs på. Standard är den lokala datorn.

När du använder parametern ComputerName skapar PowerShell en tillfällig anslutning som endast används för att köra det angivna kommandot och sedan stängs. Om du behöver en beständig anslutning använder du parametern Session .

Ange NETBIOS-namn, IP-adress eller fullständigt domännamn för en eller flera datorer i en kommaavgränsad lista. Om du vill ange den lokala datorn skriver du datornamnet, localhost eller en punkt (.).

Om du vill använda en IP-adress i värdet för ComputerName måste kommandot innehålla parametern Credential . Datorn måste konfigureras för HTTPS-transporten, annars måste IP-adressen för fjärrdatorn ingå i den lokala datorns WinRM TrustedHosts-lista . Instruktioner för att lägga till ett datornamn i listan TrustedHosts finns i Så här lägger du till en dator i listan Betrodd värd.

Om du vill inkludera den lokala datorn i värdet ComputerName i Windows Vista och senare versioner av Windows-operativsystemet måste du köra PowerShell med alternativet Kör som administratör .

Typ:String[]
Alias:Cn
Position:0
Standardvärde:Local computer
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-ConfigurationName

Anger sessionskonfigurationen som används för den nya PSSessionen.

Ange ett konfigurationsnamn eller den fullständigt kvalificerade resurs-URI:n för en sessionskonfiguration. Om du bara anger konfigurationsnamnet förbereds följande schema-URI: http://schemas.microsoft.com/PowerShell.

När den används med SSH anger den här parametern det undersystem som ska användas på målet enligt definitionen i sshd_config. Standardvärdet för SSH är powershell undersystemet.

Sessionskonfigurationen för en session finns på fjärrdatorn. Om den angivna sessionskonfigurationen inte finns på fjärrdatorn misslyckas kommandot.

Standardvärdet är värdet för $PSSessionConfigurationName inställningsvariabeln på den lokala datorn. Om den här inställningsvariabeln inte har angetts är standardvärdet Microsoft.PowerShell. Mer information finns i about_Preference_Variables.

Typ:String
Position:Named
Standardvärde:$PSSessionConfigurationName if set on the local computer, otherwise Microsoft.PowerShell
Obligatorisk:False
Godkänn pipeline-indata:True
Godkänn jokertecken:False

-ConnectingTimeout

Anger hur lång tid i millisekunder som tillåts för den första SSH-anslutningen att slutföras. Om anslutningen inte slutförs inom den angivna tiden returneras ett fel.

Den här parametern introducerades i PowerShell 7.2

Typ:Int32
Position:Named
Standardvärde:Unlimited
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-ConnectionUri

Anger en URI (Uniform Resource Identifier) som definierar sessionens anslutningsslutpunkt. URI:n måste vara fullständigt kvalificerad.

Formatet för den här strängen är följande:

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

Standardvärdet är följande:

http://localhost:5985/WSMAN

Om du inte anger en anslutnings-URI kan du använda parametrarna UseSSL och Port för att ange anslutnings-URI-värdena.

Giltiga värden för transportsegmentet för URI:n är HTTP och HTTPS. Om du anger en anslutnings-URI med ett transportsegment, men inte anger någon port, skapas sessionen med standardportarna: 80 för HTTP och 443 för HTTPS. Om du vill använda standardportarna för PowerShell-fjärrkommunikation anger du port 5985 för HTTP eller 5986 för HTTPS.

Om måldatorn omdirigerar anslutningen till en annan URI förhindrar PowerShell omdirigeringen om du inte använder parametern AllowRedirection i kommandot.

Typ:Uri[]
Alias:URI, CU
Position:0
Standardvärde:http://localhost:5985/WSMAN
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-ContainerId

Anger en matris med container-ID:t.

Typ:String[]
Position:Named
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:True
Godkänn jokertecken:False

-Credential

Anger ett användarkonto som har behörighet att utföra den här åtgärden. Standard är den aktuella användaren.

Ange ett användarnamn, till exempel User01 eller Domain01\User01, eller ange ett PSCredential-objekt som genereras av cmdleten Get-Credential . Om du skriver ett användarnamn uppmanas du att ange lösenordet.

Autentiseringsuppgifter lagras i ett PSCredential-objekt och lösenordet lagras som en SecureString.

Kommentar

Mer information om SecureString-dataskydd finns i Hur säker är SecureString?.

Typ:PSCredential
Position:Named
Standardvärde:Current user
Obligatorisk:False
Godkänn pipeline-indata:True
Godkänn jokertecken:False

-EnableNetworkAccess

Anger att den här cmdleten lägger till en interaktiv säkerhetstoken till loopback-sessioner. Med den interaktiva token kan du köra kommandon i loopback-sessionen som hämtar data från andra datorer. Du kan till exempel köra ett kommando i sessionen som kopierar XML-filer från en fjärrdator till den lokala datorn.

En loopback-session är en PSSession som kommer från och slutar på samma dator. Om du vill skapa en loopback-session utelämnar du parametern ComputerName eller anger dess värde till punkt (.), localhost eller namnet på den lokala datorn.

Som standard skapas loopback-sessioner med hjälp av en nätverkstoken, vilket kanske inte ger tillräcklig behörighet för att autentisera till fjärrdatorer.

Parametern EnableNetworkAccess gäller endast i loopback-sessioner. Om du använder EnableNetworkAccess när du skapar en session på en fjärrdator lyckas kommandot, men parametern ignoreras.

Du kan tillåta fjärråtkomst i en loopback-session med credSSP-värdet för parametern Autentisering, som delegerar sessionsautentiseringsuppgifterna till andra datorer.

För att skydda datorn från skadlig åtkomst kan frånkopplade loopback-sessioner som har interaktiva token, som är de som skapats med EnableNetworkAccess, återanslutas endast från den dator där sessionen skapades. Frånkopplade sessioner som använder CredSSP-autentisering kan återanslutas från andra datorer. Mer information finns i Disconnect-PSSession.

Den här parametern introducerades i PowerShell 3.0.

Typ:SwitchParameter
Position:Named
Standardvärde:False
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-FilePath

Anger ett lokalt skript som den här cmdleten körs på en eller flera fjärrdatorer. Ange sökvägen och filnamnet för skriptet eller skicka en skriptsökväg till Invoke-Command. Skriptet måste finnas på den lokala datorn eller i en katalog som den lokala datorn kan komma åt. Använd ArgumentList för att ange parametrarnas värden i skriptet.

När du använder den här parametern konverterar PowerShell innehållet i den angivna skriptfilen till ett skriptblock, överför skriptblocket till fjärrdatorn och kör det på fjärrdatorn.

Typ:String
Alias:PSPath
Position:1
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-HideComputerName

Anger att denna cmdlet utelämnar datornamnet för varje objekt från utdatavisningen. Som standard visas namnet på den dator som genererade objektet i displayen.

Den här parametern påverkar endast utdatavisningen. Objektet ändras inte.

Typ:SwitchParameter
Alias:HCN
Position:Named
Standardvärde:False
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-HostName

Anger en matris med datornamn för en SSH-baserad anslutning (Secure Shell). Detta liknar parametern ComputerName förutom att anslutningen till fjärrdatorn görs med hjälp av SSH i stället för Windows WinRM.

Den här parametern introducerades i PowerShell 6.0.

Typ:String[]
Position:Named
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-InDisconnectedSession

Anger att den här cmdleten kör ett kommando eller skript i en frånkopplad session.

När du använder parametern Invoke-Command InDisconnectedSession skapar du en beständig session på varje fjärrdator, startar kommandot som anges av parametern ScriptBlock eller FilePath och kopplar sedan från sessionen. Kommandona fortsätter att köras i de frånkopplade sessionerna. Med InDisconnectedSession kan du köra kommandon utan att upprätthålla en anslutning till fjärrsessionerna. Eftersom sessionen är frånkopplad innan några resultat returneras ser InDisconnectedSession till att alla kommandoresultat returneras till den återanslutna sessionen i stället för att delas upp mellan sessioner.

Du kan inte använda InDisconnectedSession med parametern Session eller parametern AsJob.

Kommandon som använder InDisconnectedSession returnerar ett PSSession-objekt som representerar den frånkopplade sessionen. De returnerar inte kommandoutdata. Om du vill ansluta till den frånkopplade sessionen använder du Connect-PSSession cmdletarna eller Receive-PSSession . Använd cmdleten Receive-PSSession för att hämta resultatet av kommandon som kördes i sessionen. Om du vill köra kommandon som genererar utdata i en frånkopplad session anger du värdet för sessionsalternativet OutputBufferingMode till Släpp. Om du tänker ansluta till den frånkopplade sessionen anger du tidsgränsen för inaktivitet i sessionen så att den ger tillräckligt med tid för att ansluta innan du tar bort sessionen.

Du kan ange utdatabuffertningsläget och tidsgränsen för inaktivitet i parametern SessionOption eller i inställningsvariabeln $PSSessionOption . Mer information om sessionsalternativ finns i New-PSSessionOption och about_Preference_Variables.

Mer information om funktionen Frånkopplade sessioner finns i about_Remote_Disconnected_Sessions.

Den här parametern introducerades i PowerShell 3.0.

Typ:SwitchParameter
Alias:Disconnected
Position:Named
Standardvärde:False
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-InputObject

Anger indata till kommandot. Ange en variabel som innehåller objekten eller skriv ett kommando eller uttryck som hämtar objekten.

När du använder parametern InputObject använder du den $Input automatiska variabeln i värdet för parametern ScriptBlock för att representera indataobjekten.

Typ:PSObject
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:True
Godkänn jokertecken:False

-JobName

Anger ett eget namn för bakgrundsjobbet. Som standard heter Job<n>jobben , där <n> är ett ordningstal.

Om du använder parametern JobName i ett kommando körs kommandot som ett jobb och Invoke-Command returnerar ett jobbobjekt, även om du inte inkluderar AsJob i kommandot .

Mer information om PowerShell-bakgrundsjobb finns i about_Jobs.

Typ:String
Position:Named
Standardvärde:Job<n>
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-KeyFilePath

Anger en nyckelfilsökväg som används av Secure Shell (SSH) för att autentisera en användare på en fjärrdator.

Med SSH kan användarautentisering utföras via privata och offentliga nycklar som ett alternativ till grundläggande lösenordsautentisering. Om fjärrdatorn har konfigurerats för nyckelautentisering kan den här parametern användas för att ange nyckeln som identifierar användaren.

Den här parametern introducerades i PowerShell 6.0.

Typ:String
Alias:IdentityFilePath
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-NoNewScope

Anger att den här cmdleten kör det angivna kommandot i det aktuella omfånget. Kör som standard Invoke-Command kommandon i sitt eget omfång.

Den här parametern är endast giltig i kommandon som körs i den aktuella sessionen, d.v.s. kommandon som utelämnar både parametrarna ComputerName och Session .

Den här parametern introducerades i PowerShell 3.0.

Typ:SwitchParameter
Position:Named
Standardvärde:False
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-Options

Anger en hashtabell med SSH-alternativ som används vid anslutning till en fjärr-SSH-baserad session. De möjliga alternativen är alla värden som stöds av den Unix-baserade versionen av ssh-kommandot .

Alla värden som uttryckligen skickas av parametrar har företräde framför värden som skickas i hashtabellen Alternativ . Om du till exempel använder portparametern åsidosätts alla Port nyckel/värde-par som skickas i hashtabellen Alternativ .

Den här parametern lades till i PowerShell 7.3.

Typ:Hashtable
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-Port

Anger nätverksporten på fjärrdatorn som används för det här kommandot. Om du vill ansluta till en fjärrdator måste fjärrdatorn lyssna på porten som anslutningen använder. Standardportarna är 5985 (WinRM-port för HTTP) och 5986 (WinRM-port för HTTPS).

Innan du använder en alternativ port konfigurerar du WinRM-lyssnaren på fjärrdatorn så att den lyssnar på den porten. Om du vill konfigurera lyssnaren skriver du följande två kommandon i PowerShell-prompten:

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

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

Använd inte portparametern om du inte måste. Porten som anges i kommandot gäller för alla datorer eller sessioner där kommandot körs. En alternativ portinställning kan förhindra att kommandot körs på alla datorer.

Typ:Int32
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-RemoteDebug

Används för att köra det anropade kommandot i felsökningsläge i powershell-fjärrsessionen.

Typ:SwitchParameter
Position:Named
Standardvärde:False
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-RunAsAdministrator

Anger att den här cmdleten anropar ett kommando som administratör.

Typ:SwitchParameter
Position:Named
Standardvärde:False
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-ScriptBlock

Anger vilka kommandon som ska köras. Omslut kommandona i klammerparenteser ({ }) för att skapa ett skriptblock. När du använder Invoke-Command för att fjärrköra ett kommando utvärderas alla variabler i kommandot på fjärrdatorn.

Kommentar

Parametrar för scriptblock kan bara skickas in från ArgumentList efter position. Det går inte att skicka växelparametrar efter position. Om du behöver en parameter som fungerar som en SwitchParameter-typ använder du en boolesk typ i stället.

Typ:ScriptBlock
Alias:Command
Position:0
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-Session

Anger en matris med sessioner där den här cmdleten kör kommandot. Ange en variabel som innehåller PSSession-objekt eller ett kommando som skapar eller hämtar PSSession-objekt, till exempel ett New-PSSession eller Get-PSSession ett kommando.

När du skapar en PSSession upprättar PowerShell en beständig anslutning till fjärrdatorn. Använd en PSSession för att köra en serie relaterade kommandon som delar data. Om du vill köra ett enda kommando eller en serie orelaterade kommandon använder du parametern ComputerName . Mer information finns i about_PSSessions.

Typ:PSSession[]
Position:0
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-SessionName

Anger ett eget namn för en frånkopplad session. Du kan använda namnet för att referera till sessionen i efterföljande kommandon, till exempel ett Get-PSSession kommando. Den här parametern är endast giltig med parametern InDisconnectedSession .

Den här parametern introducerades i PowerShell 3.0.

Typ:String[]
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-SessionOption

Anger avancerade alternativ för sessionen. Ange ett SessionOption-objekt , till exempel ett objekt som du skapar med hjälp av cmdleten New-PSSessionOption eller en hash-tabell där nycklarna är sessionsalternativnamn och värdena är sessionsalternativvärden.

Kommentar

Om du anger en hashtable för SessionOption konverterar PowerShell hashtable-objektet till ett System.Management.Autiomation.Remoting.PSSessionOption-objekt . Värdena för nycklar som anges i hashtabellen omvandlas till objektets matchande egenskap. Detta fungerar annorlunda än att anropa New-PSSessionOption. Till exempel konverterar Värdena för System.TimeSpan för timeout-egenskaperna, till exempel IdleTimeout, ett heltalsvärde till tick i stället för millisekunder. Mer information om PSSessionOption-objektet och dess egenskaper finns i PSSessionOption

Standardvärdena för alternativen bestäms av värdet för $PSSessionOption inställningsvariabeln, om den har angetts. Annars upprättas standardvärdena av de alternativ som anges i sessionskonfigurationen.

Sessionsalternativvärdena har företräde framför standardvärden för sessioner som anges i inställningsvariabeln $PSSessionOption och i sessionskonfigurationen. De har dock inte företräde framför maximala värden, kvoter eller gränser som anges i sessionskonfigurationen.

En beskrivning av sessionsalternativen som innehåller standardvärdena finns i New-PSSessionOption. Information om inställningsvariabeln finns i $PSSessionOption about_Preference_Variables. För ytterligare information om sessionskonfigurationer, se about_Session_Configurations.

Typ:PSSessionOption
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-SSHConnection

Den här parametern tar en matris med hash-tabeller där varje hashtabell innehåller en eller flera anslutningsparametrar som behövs för att upprätta en SSH-anslutning (Secure Shell). Parametern SSHConnection är användbar för att skapa flera sessioner där varje session kräver olika anslutningsinformation.

Hashtable har följande medlemmar:

  • ComputerName (eller HostName)
  • Port
  • UserName
  • KeyFilePath (eller IdentityFilePath)

ComputerName (eller HostName) är det enda nyckel/värde-par som krävs.

Den här parametern introducerades i PowerShell 6.0.

Typ:Hashtable[]
Position:Named
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-SSHTransport

Anger att fjärranslutningen upprättas med hjälp av Secure Shell (SSH).

Som standard använder PowerShell Windows WinRM för att ansluta till en fjärrdator. Den här växeln tvingar PowerShell att använda parametern HostName för att upprätta en SSH-baserad fjärranslutning.

Den här parametern introducerades i PowerShell 6.0.

Typ:SwitchParameter
Godkända värden:true
Position:Named
Standardvärde:False
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-Subsystem

Anger det SSH-undersystem som används för den nya PSSessionen.

Detta anger det undersystem som ska användas på målet enligt definitionen i sshd_config. Undersystemet startar en specifik version av PowerShell med fördefinierade parametrar. Om det angivna undersystemet inte finns på fjärrdatorn misslyckas kommandot.

Om den här parametern inte används är powershell standardvärdet undersystemet.

Typ:String
Position:Named
Standardvärde:powershell
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-ThrottleLimit

Anger det maximala antalet samtidiga anslutningar som kan upprättas för att köra det här kommandot. Om du utelämnar den här parametern eller anger värdet 0 används standardvärdet 32.

Begränsningsgränsen gäller endast för det aktuella kommandot, inte för sessionen eller på datorn.

Typ:Int32
Position:Named
Standardvärde:32
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-UserName

Anger användarnamnet för kontot som används för att köra ett kommando på fjärrdatorn. Användarautentiseringsmetoden beror på hur Secure Shell (SSH) konfigureras på fjärrdatorn.

Om SSH har konfigurerats för grundläggande lösenordsautentisering uppmanas du att ange användarlösenordet.

Om SSH har konfigurerats för nyckelbaserad användarautentisering kan en nyckelfilsökväg anges via keyfilePath-parametern och ingen lösenordsprompt inträffar. Om klientanvändarnyckelfilen finns på en känd SSH-plats behövs inte parametern KeyFilePath för nyckelbaserad autentisering, och användarautentisering sker automatiskt baserat på användarnamnet. Mer information finns i din plattforms SSH-dokumentation om nyckelbaserad användarautentisering.

Det här är inte en obligatorisk parameter. Om parametern UserName inte har angetts används det aktuella inloggade användarnamnet för anslutningen.

Den här parametern introducerades i PowerShell 6.0.

Typ:String
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-UseSSL

Anger att denna cmdlet använder SSL-protokollet (Secure Sockets Layer) för att upprätta en anslutning till fjärrdatorn. Som standard används inte SSL.

WS-Management krypterar allt PowerShell-innehåll som överförs via nätverket. Parametern UseSSL är ett ytterligare skydd som skickar data över en HTTPS i stället för HTTP.

Om du använder den här parametern, men SSL inte är tillgängligt på porten som används för kommandot, misslyckas kommandot.

Typ:SwitchParameter
Position:Named
Standardvärde:False
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-VMId

Anger en matris med ID:t för virtuella datorer.

Typ:Guid[]
Alias:VMGuid
Position:0
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:True
Godkänn jokertecken:False

-VMName

Anger en matris med namn på virtuella datorer.

Typ:String[]
Position:Named
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:True
Godkänn jokertecken:False

Indata

ScriptBlock

Du kan skicka ett kommando i ett skriptblock till Invoke-Command. Använd den $Input automatiska variabeln för att representera indataobjekten i kommandot.

Utdata

System.Management.Automation.PSRemotingJob

Om du använder parametern AsJob returnerar den här cmdleten ett jobbobjekt.

PSSession

Om du använder parametern InDisconnectedSession returnerar den här cmdleten ett PSSession-objekt .

Object

Som standard returnerar den här cmdleten utdata från det anropade kommandot, vilket är värdet för parametern ScriptBlock .

Kommentarer

PowerShell innehåller följande alias för Invoke-Command:

  • Alla plattformar:
    • icm

Om du vill använda parametern Invoke-Command ComputerName för att köra ett kommando på den lokala datorn måste du köra PowerShell med alternativet Kör som administratör i Windows Vista och senare versioner av Windows-operativsystemet.

När du kör kommandon på flera datorer ansluter PowerShell till datorerna i den ordning de visas i listan. Kommandoutdata visas dock i den ordning som de tas emot från fjärrdatorerna, vilket kan vara annorlunda.

Fel som uppstår från kommandot som Invoke-Command körs ingår i kommandoresultatet. Fel som skulle avsluta fel i ett lokalt kommando behandlas som icke-avslutande fel i ett fjärrkommando. Den här strategin ser till att avslutande fel på en dator inte stänger kommandot på alla datorer där den körs. Den här metoden används även när ett fjärrkommando körs på en enda dator.

Om fjärrdatorn inte finns i en domän som den lokala datorn litar på kanske datorn inte kan autentisera användarens autentiseringsuppgifter. Om du vill lägga till fjärrdatorn i listan över betrodda värdar i WS-Management använder du följande kommando i providern WSMAN , där <Remote-Computer-Name> är namnet på fjärrdatorn:

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

När du kopplar från en PSSession med parametern InDisconnectedSession kopplas sessionstillståndet från och tillgängligheten är Ingen. Värdet för egenskapen State är relativt till den aktuella sessionen. Värdet Frånkopplad innebär att PSSession inte är ansluten till den aktuella sessionen. Det betyder dock inte att PSSession är frånkopplad från alla sessioner. Den kan vara ansluten till en annan session. Om du vill avgöra om du kan ansluta eller återansluta till sessionen använder du egenskapen Tillgänglighet .

Ett tillgänglighetsvärdeIngen anger att du kan ansluta till sessionen. Värdet Upptagen anger att du inte kan ansluta till PSSession eftersom den är ansluten till en annan session. Mer information om värdena för egenskapen State för sessioner finns i RunspaceState. Mer information om värdena för egenskapen Tillgänglighet för sessioner finns i RunspaceAvailability.

Parametrarna HostName och SSHConnection inkluderades från och med PowerShell 6.0. De lades till för att tillhandahålla PowerShell-fjärrkommunikation baserat på Secure Shell (SSH). PowerShell och SSH stöds på flera plattformar (Windows, Linux, macOS) och PowerShell-fjärrkommunikation fungerar på dessa plattformar där PowerShell och SSH installeras och konfigureras. Detta är separat från den tidigare Windows-fjärrkommunikationen som baseras på WinRM och många av WinRM-specifika funktioner och begränsningar gäller inte. Till exempel stöds inte WinRM-baserade kvoter, sessionsalternativ, anpassad slutpunktskonfiguration och funktioner för frånkoppling/återanslutning. Mer information om hur du konfigurerar PowerShell SSH-fjärrkommunikation finns i PowerShell-fjärrkommunikation via SSH.

Den ssh körbara filen hämtar konfigurationsdata från följande källor i följande ordning:

  1. kommandoradsalternativ
  2. användarens konfigurationsfil (~/.ssh/config)
  3. systemomfattande konfigurationsfil (/etc/ssh/ssh_config)

Följande cmdlet-parametrar mappas till ssh parametrar och alternativ:

Cmdlet-parameter ssh-parameter motsvarande ssh -o-alternativ
-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>

Alla värden som uttryckligen skickas av parametrar har företräde framför värden som skickas i hashtabellen Alternativ . Mer information om ssh_config filer finns i ssh_config(5).