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

时间:2013-09-19 15:21:10

标签: c# powershell

我在c#中编写cmdlet,我想知道在c#中是否可以使用cmdlet类中的name和paramter以及值来检索命令。

例如,我有一个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);

但参数及其值如何?我可以做一个硬代码来获取数据值,但是当使用参数集和可选参数时会更复杂。是自动检索这些信息的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:5)

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

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

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