首页 > 解决方案 > cmdlet 如何确定它是从作业还是从 RunSpace 调用的?

问题描述

我正在编写一些 cmdlet,如果它们是从作业或 RunSpace 的上下文中调用的,需要做一些额外的事情吗?

如果这些 cmdlet 未从 Job 或 RunSpace 运行,则进度和状态显示在控制台上。但是,如果它们在 Job 或 RunSpace 的上下文中运行,则会通过文件报告。我不想要求用户做其他事情,而是想自动检测这种情况。

标签: powershell

解决方案


您可以根据$Host.Name(在 PowerShell 代码中)/ cmdlet 基类.Name的属性的.HostPSCmdlet(在实现 cmdlet 的 C# 代码中)的值做出决定,这是托管 PowerShell 的组件的名称:[1]

  • PowerShell代码:
$outputToFile = $Host.Name -in 'ServerRemoteHost', 'Default Host'
  • C# 代码(在派生自的类中PSCmdlet):
bool outputToFile = Host.Name == "ServerRemoteHost" || Host.Name == "Default Host";

[1]自动$Host变量报告当前的 PowerShell 主机,它是一个从 .NET 派生的 .NET 类System.Management.Automation.Host.PSHost


推荐阅读