调用命令不带参数运行

问题描述

我正在尝试在 PowerShell 脚本中运行 Invoke-Command 以在远程服务器上运行脚本。它从 XML 文件中检索要运行的计算机名称和脚本。代码示例如下。脚本执行但远程服务器上没有运行任何内容。我尝试了 2 种不同的方式来运行 Invoke-Command。

[string] $computer = "lumen"
[string] $scriptBlock = "cd C:\Scripts\Update-Apps; ./Update-Apps"

$session = New-PSSession -ComputerName $computer
Invoke-Command -Session $session -ScriptBlock { $scriptBlock }

#Invoke-Command -ComputerName $computer -ScriptBlock { $scriptBlock }

我用 Invoke-Command 做错了什么? 谢谢!

解决方法

您正在传入带有字符串的 scriptblock。当它调用它时,它基本上与在您的终端中写入 $scriptBlock 具有相同的效果。您必须实际执行 scriptblock 中的字符串。您可以使用 Invoke-Expression

[string] $computer = "lumen"
[scriptblock] $scriptBlock = { "cd C:\Scripts\Update-Apps; ./Update-Apps" | Invoke-Expression }

$session = New-PSSession -ComputerName $computer
Invoke-Command -Session $session -ScriptBlock $scriptblock

或者您可以直接在 scriptblock 中将命令编写为 PowerShell 代码。

[string] $computer = "lumen"
[scriptblock] $scriptBlock = { cd C:\Scripts\Update-Apps; ./Update-Apps }

$session = New-PSSession -ComputerName $computer
Invoke-Command -Session $session -ScriptBlock $scriptblock

它不一定是字符串。