Delen via


Invoke-Command

Voert opdrachten uit op lokale en externe computers.

Syntaxis

Invoke-Command
      [-ScriptBlock] <ScriptBlock>
      [-NoNewScope]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-Session] <PSSession[]>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-Session] <PSSession[]>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-FilePath] <String>
      [-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]
      [-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]
      [-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]
      [-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]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-ScriptBlock] <ScriptBlock>
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-VMGuid] <Guid[]>
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-ScriptBlock] <ScriptBlock>
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -VMName <String[]>
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-FilePath] <String>
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-VMGuid] <Guid[]>
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-FilePath] <String>
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -VMName <String[]>
      [<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) op de externe computer te maken en gebruikt u vervolgens de parameter Session 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 in een achtergrondtaak wilt uitvoeren, gebruikt u de parameter AsJob.

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

Lees about_Remotevoordat u Invoke-Command gebruikt om opdrachten uit te voeren op een externe computer.

Sommige codevoorbeelden gebruiken splatting om de lijnlengte te verminderen. Zie about_Splattingvoor 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 parameter FilePath 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 }

De parameter ComputerName geeft de naam van de externe computer op. De parameter Credential 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 op de externe computer moet worden uitgevoerd.

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 cmdlet New-PSSession maakt een sessie op de externe Server02-computer en slaat deze op in de variabele $s. Normaal gesproken maakt u alleen een sessie wanneer u een reeks opdrachten uitvoert op de externe computer.

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

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 ComputerName en Session parameters 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 parameter ComputerName van Invoke-Command om opdrachten uit te voeren op de externe Server02-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 is gemaakt voor de tweede opdracht.

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 parameter Session om beide opdrachten in dezelfde sessie uit te voeren. Omdat beide opdrachten in dezelfde sessie worden uitgevoerd, blijft de $p waarde actief.

Voorbeeld 5: Voer een opdracht in die is opgeslagen in een lokale variabele

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

$command = { Get-EventLog -LogName "Windows PowerShell" |
  Where-Object {$_.Message -like "*certificate*"} }
Invoke-Command -ComputerName S1, S2 -ScriptBlock $command

De $command variabele slaat de Get-EventLog 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: Voer één opdracht uit op verschillende computers

In dit voorbeeld ziet u hoe u Invoke-Command gebruikt om één opdracht uit te voeren op meerdere computers.

$parameters = @{
  ComputerName = "Server01", "Server02", "TST-0143", "localhost"
  ConfigurationName = 'MySession.PowerShell'
  ScriptBlock = { Get-EventLog "Windows PowerShell" }
}
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-EventLog om de Windows PowerShell-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 elk van de computers te maken. In plaats daarvan gebruikt de opdracht de parameter ComputerName 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, een bestand met computernamen op te halen.

De Invoke-Command-cmdlet voert een Get-Host opdracht uit op de externe computers. Er wordt gebruikgemaakt van punt notatie om de eigenschap versie 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 variabele $version. De uitvoer bevat de naam van de computer waaruit 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 opdracht Invoke-Command maakt gebruik van de parameter AsJob, zodat de opdracht wordt uitgevoerd als 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

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

Met de opdracht Get-Job wordt het taakobject opgeslagen in de $j variabele. De $j variabele wordt vervolgens doorgesluisd naar de cmdlet Format-List om alle eigenschappen van het taakobject in een lijst weer te geven. Met de laatste opdracht worden de resultaten van de taken opgehaald. Het pijpt het taakobject in $j naar de Receive-Job cmdlet en slaat de resultaten op 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 maakt gebruik van de Using bereikaanpassing om een lokale variabele in een externe opdracht te identificeren. Standaard wordt ervan uitgegaan dat alle variabelen worden gedefinieerd in de externe sessie. De Using bereikaanpassing is geïntroduceerd in PowerShell 3.0. Zie about_Remote_Variables en about_Scopesvoor meer informatie over de Using bereikaanpassing.

$Log = "Windows PowerShell"
Invoke-Command -ComputerName Server01 -ScriptBlock { Get-EventLog -LogName $Using:Log -Newest 10 }

