脚本编程:Powershell:Invoke-command使用本地变量
大约 1 分钟
前言
Invoke-command
可以实现在远程系统上执行Powershell代码块。方式是invoke-command -ScriptBlock { <code>}
。很多时候需要把本地变量传递到远程代码块 -ScriptBlock
。
如果直接传递本地变量,会获取不到值。需要使用特殊方式。
正文
PowerShell 3.0以下版本
可以使用
-ArgumentList
关键字。
- 代码示例
$ps = "*PowerShell*"
Invoke-Command -ComputerName S1 -ScriptBlock {
param($log)
Get-WinEvent -LogName $log
} -ArgumentList $ps
解释
- 把本地变量通过
ArgumentList
传递。 - 通过
param
接收。如果是多个变量,要注意确保传递的参数顺序与远程脚本块中 param 关键字定义的参数顺序一致
PowerShell 3.0以上版本
- 使用
$Using
修饰符传递普通变量
$ps = "*PowerShell*"
Invoke-Command -ComputerName S1 -ScriptBlock {
Get-WinEvent -LogName $Using:ps
}
- 使用
@Using
修饰符传递hash参数(多个变量)
$Splat = @{ Name = "Win*"; Include = "WinRM" }
Invoke-Command -Session $s -ScriptBlock { Get-Service @Using:Splat }