4

我正在用 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);

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

谢谢!

4

1 回答 1

6

与其派生自 ,不如Cmdlet派生自它的子类PSCmdlet,它添加了更多功能(但增加了一个要求,Cmdlet从 PowerShell 运行时调用)。

特别是PSCmdlet.MyInvocation可以访问InvocationInfo具有两个集合BoundParameters(连接到 cmdlet 参数的参数)和UnboundArguments(其他所有内容)的实例。

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

于 2013-09-19T15:54:54.607 回答