De $Log-variabele slaat de naam van het gebeurtenislogboek, Windows PowerShell, op. De Invoke-Command cmdlet wordt uitgevoerd Get-EventLog op Server01 om de tien nieuwste gebeurtenissen op te halen uit het gebeurtenislogboek. De waarde van de parameter LogName is de $Log variabele, die wordt voorafgegaan door de Using bereikaanpassing 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 door deze cmdlet wordt geretourneerd niet. Alleen de weergave wordt gewijzigd. U kunt nog steeds de cmdlets Format 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 gebruiken 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 gebruikmaakt van HideComputerName, bevat niet de kolom PsComputerName.

Voorbeeld 11: het trefwoord Param gebruiken in een scriptblok

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

Zie about_Language_Keywordsvoor meer informatie over het trefwoord Param.

$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 waarmee twee variabelen, $param1 en $param2worden gedefinieerd. Get-ChildItem de benoemde parameters gebruikt, Name en Include with the variable names. De ArgumentList- geeft de waarden door aan de variabelen.

Voorbeeld 12: gebruik de $args automatische variabele 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 een server van .txt bestanden weergegeven. De parameter Get-ChildItemPath is positie 0 en de parameter Filter is positie 1.

Zie about_Automatic_Variables voor meer informatie over de variabele $args

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

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

In dit voorbeeld wordt de cmdlet Invoke-Command gebruikt om het Sample.ps1-script uit te voeren op alle computers die worden vermeld in het Servers.txt-bestand. De opdracht gebruikt de parameter FilePath 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 in te dienen.

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 maakt gebruik van de Get-Credential cmdlet voor het opslaan van Windows Live ID-referenties in de $LiveCred variabele. PowerShell vraagt de gebruiker om Windows Live ID-referenties in te voeren.

De $parameters variabele is een hash-tabel met de parameters die moeten worden doorgegeven aan de cmdlet Invoke-Command. De Invoke-Command-cmdlet voert een Set-Mailbox-opdracht uit met behulp van de sessieconfiguratie van Microsoft.Exchange. De parameter ConnectionURI geeft de URL van het Exchange-servereindpunt op. De parameter Credential geeft de referenties op die zijn opgeslagen in de $LiveCred-variabele. De parameter AuthenticationMechanism geeft het gebruik van basisverificatie aan. De parameter ScriptBlock geeft een scriptblok op 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 intrekkingslijsten niet controleert tijdens het evalueren van de binnenkomende HTTPS-verbinding. Het SessionOption--object wordt opgeslagen in de variabele $so.

Notitie

Het uitschakelen van deze controles is handig voor probleemoplossing, maar is uiteraard niet veilig.

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

Voorbeeld 16: URI-omleiding beheren in een externe opdracht

In dit voorbeeld ziet u hoe u de parameters AllowRedirection en SessionOp tion gebruikt voor het beheren van URI-omleiding in een externe opdracht.

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

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

De cmdlet Invoke-Command 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 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 waarde voor het aantal omleidingen van 1 overschreden en wordt Invoke-Command 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 PowerShellvoor meer informatie over hoe externe communicatie van PowerShell ondersteuning biedt voor hops tussen computers.

De vereiste Delegatie van referentiebeveiligingsondersteuningsprovider (CredSSP) 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 = @{
  Session = $s
  ScriptBlock = { Get-Item \\Net03\Scripts\LogFiles.ps1 }
  Authentication = "CredSSP"
  Credential = "Domain01\Admin01"
}
Invoke-Command @parameters

Met de cmdlet Enable-WSManCredSSP kunt u CredSSP-delegatie van de lokale Server01-computer naar de externe Server02-computer inschakelen. De parameter Role geeft Client op om de CredSSP-clientinstelling op de lokale computer te configureren.

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

De cmdlet Invoke-Command maakt gebruik van de $s-variabele om verbinding te maken met de externe computer, Server02. Met de parameter ScriptBlock wordt Enable-WSManCredSSP uitgevoerd op de externe computer. De parameter Role geeft Server op om de CredSSP-serverinstelling op de externe computer te configureren.

De variabele $parameters 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 uit de \\Net03\Scripts netwerkshare. De opdracht gebruikt de parameter Authentication met een waarde van 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. Als u de impact op de lokale computer wilt minimaliseren, maakt deze verbinding met elke computer, start u het script en verbreekt u vervolgens de verbinding met elke computer. 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 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 hash-tabel. De waarde OutputBufferingMode is ingesteld op Drop en de waarde IdleTimeout is ingesteld op 432000000 milliseconden (12 uur).

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

