如何让Ansible调用PowerShell脚本时输出Verbose日志
如何让Ansible调用PowerShell脚本时输出Verbose日志
我之前也碰到过一模一样的问题,折腾了好半天才找到靠谱的解决办法!核心问题在于Ansible的win_shell对PowerShell的多输出流处理有默认限制,Verbose流默认不会被捕获到,得手动调整调用方式才行。
下面是亲测有效的解决步骤:
1. 同时添加-Verbose参数和全流重定向
在你的Ansible任务里,修改win_shell的命令,同时加上-Verbose开关和*>&1重定向:
- name: Run Powershell script with Parameters and capture verbose logs win_shell: MyPS.ps1 -Param1 "{{ Param1 }}" -Verbose *>&1
-Verbose:强制PowerShell输出Verbose级别的内容,哪怕脚本里的$VerbosePreference被环境重置也能生效;*>&1:把PowerShell所有输出流(包括Verbose、Debug、Information这些非标准流)全部重定向到标准输出流,这样Ansible就能捕获到这些内容了。
2. 配合register变量查看完整输出
如果你需要把输出保存下来查看,可以用register捕获结果,然后用debug模块打印:
- name: Run Powershell script with Parameters and capture verbose logs win_shell: MyPS.ps1 -Param1 "{{ Param1 }}" -Verbose *>&1 register: ps_exec_result - name: Print all captured output including verbose debug: var: ps_exec_result.stdout_lines
这样就能在Ansible的输出里看到Write-Verbose的内容了。
为什么之前的尝试没生效?
- 只加
-Verbose但没重定向:PowerShell的Verbose输出走的是独立的Verbose流(流4),Ansible默认只捕获标准输出(流1)和错误流(流2),所以看不到; - 只加
*>&1但没加-Verbose:有时候Ansible调用的PowerShell环境会重置$VerbosePreference的值,导致脚本里的设置不生效,Verbose内容根本没输出;
备注:内容来源于stack exchange,提问作者SKN
相关产品推荐
相关产品推荐

