我有一个 ansible 剧本,类似于:
- name: Run Powershell script with Parameters.
win_shell: MyPS.ps1 -Param1 "{{ Param1 }}"
在 Powershell 脚本中我有很多 Write-Verbose 和 Write-Information 调用,例如:
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true)]
[string]$Param1
)
$DebugPreference = "Continue"
$VerbosePreference = "Continue"
$InformationPreference = "Continue"
Write-Verbose "MyVerbose statement"
Write-Information "MyInformation statement"
如果我直接运行 powershell,那么我会得到“MyVerbose 语句”和“MyInformation 语句”输出,但是每当我通过 ansible 运行它时,只会返回“MyInformation 语句”。
我尝试了以下方法:
- 使用“-Verbose”开关调用 powershell 脚本
- 将 VerbosePreference 设置为继续(如上所示)
*>&1
在 ansible playbook 中的 powershell 调用结束时使用重定向所有日志记录级别
不幸的是,似乎没有任何东西可以输出详细的日志。
我还在 win_shell 输出中注册了一个变量,以查看详细输出是否在其他属性中返回,但遗憾的是没有。
有人知道怎么修这个东西吗?
谢谢
答案1
使用[CmdletBinding()]
会自动将-Verbose
参数添加到脚本中(如果该行不在函数内)。您可能只需要在运行脚本时使用它,并可能将其强制输出到 stdout:
- name: Run Powershell script with Parameters.
win_shell: $(MyPS.ps1 -Param1 "{{ Param1 }}" -Verbose) 4>&1
查看此处的示例:https://stackoverflow.com/a/71143803/7411885
我还建议尝试ansible.windows.win_powershell
模块 vs win_shell
:https://docs.ansible.com/ansible/latest/collections/ansible/windows/win_powershell_module.html
模块处理输出的方式存在一系列差异,其中包括详细流的参数:
$Ansible.Verbosity
显示 Ansible 的此剧的详细程度。允许脚本根据详细程度设置 VerbosePreference/DebugPreference。已添加1.9.0
。