Parameters

-AllowRedirection

Hiermee wordt omleiding van deze verbinding naar een alternatieve URI (Uniform Resource Identifier) toegestaan.

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 waarde van de MaximumConnectionRedirectionCount sessieoptie te wijzigen. Gebruik de parameter MaximumRedirection van de cmdlet New-PSSessionOption of stel de eigenschap MaximumConnectionRedirectionCount in van de $PSSessionOption voorkeursvariabele. De standaardwaarde is 5.

Type:SwitchParameter
Position:Named
Default value:False
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-ApplicationName

Hiermee geeft u het naamsegment van de toepassing 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_Variablesvoor meer informatie.

De WinRM-service gebruikt de naam van de toepassing om een listener te selecteren voor de service van de verbindingsaanvraag. 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
Vereist:False
Pijplijninvoer accepteren:True
Jokertekens accepteren:False

-ArgumentList

Levert de waarden van lokale variabelen in de opdracht. De variabelen in de opdracht worden vervangen door deze waarden voordat de opdracht wordt uitgevoerd op de externe computer. Voer de waarden in een door komma's gescheiden lijst in. Waarden worden gekoppeld aan variabelen in de volgorde waarin ze worden weergegeven. De alias voor ArgumentList is Args.

De waarden in de parameter ArgumentList kunnen werkelijke waarden zijn, zoals 1024, of kunnen verwijzingen naar lokale variabelen zijn, zoals $max.

Als u lokale variabelen in een opdracht wilt gebruiken, gebruikt u de volgende opdrachtindeling:

{param($<name1>[, $<name2>]...) <command-with-local-variables>} -ArgumentList <value> -of- <local-variable>

Het param trefwoord bevat de lokale variabelen die in de opdracht worden gebruikt. ArgumentList levert de waarden van de variabelen, in de volgorde waarin ze worden weergegeven.

Type:Object[]
Aliassen:Args
Position:Named
Default value:None
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-AsJob

Geeft aan dat met deze cmdlet de opdracht wordt uitgevoerd als 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 *-Job cmdlets om de taak te beheren. Gebruik de cmdlet Receive-Job om de taakresultaten op te halen.

De parameter AsJob lijkt op het gebruik van de Invoke-Command-cmdlet om een Start-Job-cmdlet op afstand uit te voeren. Met AsJobwordt 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_Jobsvoor meer informatie over PowerShell-achtergrondtaken.

Type:SwitchParameter
Position:Named
Default value:False
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren: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:

  • Verstek
  • Basisch
  • Credssp
  • Verteren
  • Kerberos
  • Onderhandelen
  • NegotiateWithImplicitCredential

De standaardwaarde is Standaard.

Zie Opsomming AuthenticationMechanismvoor meer informatie over de waarden van deze parameter.

Voorzichtigheid

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

Type:AuthenticationMechanism
Geaccepteerde waarden:Default, Basic, Negotiate, NegotiateWithImplicitCredential, Credssp, Digest, Kerberos
Position:Named
Default value:Default
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-CertificateThumbprint

Hiermee geeft u het certificaat van de digitale openbare sleutel (X509) van een gebruikersaccount dat gemachtigd is 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 een Get-Item of Get-ChildItem opdracht in het PowerShell-certificaat: station.

Type:String
Position:Named
Default value:None
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-ComputerName

Hiermee geeft u de computers waarop de opdracht wordt uitgevoerd. De standaardwaarde is 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 vervolgens wordt gesloten. Als u een permanente verbinding nodig hebt, gebruikt u de parameter Session.

Typ de NETBIOS-naam, het IP-adres of de volledig gekwalificeerde domeinnaam 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 wilt gebruiken in de waarde van ComputerName, moet de opdracht de parameter Credential bevatten. De computer moet zijn 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 Listvoor instructies voor het toevoegen van een computernaam aan de TrustedHosts.

Op Windows Vista en latere versies van het Windows-besturingssysteem, om de lokale computer op te nemen in de waarde van ComputerName, moet u PowerShell uitvoeren met de Als administrator uitvoeren optie.

Type:String[]
Aliassen:Cn
Position:0
Default value:Local computer
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren: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 voorafgegaan: https://schemas.microsoft.com/PowerShell.

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, wordt de standaardinstelling Microsoft.PowerShell-. Zie about_Preference_Variablesvoor meer informatie.

