C# cmdlet如何获取正在使用的完整命令

4

我将在C#中编写cmdlets,并想知道是否可以在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...
}

然后我调用这个命令:

Get-Data -DataSource IMAP

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

但是参数和它们的值怎么办?我可以硬编码来获取数据值,但当使用参数集和可选参数时,这将更加复杂。有没有自动检索这些信息的方法?

谢谢!

1个回答

6
不要继承自Cmdlet,而是继承自它的子类PSCmdlet,后者添加了许多更多的功能(但必须从PowerShell运行时调用,而不是Cmdlet)。
特别地,PSCmdlet.MyInvocation提供了一个InvocationInfo实例来访问两个集合:BoundParameters(与cmdlet参数相关联的参数)和UnboundArguments(其他所有内容)。
这相当于PowerShell本身的内部变量$MyInvocation

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接