【发布时间】:2019-09-25 15:36:27
【问题描述】:
我正在使用 Rundeck 3.0.13 版通过 WinRM 将 powershell 命令发送到 Windows Server 2016 主机。有没有办法将带有管道字符的powershell命令作为单个命令运行?例如,我希望能够执行这样的命令来启动非禁用服务:
Get-Service | where-object {$_.StartType -ne "Disabled"} | foreach-object {Start-Service $_}
但是我得到了错误返回“找不到对象”命令。 WinRM 节点执行程序在 CMD 提示符下将命令作为参数运行给 powershell,因此发生的情况是命令的 Get-Service 部分在 Powershell 中运行,但随后它尝试通过管道传输到 CMD 中的“where-object”提示,像这样:
CMD> powershell Get-Service | where-object ...
有什么办法可以在 Rundeck 中转义 powershell 语句,以便管道命令在 powershell 中运行,而不仅仅是第一部分?我尝试将它包含在 -command "& {...}" 中,但无济于事。 (在这种情况下,我会收到语法错误,并因此出现 powershell 帮助屏幕。)
谢谢!
【问题讨论】:
-
为什么不执行一个预先设计好的脚本,一个
.ps1文件呢?我不明白为什么这么多人尝试将一系列命令传递给PowerShell主可执行文件,而您可以更轻松地维护一个简单的脚本文件。您是否有理由必须以这种方式发送脚本命令? -
是的,我同意。在我们的例子中,网络管理员有一个防火墙规则来阻止 C$ 管理共享,从而阻止我们使用 WinRM 将脚本从 rundeck 主机推送到 windows 目标。
标签: powershell rundeck