Type:String
Position:Named
Default value:$PSSessionConfigurationName if set on the local computer, otherwise Microsoft.PowerShell
Vereist:False
Pijplijninvoer accepteren:True
Jokertekens accepteren:False

-ConnectionUri

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

De notatie van deze tekenreeks is als volgt:

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

De standaardwaarde is als volgt:

https://localhost:5985/WSMAN

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

Geldige waarden voor het segment Transport 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 standaardenpoorten: 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 AllowRedirection parameter in de opdracht gebruikt.

Type:Uri[]
Aliassen:URI, CU
Position:0
Default value:https://localhost:5985/WSMAN
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-Credential

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

Typ een gebruikersnaam, zoals User01 of Domain01\User01. U kunt ook een PSCredential--object invoeren, zoals een object dat is gegenereerd door de Get-Credential-cmdlet. Als u een gebruikersnaam typt, wordt u door deze cmdlet gevraagd om een wachtwoord.

Type:PSCredential
Position:Named
Default value:Current user
Vereist:False
Pijplijninvoer accepteren:True
Jokertekens accepteren:False

-EnableNetworkAccess

Geeft aan dat deze cmdlet een interactief beveiligingstoken toevoegt aan loopbacksessies. Met het interactieve token kunt u opdrachten uitvoeren in de loopbacksessie 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 en eindigt op dezelfde computer. Als u een loopbacksessie wilt maken, laat u de parameter ComputerName weg of stelt u de waarde in op punt (.), localhost of de naam van de lokale computer.

Loopbacksessies worden standaard gemaakt met behulp van een netwerktoken, wat mogelijk onvoldoende machtigingen biedt voor verificatie bij externe computers.

De parameter EnableNetworkAccess is alleen van kracht 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, waarmee de sessiereferenties worden gedelegeerd aan andere computers.

Als u de computer wilt beschermen tegen schadelijke toegang, kunnen verbroken loopbacksessies met interactieve tokens, die zijn gemaakt met behulp van EnableNetworkAccess, alleen opnieuw worden verbonden vanaf de computer waarop de sessie is gemaakt. Verbroken sessies waarvoor CredSSP-verificatie wordt gebruikt, kunnen opnieuw worden verbonden vanaf andere computers. Zie Disconnect-PSSessionvoor meer informatie.

Deze parameter is geïntroduceerd in PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:False
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-FilePath

Hiermee geeft u een lokaal script op dat door deze cmdlet wordt uitgevoerd op een of meer externe computers. Voer het pad en de bestandsnaam van het script in of geef een scriptpad door naar Invoke-Command. Het script moet zich op de lokale computer of in een map bevinden 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 deze uit op de externe computer.

Type:String
Aliassen:PSPath
Position:1
Default value:None
Vereist:True
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-HideComputerName

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

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

Type:SwitchParameter
Aliassen:HCN
Position:Named
Default value:None
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren: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, maakt een permanente sessie op elke externe computer, start u de opdracht die is opgegeven door de parameter ScriptBlock of FilePath en wordt de verbinding met de sessie verbroken. De opdrachten blijven worden uitgevoerd in de niet-verbonden sessies. InDisconnectedSession kunt u opdrachten uitvoeren zonder een verbinding met de externe sessies te onderhouden. En omdat de sessie is verbroken voordat 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 de parameter AsJob.

Opdrachten die gebruikmaken van InDisconnectedSession een PSSession--object retourneren dat de niet-verbonden sessie vertegenwoordigt. Ze retourneren de uitvoer van de opdracht niet. Gebruik de cmdlets Connect-PSSession of Receive-PSSession om verbinding te maken met de niet-verbonden sessie. Gebruik de cmdlet Receive-PSSession 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 optie OutputBufferingMode sessie in op Drop. 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 inactiviteitstime-out instellen in de parameter SessionOption of in de $PSSessionOption voorkeursvariabele. Zie New-PSSessionOption en about_Preference_Variablesvoor meer informatie over sessieopties.

Zie about_Remote_Disconnected_Sessionsvoor meer informatie over de functie Niet-verbonden sessies.

Deze parameter is geïntroduceerd in PowerShell 3.0.

Type:SwitchParameter
Aliassen:Disconnected
Position:Named
Default value:False
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren: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 automatische $Input variabele in de waarde van de parameter ScriptBlock om de invoerobjecten weer te geven.

