问题描述
我正在尝试在 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
它不一定是字符串。