win_shell — Выполнение команд оболочки на целевых хостах
Новая в версии 2.2.
Обзор
- Модуль
win_shellпринимает имя команды, за которым следует список аргументов, разделенных пробелами. Он похож на модуль win_command, но выполняет команду через оболочку (по умолчанию PowerShell) на целевом хосте. - Для целевых хостов, отличных от Windows, используйте модуль shell.
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| chdir | Устанавливает указанный путь как текущую рабочую директорию перед выполнением команды | |
| creates | Путь или шаблон фильтрации пути; если указанный путь существует на целевом хосте, задача будет пропущена. | |
| executable | Изменяет оболочку, используемую для выполнения команды (например, cmd).Целевая оболочка должна принимать параметр /c, за которым следует исходная командная строка для выполнения. | |
| free_form обязательно | Модуль win_shell принимает команду в свободном формате для выполнения.Параметра с именем 'free form' на самом деле нет. См. примеры! | |
| removes | Путь или шаблон фильтрации пути; если указанный путь **не** существует на целевом хосте, задача будет пропущена. | |
| stdin (добавлено в 2.5) | Устанавливает стандартный ввод (stdin) команды непосредственно в указанное значение. |
Примечания
Примечание
- Если вам нужно безопасно и предсказуемо запустить исполняемый файл, лучше использовать модуль win_command вместо этого. Лучшие практики при написании playbooks будут заключаться в использовании win_command, если явно не требуется
win_shell. При выполнении произвольных команд используйте собственное суждение. - WinRM не вернется из выполнения команды, пока не завершатся все созданные дочерние процессы. Таким образом, нельзя использовать
win_shellдля запуска долгоживущих дочерних или фоновых процессов. Рассмотрите возможность создания службы Windows для управления фоновыми процессами. - Для целевых хостов, отличных от Windows, используйте модуль shell вместо этого.
- См. также win_command, raw
Примеры
# Execute a command in the remote shell; stdout goes to the specified
# file on the remote.
- win_shell: C:\somescript.ps1 >> C:\somelog.txt
# Change the working directory to somedir/ before executing the command.
- win_shell: C:\somescript.ps1 >> C:\somelog.txt chdir=C:\somedir
# You can also use the 'args' form to provide the options. This command
# will change the working directory to somedir/ and will only run when
# somedir/somelog.txt doesn't exist.
- win_shell: C:\somescript.ps1 >> C:\somelog.txt
args:
chdir: C:\somedir
creates: C:\somelog.txt
# Run a command under a non-Powershell interpreter (cmd in this case)
- win_shell: echo %HOMEDIR%
args:
executable: cmd
register: homedir_out
- name: run multi-lined shell commands
win_shell: |
$value = Test-Path -Path C:\temp
if ($value) {
Remove-Item -Path C:\temp -Force
}
New-Item -Path C:\temp -ItemType Directory
- name: retrieve the input based on stdin
win_shell: '$string = [Console]::In.ReadToEnd(); Write-Output $string.Trim()'
args:
stdin: Input message
Возвращаемые значения
Общие возвращаемые значения описаны здесь, следующие — поля, уникальные для этого модуля:
| Ключ | Возвращаемое значение | Описание |
|---|---|---|
| cmd строка | всегда | Команда, выполненная задачей Пример: rabbitmqctl join_cluster rabbit@master |
| delta строка | всегда | Время выполнения команды (в секундах) Пример: 0:00:00.325771 |
| end строка | всегда | Время завершения выполнения команды Пример: 2016-02-25 09:18:26.755339 |
| msg булево | всегда | изменён Пример: True |
| rc целое число | всегда | Код возврата команды (0 означает успех) |
| start строка | всегда | Время начала выполнения команды Пример: 2016-02-25 09:18:26.429568 |
| stderr строка | всегда | Стандартная ошибка команды Пример: ls: cannot access foo: No such file or directory |
| stdout строка | всегда | Стандартный вывод команды Пример: Clustering node rabbit@slave1 with rabbit@master ... |
| stdout_lines список | всегда | Стандартный вывод команды, разделенный по строкам Пример: ["u'Clustering node rabbit@slave1 with rabbit@master ...'"] |
Статус
Этот модуль помечен как превью, что означает, что его интерфейс не гарантируется обратной совместимости.
Техническое обслуживание
Этот модуль помечен как ядерный, что означает, что его поддерживает Команда ядра Ansible. Подробнее см. в разделе Техническое обслуживание и поддержка модулей.
Список других модулей, поддерживаемых Командой ядра Ansible, см. здесь.
Поддержка
Дополнительную информацию о поддержке этого модуля компанией Red Hat см. в этой статье базы знаний
Автор
- Matt Davis (@nitzmahone)
Подсказка
Если вы заметили какие-либо проблемы в этой документации, вы можете отредактировать этот документ, чтобы улучшить его.
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.6/modules/win_shell_module.html