Type:PSObject
Position:Named
Default value:None
Vereist:False
Pijplijninvoer accepteren:True
Jokertekens accepteren:False

-JobName

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

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

Zie about_Jobsvoor meer informatie over PowerShell-achtergrondtaken.

Type:String
Position:Named
Default value:Job<n>
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-NoNewScope

Geeft aan dat met deze cmdlet de opgegeven opdracht in het huidige bereik wordt uitgevoerd. Standaard voert Invoke-Command opdrachten uit in hun eigen bereik.

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

Deze parameter is geïntroduceerd in PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:False
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren: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 door de verbinding wordt gebruikt. De standaardpoorten zijn 5985, de WinRM-poort voor HTTP en 5986, de WinRM-poort voor HTTPS.

Voordat u een alternatieve poort gebruikt, configureert u de WinRM-listener op de externe computer om naar die poort te luisteren. 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 niet, tenzij u dit moet doen. De poort die in de opdracht is ingesteld, is van toepassing op alle computers of sessies waarop de opdracht wordt uitgevoerd. Een alternatieve poortinstelling kan verhinderen dat de opdracht wordt uitgevoerd op alle computers.

Type:Int32
Position:Named
Default value:None
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-ScriptBlock

Hiermee geeft u de opdrachten die moeten worden uitgevoerd. Plaats de opdrachten tussen accolades { } om een scriptblok te maken. Deze parameter is vereist.

Standaard worden alle variabelen in de opdracht geëvalueerd op de externe computer. Als u lokale variabelen in de opdracht wilt opnemen, gebruikt u ArgumentList.

Type:ScriptBlock
Aliassen:Command
Position:0
Default value:None
Vereist:True
Pijplijninvoer accepteren:False
Jokertekens accepteren: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 opdracht New-PSSession 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_PSSessionsvoor meer informatie.

Type:PSSession[]
Position:0
Default value:None
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-SessionName

Hiermee geeft u een beschrijvende naam op 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
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren: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 ingesteld op basis van opties die zijn ingesteld in de sessieconfiguratie.

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

Zie New-PSSessionOptionvoor een beschrijving van de sessieopties die de standaardwaarden bevatten. Zie about_Preference_Variablesvoor meer informatie over de $PSSessionOption voorkeursvariabele. Zie about_Session_Configurationsvoor meer informatie over sessieconfiguraties.

Type:PSSessionOption
Position:Named
Default value:None
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren: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
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren: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 via een HTTPS worden verzonden in plaats van HTTP.

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

Type:SwitchParameter
Position:Named
Default value:False
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-VMId

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

Type:Guid[]
Position:0
Default value:None
Vereist:True
Pijplijninvoer accepteren:True
Jokertekens accepteren:False

-VMName

Hiermee geeft u een matrix van namen van virtuele machines.

Type:String[]
Position:Named
Default value:None
Vereist:True
Pijplijninvoer accepteren:True
Jokertekens accepteren: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

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

Notities

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

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

Fouten die het gevolg zijn van de opdracht die Invoke-Command wordt uitgevoerd, worden opgenomen in de opdrachtresultaten. Fouten die fouten bij het beëindigen van 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 mogelijk de referenties van de gebruiker 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-loskoppelt met behulp van de parameter InDisconnectedSession, wordt de sessiestatus Verbroken en wordt de beschikbaarheid Geen. De waarde van de eigenschap State is relatief ten opzichte van de huidige sessie. Een waarde van verbroken betekent dat de PSSession- niet is verbonden met de huidige sessie. Het betekent echter niet dat de PSSession- is losgekoppeld van alle sessies. Het kan zijn dat deze is verbonden met een andere sessie. Gebruik de eigenschap Availability om te bepalen of u verbinding kunt maken met de sessie of opnieuw verbinding kunt maken met de sessie.

Een beschikbaarheidswaarde van Geen geeft aan dat u verbinding kunt maken met de sessie. Een waarde van Bezet geeft aan dat u geen verbinding kunt maken met de PSSession- omdat deze is verbonden met een andere sessie. Zie RunspaceStatevoor meer informatie over de waarden van de eigenschap State van sessies. Zie RunspaceAvailabilityvoor meer informatie over de waarden van de eigenschap Availability van sessies.