Skicka parametrar till fjärrdatorer i Windows PowerShell
Invoke-Command kan inte inkludera variabler i skriptblocket eller skriptfilen om inte fjärrdatorn kan lösa dem. Lyckligtvis tillhandahåller Invoke-Command ett inbyggt sätt att skicka data från den lokala datorn till fjärrdatorerna.
Följande kommando är avsett att visa de 10 senaste posterna i säkerhetshändelseloggen på varje måldator, men det fungerar inte som det är skrivet:
$Log = 'Security'
$Quantity = 10
Invoke-Command –Computer ONE,TWO –ScriptBlock {
Get-WinEvent –LogName $Log –MaxEvents $Quantity
}
Variablerna $Log och $Quantity finns bara på den lokala datorn. Deras värden infogas inte i skriptblocket innan de skickas till fjärrdatorerna, så fjärrdatorerna kan inte matcha dem.
Skicka variabler med ArgumentList
Rätt syntax för det här kommandot är följande:
$Log = 'Security'
$Quantity = 10
Invoke-Command –Computer ONE,TWO –ScriptBlock {
Param($x,$y) Get-WinEvent –LogName $x –MaxEvents $y
} –ArgumentList $Log,$Quantity
Note
I de här exemplen används Get-WinEvent, den moderna ersättningen för den inaktuella Get-EventLog-cmdleten .
Get-WinEvent använder -MaxEvents i stället -Newest för att begränsa resultaten.
De lokala variablerna skickas till parametern -ArgumentListInvoke-Command. I skriptblocket deklarerar ett Param() -block samma antal variabler som värdena i -ArgumentList– i det här fallet två. Du kan tilldela alla namn till variablerna i blocket Param(). De tar emot värden från -ArgumentList i ordning, så eftersom $Log visas först, går dess värde till $x, vilket är den första posten i Param().
Blockvariablerna Param() är sedan tillgängliga i hela skriptblocket.
Använd prefixet $Using:
Den här syntaxen fungerar för Windows PowerShell 2.0 och senare. Windows PowerShell 3.0 introducerade ett enklare alternativ. Om du har en lokal variabel $variable och vill använda dess värde i ett kommando som körs på en fjärrdator använder du prefixet $Using: :
Invoke-Command –ScriptBlock { Do-Something $Using:variable } –ComputerName REMOTE
Både lokala datorer och fjärrdatorer bearbetar prefixet $Using: korrekt och ersätter $Using:variable med värdet för den lokala $variable.