Как запустить команду Powershell в Rundeck с трубами - PullRequest
0 голосов
/ 25 сентября 2019

Я использую Rundeck версии 3.0.13 для отправки команд powershell через WinRM на хосты Windows Server 2016.Есть ли способ запустить команду powershell с символами канала как одной командой?Например, я хотел бы иметь возможность выполнить команду, подобную этой, чтобы запустить не отключенные службы:

Get-Service | where-object {$_.StartType -ne "Disabled"} | foreach-object {Start-Service $_}

Но я получаю сообщение об ошибке, где команда "where-object" не найдена.Исполнитель узла WinRM запускает команду в качестве аргумента для powershell в приглашении CMD, поэтому происходит то, что часть команды Get-Service выполняется в Powershell, но затем он пытается передать по каналу «где-объект» в CMDзапрос, подобный этому:

CMD> powershell Get-Service | where-object ... 

Есть ли способ избежать оператора powershell в Rundeck, чтобы конвейерные команды выполнялись в powershell вместо только первой части?Я попытался заключить его в -команду "& {...}" безрезультатно.(В этом случае я получаю синтаксическую ошибку и в результате экран справки powershell.)

Спасибо!

1 Ответ

1 голос
/ 25 сентября 2019

Самый простой способ сделать это - вызвать скрипт, как говорит @gravity, или использовать шаг встроенного скрипта, выбрать новый шаг «Скрипт - выполнить встроенный скрипт», нажать кнопку «Дополнительно», установить «powershell.exe» в «Invocation String "и" .ps1 "в текстовом поле" Расширение файла "(и, конечно, ваш материал Powershell в поле" Введите весь сценарий для выполнения ").

Если удаленное выполнение сценария отключено в вашем узле Windows, вы можете включить его с помощью set-executionpolicy remotesigned на своем узле Windows.

Обновить ответ:

Если вы хотите выполнить непосредственно на «шаге команды» (потому что политики безопасности ограничены, как вы сказали)Убедитесь, что в конфигурации вашего проекта настроен «WinRM Node Executor Python» (в «Default Node Executor»), определите «Powershell» в текстовом поле «Shell».Кроме того, определите «Python WinRM Node Executor» в «Копировщике файлов по умолчанию» в качестве хорошей практики.

Теперь вам не нужно вызывать «poweshell.exe» в вашей команде, просто поместите команду pipe, напримерGet-Content myfile.txt | Select-string -SimpleMatch "${option.mystring}".

...