【问题标题】:Invoke-Command Doesn't Run with ParametersInvoke-Command 不带参数运行
【发布时间】:2021-05-04 20:53:03
【问题描述】:

我正在尝试在 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 时做错了什么? 谢谢!

【问题讨论】:

  • 你传递给它一个字符串。要在远程计算机上运行“stuff”,您必须使用$using:scriptblock(远程变量)或带有$args 的参数列表来指定。

标签: powershell remote-access invoke-command


【解决方案1】:

您正在传递带有字符串的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

不一定是字符串。

【讨论】:

猜你喜欢
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 2012-01-16
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多