如何从 Ansible 剧本调用的 powershell 输出详细日志记录

如何从 Ansible 剧本调用的 powershell 输出详细日志记录

我有一个 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 语句”。

我尝试了以下方法:

  1. 使用“-Verbose”开关调用 powershell 脚本
  2. 将 VerbosePreference 设置为继续(如上所示)
  3. *>&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_shellhttps://docs.ansible.com/ansible/latest/collections/ansible/windows/win_powershell_module.html

模块处理输出的方式存在一系列差异,其中包括详细流的参数:

$Ansible.Verbosity显示 Ansible 的此剧的详细程度。允许脚本根据详细程度设置 VerbosePreference/DebugPreference。已添加1.9.0

相关内容