如何在 PowerShell 中使用 Invoke-Command 传递参数?

powershellmicrosoft technologiessoftware & coding

要在 Invoke-Command 中传递参数,您需要使用 -ArgumentList 参数。例如,我们需要获取远程服务器上 notepad 进程的信息。

示例

Invoke-Command -ComputerName Test1-Win2k12 -
ScriptBlock{param($proc) Get-Process -Name $proc} -
ArgumentList "Notepad"

输出

Handles NPM(K) PM(K) WS(K) CPU(s)  Id SI ProcessName PSComputerName
------- ------ ----- ----- ------  -- -- ----------- --------------
  67      8  1348  7488   0.08 104    notepad     Test1-Win2k12

在上面的例子中,我们将"记事本"作为参数传递给了命令,该参数已被 `Param()` 函数内部的 `$proc` 变量捕获。

如果您需要传递多个参数,请查看以下命令。

示例

Invoke-Command -ComputerName Test1-Win2k12 -ScriptBlock{param($proc,$proc2) Get-Process -Name $proc,$proc2} -ArgumentList "Notepad","Calc"

输出

Handles NPM(K) PM(K) WS(K) CPU(s)  Id SI ProcessName PSComputerName
------- ------ ----- ----- ------  -- -- ----------- --------------
  96     20  5980 11392   0.19 288    calc        Test1-Win2k12
  67      8  1344  7556   0.08 104    notepad     Test1-Win2k12

使用 Session 变量也可以实现同样的效果。

示例

$sess = New-PSSession -ComputerName Test1-win2k12
Invoke-Command -Session $sess -ScriptBlock{param($proc) Get-Process $proc} -ArgumentList "Notepad"

输出

Handles NPM(K) PM(K) WS(K) CPU(s)  Id SI ProcessName PSComputerName
------- ------ ----- ----- ------  -- -- ----------- --------------
  67      8  1348  7488   0.08 104    notepad     Test1-Win2k12

相关文章