我在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);
但参数及其值如何?我可以做一个硬代码来获取数据值,但是当使用参数集和可选参数时会更复杂。是自动检索这些信息的方法吗?
谢谢!
答案 0 :(得分:5)
不是从Cmdlet
派生,而是从其子类PSCmdlet
派生,它增加了更多的函数(但增加了一个要求,超过Cmdlet
从PowerShell运行时调用)。
特别是PSCmdlet.MyInvocation
可以访问InvocationInfo
的实例,其中包含两个集合BoundParameters
(连接到cmdlet参数的参数)和UnboundArguments
(其他所有内容)。
这是PowerShell本身的内部等效$MyInvocation
。