脚本编程:Powershell:Invoke-command使用本地变量

tlin82大约 1 分钟Scripting Language脚本编程PowershellPowershell

前言

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 }

参考