Share via


Invoke-Command

Voert opdrachten uit op lokale en externe computers.

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>]
      [<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

De Invoke-Command cmdlet voert opdrachten uit op een lokale of externe computer en retourneert alle uitvoer van de opdrachten, inclusief fouten. Met één Invoke-Command opdracht kunt u opdrachten uitvoeren op meerdere computers.

Als u één opdracht wilt uitvoeren op een externe computer, gebruikt u de parameter ComputerName . Als u een reeks gerelateerde opdrachten wilt uitvoeren die gegevens delen, gebruikt u de New-PSSession cmdlet om een PSSession (een permanente verbinding) te maken op de externe computer en gebruikt u vervolgens de sessieparameter van Invoke-Command om de opdracht uit te voeren in de PSSession. Als u een opdracht wilt uitvoeren in een niet-verbonden sessie, gebruikt u de parameter InDisconnectedSession . Als u een opdracht wilt uitvoeren in een achtergrondtaak, gebruikt u de parameter AsJob .

U kunt ook op een lokale computer een Invoke-Command scriptblok uitvoeren als een opdracht. PowerShell voert het scriptblok onmiddellijk uit in een onderliggend bereik van het huidige bereik.

Invoke-Command Lees about_Remote voordat u opdrachten uitvoert op een externe computer.

Vanaf PowerShell 6.0 kunt u Secure Shell (SSH) gebruiken om verbinding te maken met en opdrachten op externe computers aan te roepen. SSH moet worden geïnstalleerd op de lokale computer en de externe computer moet worden geconfigureerd met een PowerShell SSH-eindpunt. Het voordeel van een externe PowerShell-sessie op basis van SSH is dat deze werkt op meerdere platforms (Windows, Linux, macOS). Voor een sessie op basis van SSH gebruikt u de parameters HostName of SSHConnection om de externe computer en relevante verbindingsgegevens op te geven. Zie Externe toegang van PowerShell via SSH voor meer informatie over het instellen van externe communicatie met PowerShell SSH.

Sommige codevoorbeelden gebruiken splatting om de lijnlengte te verminderen. Zie about_Splatting voor meer informatie.

Voorbeelden

Voorbeeld 1: Een script uitvoeren op een server

In dit voorbeeld wordt het Test.ps1 script uitgevoerd op de Server01-computer.

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

De FilePath-parameter geeft een script op dat zich op de lokale computer bevindt. Het script wordt uitgevoerd op de externe computer en de resultaten worden geretourneerd naar de lokale computer.

Voorbeeld 2: Een opdracht uitvoeren op een externe server

In dit voorbeeld wordt een Get-Culture opdracht uitgevoerd op de externe server01-computer.

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

Met de parameter ComputerName geeft u de naam van de externe computer op. De referentieparameter wordt gebruikt om de opdracht uit te voeren in de beveiligingscontext van Domain01\User01, een gebruiker die gemachtigd is om opdrachten uit te voeren. De parameter ScriptBlock geeft de opdracht op die moet worden uitgevoerd op de externe computer.

Als reactie vraagt PowerShell het wachtwoord en een verificatiemethode voor het User01-account aan. Vervolgens wordt de opdracht uitgevoerd op de Server01-computer en wordt het resultaat geretourneerd.

Voorbeeld 3: Een opdracht uitvoeren in een permanente verbinding

In dit voorbeeld wordt dezelfde Get-Culture opdracht uitgevoerd in een sessie, met behulp van een permanente verbinding, op de externe computer met de naam Server02.

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

De New-PSSession cmdlet maakt een sessie op de externe Server02-computer en slaat deze op in de $s variabele. Normaal gesproken maakt u een sessie alleen wanneer u een reeks opdrachten uitvoert op de externe computer.

De Invoke-Command cmdlet voert de Get-Culture opdracht uit op Server02. De sessieparameter geeft de sessie op die is opgeslagen in de $s variabele.

Als reactie voert PowerShell de opdracht uit in de sessie op de Server02-computer.

Voorbeeld 4: Een sessie gebruiken om een reeks opdrachten uit te voeren waarmee gegevens worden gedeeld

In dit voorbeeld worden de effecten van het gebruik van computernaam en sessieparameters van Invoke-Commandvergeleken. Het laat zien hoe u een sessie gebruikt om een reeks opdrachten uit te voeren die dezelfde gegevens delen.

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 eerste twee opdrachten gebruiken de computernaam parameter van Invoke-Command om opdrachten uit te voeren op de server02 externe computer. De eerste opdracht maakt gebruik van de Get-Process cmdlet om het PowerShell-proces op de externe computer op te halen en op te slaan in de $p variabele. Met de tweede opdracht wordt de waarde opgehaald van de eigenschap VirtualMemorySize van het PowerShell-proces.

Wanneer u de parameter ComputerName gebruikt, maakt PowerShell een nieuwe sessie om de opdracht uit te voeren. De sessie wordt gesloten wanneer de opdracht is voltooid. De $p variabele is gemaakt in één verbinding, maar deze bestaat niet in de verbinding die voor de tweede opdracht is gemaakt.

Het probleem wordt opgelost door een permanente sessie op de externe computer te maken en vervolgens beide opdrachten in dezelfde sessie uit te voeren.

De New-PSSession cmdlet maakt een permanente sessie op de computer Server02 en slaat de sessie op in de $s variabele. De Invoke-Command regels die volgen, gebruiken de sessieparameter om beide opdrachten in dezelfde sessie uit te voeren. Omdat beide opdrachten in dezelfde sessie worden uitgevoerd, blijft de $p waarde actief.

Voorbeeld 5: Een opdracht aanroepen met een scriptblok dat is opgeslagen in een variabele

In dit voorbeeld ziet u hoe u een opdracht uitvoert die is opgeslagen als een scriptblok in een variabele. Wanneer het scriptblok wordt opgeslagen in een variabele, kunt u de variabele opgeven als de waarde van de parameter ScriptBlock .

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

De $command variabele slaat de Get-WinEvent opdracht op die is opgemaakt als een scriptblok. De Invoke-Command voert de opdracht uit die is opgeslagen in $command op de externe S1- en S2-computers.

Voorbeeld 6: één opdracht uitvoeren op meerdere computers

In dit voorbeeld ziet u hoe Invoke-Command u één opdracht op meerdere computers uitvoert.

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

De parameter ComputerName geeft een door komma's gescheiden lijst met computernamen op. De lijst met computers bevat de localhost-waarde, die de lokale computer vertegenwoordigt. De parameter ConfigurationName geeft een alternatieve sessieconfiguratie op. De parameter ScriptBlock wordt uitgevoerd Get-WinEvent om de PowerShellCore-/operationele gebeurtenislogboeken van elke computer op te halen.

Voorbeeld 7: De versie van het hostprogramma op meerdere computers ophalen

In dit voorbeeld wordt de versie van het PowerShell-hostprogramma op 200 externe computers uitgevoerd.

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

Omdat er slechts één opdracht wordt uitgevoerd, hoeft u geen permanente verbindingen met alle computers te maken. In plaats daarvan gebruikt de opdracht de computernaam parameter om de computers aan te geven. Als u de computers wilt opgeven, wordt de Get-Content cmdlet gebruikt om de inhoud van het Machine.txt-bestand op te halen, een bestand met computernamen.

De Invoke-Command cmdlet voert een Get-Host opdracht uit op de externe computers. Er wordt een puntnotatie gebruikt om de eigenschap Version van de PowerShell-host op te halen.

Deze opdrachten worden één voor één uitgevoerd. Wanneer de opdrachten zijn voltooid, wordt de uitvoer van de opdrachten van alle computers opgeslagen in de $version variabele. De uitvoer bevat de naam van de computer waarvan de gegevens afkomstig zijn.

Voorbeeld 8: Een achtergrondtaak uitvoeren op verschillende externe computers

In dit voorbeeld wordt een opdracht uitgevoerd op twee externe computers. De Invoke-Command opdracht maakt gebruik van de parameter AsJob , zodat de opdracht wordt uitgevoerd als een achtergrondtaak. De opdrachten worden uitgevoerd op de externe computers, maar de taak bestaat op de lokale computer. De resultaten worden verzonden naar de lokale computer.

$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

De New-PSSession cmdlet maakt sessies op de externe computers Server01 en Server02. De Invoke-Command cmdlet voert een achtergrondtaak uit in elk van de sessies. De opdracht gebruikt de parameter AsJob om de opdracht uit te voeren als een achtergrondtaak. Met deze opdracht wordt een taakobject geretourneerd dat twee onderliggende taakobjecten bevat, één voor elk van de taken die op de twee externe computers worden uitgevoerd.

Met de Get-Job opdracht wordt het taakobject opgeslagen in de $j variabele. De $j variabele wordt vervolgens doorgesluisd naar de Format-List cmdlet om alle eigenschappen van het taakobject in een lijst weer te geven. Met de laatste opdracht worden de resultaten van de taken opgehaald. Het taakobject wordt doorverdeeld naar $j de Receive-Job cmdlet en de resultaten worden opgeslagen in de $results variabele.

Voorbeeld 9: lokale variabelen opnemen in een opdracht die wordt uitgevoerd op een externe computer

In dit voorbeeld ziet u hoe u de waarden van lokale variabelen opneemt in een opdracht die wordt uitgevoerd op een externe computer. De opdracht gebruikt de Using bereikaanpassing om een lokale variabele in een externe opdracht te identificeren. Standaard wordt ervan uitgegaan dat alle variabelen zijn gedefinieerd in de externe sessie. De Using wijziging van het bereik is geïntroduceerd in PowerShell 3.0. Zie about_Remote_Variables en about_Scopes voor meer informatie over Using de bereikaanpassing.

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

De $Log variabele slaat de naam van het gebeurtenislogboek, PowerShellCore/Operational, op. De Invoke-Command cmdlet wordt uitgevoerd Get-WinEvent op Server01 om de tien nieuwste gebeurtenissen op te halen uit het gebeurtenislogboek. De waarde van de parameter LogName is de $Log variabele die vooraf wordt gegaan door de Using wijzigingsfunctie van het bereik om aan te geven dat deze is gemaakt in de lokale sessie, niet in de externe sessie.

Voorbeeld 10: De computernaam verbergen

In dit voorbeeld ziet u het effect van het gebruik van de parameter HideComputerName van Invoke-Command. HideComputerName wijzigt het object dat deze cmdlet retourneert niet. Alleen de weergave wordt gewijzigd. U kunt nog steeds de format-cmdlets gebruiken om de eigenschap PsComputerName van een van de betrokken objecten weer te geven.

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

De eerste twee opdrachten worden gebruikt Invoke-Command om een Get-Process opdracht uit te voeren voor het PowerShell-proces. De uitvoer van de eerste opdracht bevat de eigenschap PsComputerName , die de naam bevat van de computer waarop de opdracht is uitgevoerd. De uitvoer van de tweede opdracht, die HideComputerName gebruikt, bevat niet de kolom PsComputerName .

Voorbeeld 11: Het trefwoord Param gebruiken in een scriptblok

Het Param trefwoord en de parameter ArgumentList worden gebruikt om variabelewaarden door te geven aan benoemde parameters in een scriptblok. In dit voorbeeld worden bestandsnamen weergegeven die beginnen met de letter a en de .pdf extensie hebben.

Zie about_Language_Keywords voor meer informatie over het Param trefwoord.

$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 gebruikt de parameter ScriptBlock die twee variabelen definieert, $param1 en $param2. Get-ChildItem gebruikt de benoemde parameters Name en Include met de namen van de variabelen. De ArgumentList geeft de waarden door aan de variabelen.

Voorbeeld 12: de $args automatische variabele gebruiken in een scriptblok

De $args automatische variabele en de parameter ArgumentList worden gebruikt om matrixwaarden door te geven aan parameterposities in een scriptblok. In dit voorbeeld wordt de mapinhoud van bestanden van .txt een server weergegeven. De Get-ChildItempath-parameter is positie 0 en de filterparameter is positie 1.

Zie about_Automatic_Variables voor meer informatie over de $args variabele

$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 gebruikt de parameter ScriptBlock en Get-ChildItem geeft de $args[0] matrixwaarden en $args[1] op. De ArgumentList geeft de $args matrixwaarden door aan de Get-ChildItem parameterposities voor Pad en Filter.

Voorbeeld 13: Een script uitvoeren op alle computers die in een tekstbestand worden vermeld

In dit voorbeeld wordt de Invoke-Command cmdlet gebruikt om het Sample.ps1 script uit te voeren op alle computers die in het Servers.txt bestand worden vermeld. Voor de opdracht wordt de parameter FilePath gebruikt om het scriptbestand op te geven. Met deze opdracht kunt u het script uitvoeren op de externe computers, zelfs als het scriptbestand niet toegankelijk is voor de externe computers.

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

Wanneer u de opdracht verzendt, wordt de inhoud van het Sample.ps1 bestand gekopieerd naar een scriptblok en wordt het scriptblok uitgevoerd op elk van de externe computers. Deze procedure is gelijk aan het gebruik van de parameter ScriptBlock om de inhoud van het script te verzenden.

Voorbeeld 14: Een opdracht uitvoeren op een externe computer met behulp van een URI

In dit voorbeeld ziet u hoe u een opdracht uitvoert op een externe computer die wordt geïdentificeerd door een URI (Uniform Resource Identifier). In dit specifieke voorbeeld wordt een Set-Mailbox opdracht uitgevoerd op een externe 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

De eerste regel gebruikt de Get-Credential cmdlet om Windows Live ID-referenties op te slaan in de $LiveCred variabele. PowerShell vraagt de gebruiker om Windows Live ID-referenties in te voeren.

De $parameters variabele is een hashtabel met de parameters die moeten worden doorgegeven aan de Invoke-Command cmdlet. De Invoke-Command cmdlet voert een Set-Mailbox opdracht uit met behulp van de microsoft.Exchange-sessieconfiguratie . Met de parameter ConnectionURI wordt de URL van het Exchange-servereindpunt opgegeven. De referentieparameter geeft de referenties op die zijn opgeslagen in de $LiveCred variabele. De parameter AuthenticationMechanism geeft het gebruik van basisverificatie op. Met de parameter ScriptBlock wordt een scriptblok opgegeven dat de opdracht bevat.

Voorbeeld 15: Een sessieoptie gebruiken

In dit voorbeeld ziet u hoe u een SessionOption-parameter maakt en gebruikt.

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

De New-PSSessionOption cmdlet maakt een sessieoptieobject dat ervoor zorgt dat het externe einde de certificeringsinstantie, canonieke naam en intrekkings-Lijsten niet controleert tijdens het evalueren van de binnenkomende HTTPS-verbinding. Het SessionOption-object wordt opgeslagen in de $so variabele.

Notitie

Het uitschakelen van deze controles is handig voor het oplossen van problemen, maar is uiteraard niet veilig.

De Invoke-Command cmdlet voert een Get-HotFix opdracht op afstand uit. De parameter SessionOption krijgt de $so variabele.

Voorbeeld 16: URI-omleiding beheren in een externe opdracht

In dit voorbeeld ziet u hoe u de parameters AllowRedirection en SessionOption gebruikt om URI-omleiding in een externe opdracht te beheren.

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

De New-PSSessionOption cmdlet maakt een PSSessionOption-object dat wordt opgeslagen in de $max variabele. De opdracht gebruikt de parameter MaximumRedirection om de eigenschap MaximumConnectionRedirectionCount van het object PSSessionOption in te stellen op 1.

De Invoke-Command cmdlet voert een Get-Mailbox opdracht uit op een externe Microsoft Exchange Server. De parameter AllowRedirection biedt expliciete machtigingen om de verbinding om te leiden naar een alternatief eindpunt. De parameter SessionOption maakt gebruik van het sessieobject dat is opgeslagen in de $max variabele.

Als gevolg hiervan, als de externe computer die is opgegeven door ConnectionURI een omleidingsbericht retourneert, wordt de verbinding door PowerShell omgeleid, maar als de nieuwe bestemming een ander omleidingsbericht retourneert, wordt de omleidingswaarde van 1 overschreden en Invoke-Command wordt een niet-afsluitfout geretourneerd.

Voorbeeld 17: Toegang krijgen tot een netwerkshare in een externe sessie

In dit voorbeeld ziet u hoe u toegang hebt tot een netwerkshare vanuit een externe sessie. Er worden drie computers gebruikt om het voorbeeld te demonstreren. Server01 is de lokale computer, Server02 is de externe computer en Net03 bevat de netwerkshare. Server01 maakt verbinding met Server02 en vervolgens voert Server02 een tweede hop naar Net03 uit om toegang te krijgen tot de netwerkshare. Zie De tweede hop maken in Externe communicatie van PowerShell voor meer informatie over hoe externe communicatie van PowerShell hops tussen computers ondersteunt.

De vereiste CredSSP-delegering (Credential Security Support Provider) is ingeschakeld in de clientinstellingen op de lokale computer en in de service-instellingen op de externe computer. Als u de opdrachten in dit voorbeeld wilt uitvoeren, moet u lid zijn van de groep Administrators op de lokale computer en de externe computer.

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

Met Enable-WSManCredSSP de cmdlet wordt CredSSP-delegatie van de lokale Server01-computer naar de externe Server02-computer ingeschakeld. Met de parameter Role wordt client opgegeven voor het configureren van de CredSSP-clientinstelling op de lokale computer.

New-PSSession maakt een PSSession-object voor Server02 en slaat het object op in de $s variabele.

De Invoke-Command cmdlet gebruikt de $s variabele om verbinding te maken met de externe computer, Server02. De parameter ScriptBlock wordt uitgevoerd Enable-WSManCredSSP op de externe computer. De functie parameter geeft server voor het configureren van de CredSSP-serverinstelling op de externe computer.

De $parameters variabele bevat de parameterwaarden om verbinding te maken met de netwerkshare. De Invoke-Command cmdlet voert een Get-Item opdracht uit in de sessie in $s. Met deze opdracht wordt een script opgehaald van de \\Net03\Scripts netwerkshare. De opdracht maakt gebruik van de verificatieparameter met de waarde CredSSP en de parameter Credential met de waarde Domain01\Admin01.

Voorbeeld 18: Scripts starten op veel externe computers

In dit voorbeeld wordt een script uitgevoerd op meer dan honderd computers. Om de impact op de lokale computer te minimaliseren, maakt deze verbinding met elke computer, start het script en wordt de verbinding met elke computer verbroken. Het script wordt nog steeds uitgevoerd in de niet-verbonden sessies.

$parameters = @{
  ComputerName = (Get-Content -Path C:\Test\Servers.txt)
  InDisconnectedSession = $true
  FilePath = "\\Scripts\Public\ConfigInventory.ps1"
  SessionOption = @{OutputBufferingMode="Drop";IdleTimeout=43200000}
}
Invoke-Command @parameters

De opdracht gebruikt Invoke-Command om het script uit te voeren. De waarde van de parameter ComputerName is een Get-Content opdracht waarmee de namen van de externe computers uit een tekstbestand worden opgehaald. De parameter InDisconnectedSession verbreekt de verbinding met de sessies zodra de opdracht wordt gestart. De waarde van de parameter FilePath is het script dat Invoke-Command op elke computer wordt uitgevoerd.

De waarde van SessionOption is een hashtabel. De waarde OutputBufferingMode is ingesteld op Drop en de waarde IdleTimeout is ingesteld op 43200000 milliseconden (12 uur).

Gebruik Receive-PSSession de cmdlet om de resultaten op te halen van opdrachten en scripts die worden uitgevoerd in niet-verbonden sessies.

Voorbeeld 19: Een opdracht uitvoeren op een externe computer met behulp van SSH

In dit voorbeeld ziet u hoe u een opdracht uitvoert op een externe computer met behulp van Secure Shell (SSH). Als SSH is geconfigureerd op de externe computer om om wachtwoorden te vragen, krijgt u een wachtwoordprompt. Anders moet u gebruikersverificatie op basis van een SSH-sleutel gebruiken.

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

Voorbeeld 20: Een opdracht uitvoeren op een externe computer met behulp van SSH en een gebruikersverificatiesleutel opgeven

In dit voorbeeld ziet u hoe u een opdracht uitvoert op een externe computer met behulp van SSH en een sleutelbestand voor gebruikersverificatie opgeeft. U wordt niet om een wachtwoord gevraagd, tenzij de sleutelverificatie mislukt en de externe computer is geconfigureerd om basiswachtwoordverificatie toe te staan.

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

Voorbeeld 21: Een scriptbestand uitvoeren op meerdere externe computers met behulp van SSH als taak

In dit voorbeeld ziet u hoe u een scriptbestand uitvoert op meerdere externe computers met behulp van SSH en de parameterset SSHConnection . De parameter SSHConnection gebruikt een matrix van hash-tabellen die verbindingsgegevens voor elke computer bevatten. In dit voorbeeld moet SSH op de externe doelcomputers zijn geconfigureerd voor ondersteuning van gebruikersverificatie op basis van sleutels.

$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

Parameters

-AllowRedirection

Hiermee staat u omleiding van deze verbinding naar een alternatieve URI (Uniform Resource Identifier) toe.

Wanneer u de parameter ConnectionURI gebruikt, kan de externe bestemming een instructie retourneren om om te leiden naar een andere URI. PowerShell leidt standaard geen verbindingen om, maar u kunt deze parameter gebruiken om de verbinding om te leiden.

U kunt ook het aantal keren beperken dat de verbinding wordt omgeleid door de sessiewaarde MaximumConnectionRedirectionCount te wijzigen. Gebruik de parameter MaximumRedirection van de New-PSSessionOption cmdlet of stel de eigenschap MaximumConnectionRedirectionCount van de $PSSessionOption voorkeursvariabele in. De standaardwaarde is 5.

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

-ApplicationName

Hiermee geeft u het toepassingsnaamsegment van de verbindings-URI. Gebruik deze parameter om de naam van de toepassing op te geven wanneer u de parameter ConnectionURI niet gebruikt in de opdracht.

De standaardwaarde is de waarde van de $PSSessionApplicationName voorkeursvariabele op de lokale computer. Als deze voorkeursvariabele niet is gedefinieerd, is de standaardwaarde WSMAN. Deze waarde is geschikt voor de meeste toepassingen. Zie about_Preference_Variables voor meer informatie.

De WinRM-service gebruikt de naam van de toepassing om een listener te selecteren om de verbindingsaanvraag te verwerken. De waarde van deze parameter moet overeenkomen met de waarde van de eigenschap URLPrefix van een listener op de externe computer.

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

-ArgumentList

Levert de waarden van parameters voor het scriptblock. De parameters in het scriptblok worden doorgegeven door de positie van de matrixwaarde die is opgegeven aan ArgumentList. Dit wordt ook wel matrixsplatting genoemd. Zie about_Splatting voor meer informatie over het gedrag van ArgumentList.

Type:Object[]
Aliases:Args
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-AsJob

Geeft aan dat met deze cmdlet de opdracht wordt uitgevoerd als een achtergrondtaak op een externe computer. Gebruik deze parameter om opdrachten uit te voeren die veel tijd in beslag nemen om te voltooien.

Wanneer u de parameter AsJob gebruikt, retourneert de opdracht een object dat de taak vertegenwoordigt en wordt vervolgens de opdrachtprompt weergegeven. U kunt in de sessie blijven werken terwijl de taak is voltooid. Gebruik de cmdlets om de *-Job taak te beheren. Gebruik de cmdlet om de taakresultaten op te Receive-Job halen.

De parameter AsJob lijkt op het gebruik van de Invoke-Command cmdlet om een Start-Job cmdlet extern uit te voeren. Met AsJob wordt de taak echter gemaakt op de lokale computer, ook al wordt de taak uitgevoerd op een externe computer. De resultaten van de externe taak worden automatisch geretourneerd naar de lokale computer.

Zie about_Jobs en about_Remote_Jobs voor meer informatie over PowerShell-achtergrondtaken.

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

-Authentication

Hiermee geeft u het mechanisme op dat wordt gebruikt om de referenties van de gebruiker te verifiëren. CredSSP-verificatie is alleen beschikbaar in Windows Vista, Windows Server 2008 en latere versies van het Windows-besturingssysteem.

De acceptabele waarden voor deze parameter zijn als volgt:

  • Standaard
  • Basic
  • Credssp
  • Samenvatting
  • Kerberos
  • Negotiate
  • NegotiateWithImplicitCredential

De standaardwaarde is Standaard.

Zie AuthenticationMechanism Enumeration voor meer informatie over de waarden van deze parameter.

Waarschuwing

CredSSP-verificatie (Credential Security Support Provider), waarbij de referenties van de gebruiker worden doorgegeven aan een externe computer om te worden geverifieerd, is ontworpen voor opdrachten waarvoor verificatie op meer dan één resource is vereist, zoals toegang tot een externe netwerkshare. Dit mechanisme verhoogt het beveiligingsrisico van de externe bewerking. Als de externe computer is gecompromitteerd, kunnen de referenties die aan de computer worden doorgegeven, worden gebruikt om de netwerksessie te beheren. Zie Referentiebeveiligingsondersteuningsprovider voor meer informatie.

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

-CertificateThumbprint

Hiermee geeft u het digitale openbare sleutelcertificaat (X509) van een gebruikersaccount dat is gemachtigd om verbinding te maken met de niet-verbonden sessie. Voer de vingerafdruk van het certificaat in.

Certificaten worden gebruikt in verificatie op basis van clientcertificaten. Ze kunnen alleen worden toegewezen aan lokale gebruikersaccounts en ze werken niet met domeinaccounts.

Als u een vingerafdruk van een certificaat wilt ophalen, gebruikt u de Get-Item opdracht of Get-ChildItem in het PowerShell-certificaat: station.

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

-ComputerName

Hiermee geeft u de computers waarop de opdracht wordt uitgevoerd. Standaard is dit de lokale computer.

Wanneer u de parameter ComputerName gebruikt, maakt PowerShell een tijdelijke verbinding die alleen wordt gebruikt om de opgegeven opdracht uit te voeren en wordt deze vervolgens gesloten. Als u een permanente verbinding nodig hebt, gebruikt u de sessieparameter .

Typ de NETBIOS-naam, het IP-adres of de Fully Qualified Domain Name van een of meer computers in een door komma's gescheiden lijst. Als u de lokale computer wilt opgeven, typt u de computernaam, localhost of een punt (.).

Als u een IP-adres in de waarde computernaam wilt gebruiken, moet de opdracht de parameter Credential bevatten. De computer moet worden geconfigureerd voor het HTTPS-transport of het IP-adres van de externe computer moet worden opgenomen in de WinRM TrustedHosts-lijst van de lokale computer. Zie How to Add a Computer to the Trusted Host List (Een computer toevoegen aan de lijst met vertrouwde hosts) voor instructies voor het toevoegen van een computernaam aan de lijst met vertrouwde hosts.

Als u in Windows Vista en latere versies van het Windows-besturingssysteem de lokale computer wilt opnemen in de waarde computernaam, moet u PowerShell uitvoeren met de optie Als administrator uitvoeren .

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

-ConfigurationName

Hiermee geeft u de sessieconfiguratie die wordt gebruikt voor de nieuwe PSSession.

Voer een configuratienaam of de volledig gekwalificeerde resource-URI in voor een sessieconfiguratie. Als u alleen de configuratienaam opgeeft, wordt de volgende schema-URI vooraf gebruikt: http://schemas.microsoft.com/PowerShell.

Bij gebruik met SSH geeft deze parameter het subsysteem op dat moet worden gebruikt voor het doel zoals gedefinieerd in sshd_config. De standaardwaarde voor SSH is het powershell subsysteem.

De sessieconfiguratie voor een sessie bevindt zich op de externe computer. Als de opgegeven sessieconfiguratie niet bestaat op de externe computer, mislukt de opdracht.

De standaardwaarde is de waarde van de $PSSessionConfigurationName voorkeursvariabele op de lokale computer. Als deze voorkeursvariabele niet is ingesteld, is de standaardwaarde Microsoft.PowerShell. Zie about_Preference_Variables voor meer informatie.

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

-ConnectionUri

Hiermee geeft u een URI (Uniform Resource Identifier) op die het verbindingseindpunt van de sessie definieert. De URI moet volledig zijn gekwalificeerd.

De indeling van deze tekenreeks is als volgt:

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

De standaardwaarde is als volgt:

http://localhost:5985/WSMAN

Als u geen verbindings-URI opgeeft, kunt u de parameters UseSSL en Port gebruiken om de verbindings-URI-waarden op te geven.

Geldige waarden voor het transportsegment van de URI zijn HTTP en HTTPS. Als u een verbindings-URI met een transportsegment opgeeft, maar geen poort opgeeft, wordt de sessie gemaakt met de standaardpoorten: 80 voor HTTP en 443 voor HTTPS. Als u de standaardpoorten voor externe communicatie met PowerShell wilt gebruiken, geeft u poort 5985 op voor HTTP of 5986 voor HTTPS.

Als de doelcomputer de verbinding omleidt naar een andere URI, voorkomt PowerShell de omleiding, tenzij u de parameter AllowRedirection in de opdracht gebruikt.

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

-ContainerId

Hiermee geeft u een matrix van container-id's.

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

-Credential

Hiermee geeft u een gebruikersaccount op dat gemachtigd is om deze actie uit te voeren. Standaard is dit de huidige gebruiker.

Typ een gebruikersnaam, zoals User01 of Domain01\User01, of voer een PSCredential-object in dat is gegenereerd door de Get-Credential cmdlet. Als u een gebruikersnaam typt, wordt u gevraagd het wachtwoord in te voeren.

Referenties worden opgeslagen in een PSCredential-object en het wachtwoord wordt opgeslagen als een SecureString.

Notitie

Zie Hoe veilig is SecureString? voor meer informatie over SecureString-gegevensbeveiliging.

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

-EnableNetworkAccess

Geeft aan dat deze cmdlet een interactief beveiligingstoken toevoegt aan loopback-sessies. Met het interactieve token kunt u opdrachten uitvoeren in de loopback-sessie waarmee gegevens van andere computers worden opgehaald. U kunt bijvoorbeeld een opdracht uitvoeren in de sessie waarmee XML-bestanden van een externe computer naar de lokale computer worden gekopieerd.

Een loopbacksessie is een PSSession die afkomstig is van en eindigt op dezelfde computer. Als u een loopback-sessie wilt maken, laat u de parameter ComputerName weg of stelt u de waarde ervan in op punt (.), localhost of de naam van de lokale computer.

Standaard worden loopback-sessies gemaakt met behulp van een netwerktoken, wat mogelijk niet voldoende machtigingen biedt voor verificatie bij externe computers.

De parameter EnableNetworkAccess is alleen effectief in loopbacksessies. Als u EnableNetworkAccess gebruikt wanneer u een sessie op een externe computer maakt, slaagt de opdracht, maar wordt de parameter genegeerd.

U kunt externe toegang in een loopbacksessie toestaan met behulp van de CredSSP-waarde van de parameter Authentication , die de sessiereferenties delegeert aan andere computers.

Om de computer te beschermen tegen schadelijke toegang, kunnen niet-verbonden loopbacksessies met interactieve tokens, die zijn gemaakt met EnableNetworkAccess, alleen opnieuw verbinding maken vanaf de computer waarop de sessie is gemaakt. Niet-verbonden sessies die gebruikmaken van CredSSP-verificatie kunnen opnieuw worden verbonden vanaf andere computers. Voor meer informatie raadpleegt u Disconnect-PSSession.

Deze parameter is geïntroduceerd in PowerShell 3.0.

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

-FilePath

Hiermee geeft u een lokaal script op dat met deze cmdlet wordt uitgevoerd op een of meer externe computers. Voer het pad en de bestandsnaam van het script in of sluis een scriptpad door naar Invoke-Command. Het script moet aanwezig zijn op de lokale computer of in een map waartoe de lokale computer toegang heeft. Gebruik ArgumentList om de waarden van parameters in het script op te geven.

Wanneer u deze parameter gebruikt, converteert PowerShell de inhoud van het opgegeven scriptbestand naar een scriptblok, verzendt het scriptblok naar de externe computer en voert het uit op de externe computer.

Type:String
Aliases:PSPath
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-HideComputerName

Geeft aan dat deze cmdlet de computernaam van elk object weglaat uit de uitvoerweergave. De naam van de computer die het object heeft gegenereerd, wordt standaard weergegeven in de weergave.

Deze parameter is alleen van invloed op de uitvoerweergave. Het object wordt niet gewijzigd.

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

-HostName

Hiermee geeft u een matrix van computernamen voor een secure shell (SSH) gebaseerde verbinding. Dit is vergelijkbaar met de parameter ComputerName , behalve dat de verbinding met de externe computer wordt gemaakt met behulp van SSH in plaats van Windows WinRM.

Deze parameter is geïntroduceerd in PowerShell 6.0.

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

-InDisconnectedSession

Geeft aan dat met deze cmdlet een opdracht of script wordt uitgevoerd in een niet-verbonden sessie.

Wanneer u de parameter InDisconnectedSession gebruikt, Invoke-Command maakt u een permanente sessie op elke externe computer, start u de opdracht die is opgegeven met de parameter ScriptBlock of FilePath en wordt de verbinding met de sessie verbroken. De opdrachten blijven worden uitgevoerd in de niet-verbonden sessies. Met InDisconnectedSession kunt u opdrachten uitvoeren zonder een verbinding met de externe sessies te onderhouden. En omdat de sessie wordt verbroken voordat er resultaten worden geretourneerd, zorgt InDisconnectedSession ervoor dat alle opdrachtresultaten worden geretourneerd naar de opnieuw verbonden sessie, in plaats van te worden gesplitst tussen sessies.

U kunt InDisconnectedSession niet gebruiken met de parameter Session of asJob .

Opdrachten die gebruikmaken van InDisconnectedSession retourneren een PSSession-object dat de verbroken sessie vertegenwoordigt. De uitvoer van de opdracht wordt niet geretourneerd. Gebruik de Connect-PSSession cmdlets of Receive-PSSession om verbinding te maken met de niet-verbonden sessie. Gebruik Receive-PSSession de cmdlet om de resultaten op te halen van opdrachten die in de sessie zijn uitgevoerd. Als u opdrachten wilt uitvoeren die uitvoer genereren in een niet-verbonden sessie, stelt u de waarde van de sessieoptie OutputBufferingMode in op Verwijderen. Als u verbinding wilt maken met de niet-verbonden sessie, stelt u de time-out voor inactiviteit in de sessie in zodat u voldoende tijd hebt om verbinding te maken voordat u de sessie verwijdert.

U kunt de uitvoerbuffermodus en time-out voor inactiviteit instellen in de parameter SessionOption of in de $PSSessionOption voorkeursvariabele. Zie en about_Preference_Variables voor meer informatie over sessieoptiesNew-PSSessionOption.

Zie about_Remote_Disconnected_Sessions voor meer informatie over de functie Niet-verbonden sessies.

Deze parameter is geïntroduceerd in PowerShell 3.0.

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

-InputObject

Hiermee geeft u invoer voor de opdracht. Voer een variabele in die de objecten bevat of typ een opdracht of expressie waarmee de objecten worden opgehaald.

Wanneer u de parameter InputObject gebruikt, gebruikt u de $Input automatische variabele in de waarde van de parameter ScriptBlock om de invoerobjecten weer te geven.

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

-JobName

Hiermee geeft u een beschrijvende naam voor de achtergrondtaak. Taken hebben standaard de naam Job<n>, waarbij <n> een rangnummer is.

Als u de parameter JobName in een opdracht gebruikt, wordt de opdracht uitgevoerd als een taak en Invoke-Command wordt een taakobject geretourneerd, zelfs als u AsJob niet in de opdracht opneemt.

Zie about_Jobs voor meer informatie over PowerShell-achtergrondtaken.

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

-KeyFilePath

Hiermee geeft u een sleutelbestandspad op dat wordt gebruikt door Secure Shell (SSH) om een gebruiker op een externe computer te verifiëren.

Met SSH kan gebruikersverificatie worden uitgevoerd via persoonlijke en openbare sleutels als alternatief voor basiswachtwoordverificatie. Als de externe computer is geconfigureerd voor sleutelverificatie, kan deze parameter worden gebruikt om de sleutel op te geven waarmee de gebruiker wordt geïdentificeerd.

Deze parameter is geïntroduceerd in PowerShell 6.0.

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

-NoNewScope

Geeft aan dat met deze cmdlet de opgegeven opdracht wordt uitgevoerd in het huidige bereik. Opdrachten worden standaard Invoke-Command in hun eigen bereik uitgevoerd.

Deze parameter is alleen geldig in opdrachten die worden uitgevoerd in de huidige sessie, dat wil gezegd opdrachten die zowel de computernaam als de sessieparameters weglaten.

Deze parameter is geïntroduceerd in PowerShell 3.0.

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

-Port

Hiermee geeft u de netwerkpoort op de externe computer die wordt gebruikt voor deze opdracht. Als u verbinding wilt maken met een externe computer, moet de externe computer luisteren op de poort die de verbinding gebruikt. De standaardpoorten zijn 5985 (WinRM-poort voor HTTP) en 5986 (WinRM-poort voor HTTPS).

Voordat u een alternatieve poort gebruikt, configureert u de WinRM-listener op de externe computer om te luisteren op die poort. Als u de listener wilt configureren, typt u de volgende twee opdrachten bij de PowerShell-prompt:

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

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

Gebruik de parameter Port alleen als dat nodig is. De poort die is ingesteld in de opdracht is van toepassing op alle computers of sessies waarop de opdracht wordt uitgevoerd. Een alternatieve poortinstelling kan verhinderen dat de opdracht op alle computers wordt uitgevoerd.

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

-RemoteDebug

Wordt gebruikt om de aangeroepen opdracht uit te voeren in de foutopsporingsmodus in de externe PowerShell-sessie.

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

-RunAsAdministrator

Geeft aan dat deze cmdlet een opdracht als beheerder aanroept.

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

-ScriptBlock

Hiermee geeft u de opdrachten die moeten worden uitgevoerd. Plaats de opdrachten tussen accolades ({ }) om een scriptblok te maken. Wanneer u Invoke-Command een opdracht op afstand uitvoert, worden alle variabelen in de opdracht geëvalueerd op de externe computer.

Notitie

Parameters voor het scriptblock kunnen alleen worden doorgegeven vanuit ArgumentList per positie. Schakelparameters kunnen niet worden doorgegeven door positie. Als u een parameter nodig hebt die zich gedraagt als een Type SwitchParameter , gebruikt u in plaats daarvan een Booleaanse waarde.

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

-Session

Hiermee geeft u een matrix van sessies waarin deze cmdlet de opdracht uitvoert. Voer een variabele in die PSSession-objecten bevat of een opdracht waarmee de PSSession-objecten worden gemaakt of opgehaald, zoals een New-PSSession opdracht of Get-PSSession .

Wanneer u een PSSession maakt, maakt PowerShell een permanente verbinding met de externe computer. Gebruik een PSSession om een reeks gerelateerde opdrachten uit te voeren waarmee gegevens worden gedeeld. Als u één opdracht of een reeks niet-gerelateerde opdrachten wilt uitvoeren, gebruikt u de parameter ComputerName . Zie about_PSSessions voor meer informatie.

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

-SessionName

Hiermee geeft u een beschrijvende naam voor een niet-verbonden sessie. U kunt de naam gebruiken om te verwijzen naar de sessie in volgende opdrachten, zoals een Get-PSSession opdracht. Deze parameter is alleen geldig met de parameter InDisconnectedSession .

Deze parameter is geïntroduceerd in PowerShell 3.0.

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

-SessionOption

Hiermee geeft u geavanceerde opties voor de sessie. Voer een SessionOption-object in, zoals een object dat u maakt met behulp van de New-PSSessionOption cmdlet, of een hash-tabel waarin de sleutels namen van sessieopties zijn en de waarden sessieoptiewaarden zijn.

De standaardwaarden voor de opties worden bepaald door de waarde van de $PSSessionOption voorkeursvariabele, als deze is ingesteld. Anders worden de standaardwaarden vastgesteld door opties die zijn ingesteld in de sessieconfiguratie.

De sessieoptiewaarden hebben voorrang op standaardwaarden voor sessies die zijn ingesteld in de $PSSessionOption voorkeursvariabele en in de sessieconfiguratie. Ze hebben echter geen prioriteit boven maximumwaarden, quota of limieten die zijn ingesteld in de sessieconfiguratie.

Zie voor een beschrijving van de sessieopties die de standaardwaarden New-PSSessionOptionbevatten. Zie about_Preference_Variables voor meer informatie over de$PSSessionOption voorkeursvariabele. Zie about_Session_Configurations (Engelstalig) voor meer informatie over sessieconfiguraties.

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

-SSHConnection

Deze parameter gebruikt een matrix van hash-tabellen waarbij elke hashtabel een of meer verbindingsparameters bevat die nodig zijn om een SSH-verbinding (Secure Shell) tot stand te brengen. De parameter SSHConnection is handig voor het maken van meerdere sessies waarbij elke sessie verschillende verbindingsgegevens vereist.

De hashtabel heeft de volgende leden:

  • ComputerNaam (of Hostnaam)
  • Poort
  • Gebruikersnaam
  • KeyFilePath (of IdentityFilePath)

ComputerName (of HostName) is het enige sleutel-waardepaar dat is vereist.

Deze parameter is geïntroduceerd in PowerShell 6.0.

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

-SSHTransport

Geeft aan dat de externe verbinding tot stand wordt gebracht met behulp van Secure Shell (SSH).

PowerShell maakt standaard gebruik van Windows WinRM om verbinding te maken met een externe computer. Deze schakeloptie dwingt PowerShell om de parameter HostName te gebruiken voor het tot stand brengen van een externe SSH-verbinding.

Deze parameter is geïntroduceerd in PowerShell 6.0.

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

-Subsystem

Hiermee geeft u het SSH-subsysteem dat wordt gebruikt voor de nieuwe PSSession.

Hiermee geeft u het subsysteem op dat moet worden gebruikt op het doel zoals gedefinieerd in sshd_config. Het subsysteem start een specifieke versie van PowerShell met vooraf gedefinieerde parameters. Als het opgegeven subsysteem niet bestaat op de externe computer, mislukt de opdracht.

Als deze parameter niet wordt gebruikt, is de standaardwaarde het 'powershell'-subsysteem.

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

-ThrottleLimit

Hiermee geeft u het maximum aantal gelijktijdige verbindingen op dat tot stand kan worden gebracht om deze opdracht uit te voeren. Als u deze parameter weglaat of een waarde van 0 invoert, wordt de standaardwaarde 32 gebruikt.

De beperkingslimiet is alleen van toepassing op de huidige opdracht, niet op de sessie of op de computer.

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

-UserName

Hiermee geeft u de gebruikersnaam voor het account dat wordt gebruikt om een opdracht uit te voeren op de externe computer. De gebruikersverificatiemethode is afhankelijk van de manier waarop Secure Shell (SSH) is geconfigureerd op de externe computer.

Als SSH is geconfigureerd voor basiswachtwoordverificatie, wordt u gevraagd om het gebruikerswachtwoord.

Als SSH is geconfigureerd voor gebruikersverificatie op basis van een sleutel, kan een pad naar het sleutelbestand worden opgegeven via de KeyFilePath-parameter en wordt er geen wachtwoordprompt weergegeven. Als het bestand met de clientgebruikerssleutel zich op een bekende SSH-locatie bevindt, is de parameter KeyFilePath niet nodig voor verificatie op basis van sleutels en vindt gebruikersverificatie automatisch plaats op basis van de gebruikersnaam. Zie de SSH-documentatie van uw platform over gebruikersverificatie op basis van sleutels voor meer informatie.

Dit is geen vereiste parameter. Als de parameter UserName niet is opgegeven, wordt de huidige aangemelde gebruikersnaam gebruikt voor de verbinding.

Deze parameter is geïntroduceerd in PowerShell 6.0.

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

-UseSSL

Geeft aan dat deze cmdlet gebruikmaakt van het SSL-protocol (Secure Sockets Layer) om een verbinding met de externe computer tot stand te brengen. SSL wordt standaard niet gebruikt.

WS-Management versleutelt alle PowerShell-inhoud die via het netwerk wordt verzonden. De parameter UseSSL is een extra beveiliging waarmee de gegevens worden verzonden via een HTTPS in plaats van HTTP.

Als u deze parameter gebruikt, maar SSL niet beschikbaar is op de poort die wordt gebruikt voor de opdracht, mislukt de opdracht.

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

-VMId

Hiermee geeft u een matrix van id's van virtuele machines.

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

-VMName

Hiermee geeft u een matrix met namen van virtuele machines.

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

Invoerwaarden

ScriptBlock

U kunt een opdracht in een scriptblok doorsluisen naar Invoke-Command. Gebruik de $Input automatische variabele om de invoerobjecten in de opdracht weer te geven.

Uitvoerwaarden

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

Deze cmdlet retourneert een taakobject als u de parameter AsJob gebruikt. Als u de parameter InDisconnectedSession opgeeft, Invoke-Command retourneert een PSSession-object . Anders wordt de uitvoer van de aangeroepen opdracht geretourneerd. Dit is de waarde van de parameter ScriptBlock .

Notities

Als u in Windows Vista en latere versies van het Windows-besturingssysteem de parameter ComputerName van Invoke-Command wilt gebruiken om een opdracht uit te voeren op de lokale computer, moet u PowerShell uitvoeren met de optie Als administrator uitvoeren .

Wanneer u opdrachten uitvoert op meerdere computers, maakt PowerShell verbinding met de computers in de volgorde waarin ze in de lijst worden weergegeven. De uitvoer van de opdracht wordt echter weergegeven in de volgorde waarin deze van de externe computers wordt ontvangen, wat anders kan zijn.

Fouten die het gevolg zijn van de opdracht die Invoke-Command wordt uitgevoerd, zijn opgenomen in de opdrachtresultaten. Fouten die een afsluitfout in een lokale opdracht zouden zijn, worden behandeld als niet-afsluitfouten in een externe opdracht. Deze strategie zorgt ervoor dat afsluitfouten op één computer de opdracht niet sluiten op alle computers waarop deze wordt uitgevoerd. Deze procedure wordt zelfs gebruikt wanneer een externe opdracht wordt uitgevoerd op één computer.

Als de externe computer zich niet in een domein bevindt dat de lokale computer vertrouwt, kan de computer de referenties van de gebruiker mogelijk niet verifiëren. Als u de externe computer wilt toevoegen aan de lijst met vertrouwde hosts in WS-Management, gebruikt u de volgende opdracht in de WSMAN provider, waarbij <Remote-Computer-Name> de naam van de externe computer is:

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

Wanneer u een PSSession verbreekt met behulp van de parameter InDisconnectedSession , is de sessiestatus Verbroken en is de beschikbaarheid Geen. De waarde van de eigenschap State is relatief ten opzichte van de huidige sessie. De waarde Verbroken betekent dat de PSSession niet is verbonden met de huidige sessie. Dit betekent echter niet dat de PSSession is losgekoppeld van alle sessies. Het is mogelijk verbonden met een andere sessie. Gebruik de eigenschap Beschikbaarheid om te bepalen of u verbinding kunt maken of opnieuw verbinding kunt maken met de sessie.

De waarde Beschikbaarheid van Geen geeft aan dat u verbinding kunt maken met de sessie. De waarde Bezet geeft aan dat u geen verbinding kunt maken met de PSSession omdat deze is verbonden met een andere sessie. Zie RunspaceState voor meer informatie over de waarden van de eigenschap State van sessies. Zie RunspaceAvailability voor meer informatie over de waarden van de eigenschap Beschikbaarheid van sessies.

De parameters HostName en SSHConnection zijn opgenomen vanaf PowerShell 6.0. Ze zijn toegevoegd om externe communicatie van PowerShell te bieden op basis van Secure Shell (SSH). PowerShell en SSH worden ondersteund op meerdere platforms (Windows, Linux, macOS) en externe communicatie met PowerShell werkt via deze platforms waarop PowerShell en SSH zijn geïnstalleerd en geconfigureerd. Dit staat los van de vorige externe communicatie met alleen Windows die is gebaseerd op WinRM en veel van de winRM-specifieke functies en beperkingen zijn niet van toepassing. Op WinRM gebaseerde quota, sessieopties, aangepaste eindpuntconfiguratie en functies voor verbinding verbreken/opnieuw verbinden worden momenteel bijvoorbeeld niet ondersteund. Zie Externe toegang van PowerShell via SSH voor meer informatie over het instellen van externe communicatie met PowerShell SSH.