Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Rövid leírás
Ismerteti, hogyan használhat helyi és távoli változókat távoli parancsokban.
Hosszú leírás
A távoli számítógépeken futtatott parancsokban változókat használhat. Rendeljen hozzá egy értéket a változóhoz, majd használja a változót az érték helyett.
Alapértelmezés szerint a távoli parancsok változói a parancsot futtató munkamenetben lesznek definiálva. A helyi munkamenetben definiált változókat helyi változóként kell azonosítani a parancsban.
Távoli változók használata
A PowerShell feltételezi, hogy a távoli parancsokban használt változók abban a munkamenetben vannak definiálva, amelyben a parancs fut.
Ebben a példában a $ps változó abban az ideiglenes munkamenetben van definiálva, amelyben a Get-WinEvent parancs fut.
Invoke-Command -ComputerName S1 -ScriptBlock {
$ps = "*PowerShell*"; Get-WinEvent -LogName $ps
}
Ha a parancs állandó munkamenetben fut, PSSession, a távoli változót ebben a munkamenetben kell meghatározni.
$s = New-PSSession -ComputerName S1
Invoke-Command -Session $s -ScriptBlock {$ps = "*PowerShell*"}
Invoke-Command -Session $s -ScriptBlock {Get-WinEvent -LogName $ps}
Helyi változók használata
A helyi változókat távoli parancsokban is használhatja, de a változót a helyi munkamenetben kell definiálni.
A PowerShell 3.0-tól kezdve a Using: hatókör-módosító használatával azonosíthat egy helyi változót egy távoli parancsban.
A Using: szintaxisa a következő:
$Using:<VariableName>
Az alábbi példában a $ps változó a helyi munkamenetben jön létre, de abban a munkamenetben használatos, amelyben a parancs fut. A Using: hatókör-módosító helyi változóként azonosítja a $ps.
$ps = "*PowerShell*"
Invoke-Command -ComputerName S1 -ScriptBlock {
Get-WinEvent -LogName $Using:ps
}
A Using: hatókör-módosító használható PSSession.
$s = New-PSSession -ComputerName S1
$ps = "*PowerShell*"
Invoke-Command -Session $s -ScriptBlock {Get-WinEvent -LogName $Using:ps}
Egy változóhivatkozás, például $Using:var a hívó környezetéből $var változó értékére bővül. Nem fér hozzá a hívó változóobjektumához. A Using: hatókör-módosító nem használható helyi változó módosítására a PSSession. A következő kód például nem működik:
$s = New-PSSession -ComputerName S1
$ps = "*PowerShell*"
Invoke-Command -Session $s -ScriptBlock {$Using:ps = 'Cannot assign new value'}
További információk a Using:-ról/ről, lásd: about_Scopes.
Splatting használata
A PowerShell-splatting paraméternevek és -értékek gyűjteményét továbbítja egy parancsnak. További információ: about_Splatting.
Ebben a példában a $Splat splatting változó egy hashtábla, amely a helyi számítógépen van beállítva. A Invoke-Command távoli számítógép-munkamenethez csatlakozik. A ScriptBlock a Using: hatókör-módosítóval és az At (@) szimbólummal jelöli a kiszúrt változót.
$Splat = @{ Name = "Win*"; Include = "WinRM" }
Invoke-Command -Session $s -ScriptBlock { Get-Service @Using:Splat }
Egyéb helyzetek, amikor a Using: hatókör-módosítóra van szükség
Minden olyan szkripthez vagy parancshoz, amely munkameneten kívül fut, a Using: hatókör-módosítóra van szüksége a változóértékek beágyazásához a hívási munkamenet hatóköréből, hogy a munkameneten kívüli kód hozzáférhessen hozzájuk. A Using: hatókör-módosító a következő környezetekben támogatott:
- Távolról végrehajtott parancsok,
Invoke-Commanda ComputerName, HostName, SSHConnection vagy Session paramétereinek használatával (távoli munkamenet) - A
Start-Job(folyamaton kívüli munkamenet) kezdetű háttérfeladatok - Szálfeladatok, amelyeket a
Start-ThreadJobvagyForEach-Object -Parallelhasználatával indítottak el (külön szál munkamenet)
A környezettől függően a beágyazott változóértékek vagy a hívó hatókörében lévő adatok független másolatai, vagy azokra mutató hivatkozások. A távoli és a folyamaton kívüli munkamenetekben ezek mindig független másolatok. A szál-munkamenetekben a rendszer hivatkozással továbbítja azokat.
Változóértékek szerializálása
A távolról végrehajtott parancsok és háttérfeladatok folyamaton kívül futnak. A folyamaton kívüli munkamenetek XML-alapú szerializálással és deszerializálással teszik elérhetővé a változók értékeit a folyamathatárok között. A szerializálási folyamat átalakítja az objektumokat egy PSObject, amely az eredeti objektumtulajdonságokat tartalmazza, a metódusait azonban nem.
Korlátozott típusok esetén a deszerializálás visszahidratálja az objektumokat az eredeti típusra. A rehidratált objektum az eredeti objektumpéldány másolata. Típustulajdonságokkal és metódusokkal rendelkezik. Az olyan egyszerű típusok esetében, mint például System.Version, a másolat pontos. Összetett típusok esetén a másolat nem tökéletes. A rehidratált tanúsítványobjektumok például nem tartalmazzák a privát kulcsot.
Az összes többi típus példányai PSObject példányok. A pstypenames tulajdonság az eredeti típusnevet tartalmazza, amely deszerializáltszerepel, például Deserialized.System.Data.DataTable
Helyi változók használata az ArgumentList paraméterrel
A távoli parancsokban helyi változókat használhat a távoli parancs paramétereinek meghatározásával, valamint a parancsmag Invoke-Command paraméterével a helyi változó paraméterértékként való megadásához.
A távoli parancs paramétereinek meghatározásához használja a
paramkulcsszót. A paraméternevek olyan helyőrzők, amelyeknek nem kell egyeznie a helyi változó nevével.Használja a parancs
paramkulcsszója által definiált paramétereket.A parancsmag
Invoke-Commandparaméterével adja meg a helyi változót paraméterértékként.
Az alábbi parancsok például a helyi munkamenetben definiálják a $ps változót, majd egy távoli parancsban használják. A parancs a $Log paraméternévként és a helyi változóként $psértékként használja.
$ps = "*PowerShell*"
Invoke-Command -ComputerName S1 -ScriptBlock {
param($Log)
Get-WinEvent -LogName $Log
} -ArgumentList $ps