Microsoft PSRP Operator

当用户希望使用原生 PowerShell Runspace 从客户端在 Windows 服务器上执行命令时,需要使用 PowerShell 远程协议 (PSRP) 协议。

通过 PsrpOperator Operator 可以实现此类客户端能力,从而能够通过 Airflow 调度 Windows 作业。内部,它使用了 pypsrp 客户端库。

WinRMOperator 相比,使用 PSRP 扩展了 Windows 中的远程处理能力,提供了更好的会话控制以及与 PowerShell 生态系统的紧密集成(例如,.NET Runspace 接口)

  • 在单个会话中运行多个命令

  • 复用 Runspace 创建多个会话

  • 处理 PowerShell 对象而不是纯文本

  • 使用 JEA (Just-Enough-Administration) 使用受限终结点

  • 能够使用 .NET Runspace 接口

使用 Operator

实例化 PsrpOperator Operator 时,必须使用以下命名参数之一提供 cmdlet、命令或脚本

为 Operator 提供以下参数之一

参数名

描述

示例

cmdlet

调用 PowerShell cmdlet。

Copy-Item, Restart-Computer

command

使用 cmd 命令解释器执行指定的命令。

robocopy C:\Logfiles\* C:\Drawings /S /E

powershell

运行 PowerShell 脚本。

Copy-Item -Path "C:\Logfiles\*" -Destination "C:\Drawings" -Recurse

输出

PowerShell 提供多个输出流。

通常,Operator 使用内置日志机制记录通过作业状态轮询机制到达这些流的记录。成功流(即 stdout 或 shell 输出)的处理方式不同,如下所述:

启用 XComs 且 Operator 与原生 PowerShell cmdlet 或脚本一起使用时,shell 输出会使用 ConvertTo-Json cmdlet 转换为 JSON,然后在客户端由 Operator 解码,以使 Operator 的返回值与 XComs 所需的序列化兼容。

当 XComs 未启用时(即 do_xcom_push 设置为 false),shell 输出会被像其他输出流一样记录到日志中,并显示在任务实例日志中。

安全字符串

Operator 添加了一个模板过滤器 securestring,它将加密值并使其在远程会话中作为 SecureString 类型可用。这可以确保例如该值不会被意外记录。

使用模板过滤器需要将 DAG 配置为将字段渲染为原生对象(默认是将所有值强制转换为字符串,这在这里不起作用,因为我们需要一个已标记为要序列化为安全字符串的值)。使用 render_template_as_native_obj=True 启用此功能。

本条目有帮助吗?