【问题标题】:c# cmdlet how to get the full command being usedc# cmdlet 如何获取正在使用的完整命令
【发布时间】:2013-09-19 15:21:10
【问题描述】:

我正在用 c# 编写 cmdlet,我想知道是否可以在 c# 中检索带有 cmdlet 类中的名称、参数和值的命令。

例如,我有一个 cmdlet

[Cmdlet(VerbsCommon.Get, "Data")]
public class GetDataCmdlet : Cmdlet
{

    [Parameter(Position = 0, Mandatory = true)]
    public string DataSource ...

    [Parameter(Position = 1, Mandatory = false)]
    public string Login...
}

然后我调用这个 cmdlet: Get-Data -DataSource IMAP

我如何尝试在 GetDataCmdlet 类中添加日志记录功能来记录被调用的完整 cmdlet。我知道我可以通过以下方式获取命令名称: string name = this.GetType().GetAttributeValue((CmdletAttribute cmd) => cmd.VerbName + "-" + cmd.NounName);

但是参数和它们的值呢?我可以做一个硬编码的事情来获取数据值,但是当使用参数集和可选参数时会更加复杂。是否有某种方法可以自动检索这些信息?

谢谢!

【问题讨论】:

    标签: c# powershell


    【解决方案1】:

    不是从Cmdlet 派生,而是从其子类PSCmdlet 派生,这增加了更多功能(但增加了一个要求,超过Cmdlet 从PowerShell 运行时调用)。

    特别是PSCmdlet.MyInvocation 提供对InvocationInfo 实例的访问权限,其中包含两个集合BoundParameters(连接到cmdlet 参数的参数)和UnboundArguments(其他所有)。

    这是 PowerShell 本身中 $MyInvocation 的内部等效项。

    【讨论】:

      猜你喜欢
      • 2013-09-07
      • 2020-06-03
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-29
      • 1970-01-01
      相关资源
      最近更新 更多