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

jam*_*123 3 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...
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢!

Ric*_*ard 5

而不是派生自Cmdlet派生的子类PSCmdlet,它增加了更多的功能(但增加了一个需求,Cmdlet从PowerShell运行时调用).

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

这是$MyInvocationPowerShell本身的内部等价物.