有人可以帮我记录与参数一起发出的实际PowerShell命令。
我有一个用C#实现的cmdlet,如下所示
class GetMyCommand : PSCmdlet
{
// parameter definitions
...
void processRecord()
{
// Here I want print actual arguments passed to the cmdlet.
}
}
如果有人打电话
Get-MyCommand -Name Hello -File "test.txt"
我只想在processRecord函数中记录命令。
"Get-MyCommand -Name Hello -File "test.txt""
显然我知道cmdlet名称,但不知道如何打印确切的参数字符串。
Environment.CommandLine在常规exes中工作,但如何在cmdlet中执行相同操作
由于
答案 0 :(得分:2)
在PSCmdlet上使用MyInvocation.Line
属性,例如:
void ProcessRecord() {
var line = this.MyInvocation.Line
}
答案 1 :(得分:2)
在InvocationInfo
上查看MyInvocation
成员PSCmdlet
成员。它提供了对您有用的Line
,BoundParameters
等信息。
答案 2 :(得分:0)
我将向$ PSCmdlet.MyInvocation.Line添加一个警告:
它只知道传入的 SINGLE 行。我用它来从我的Get-MailboxTrustee.ps1脚本中的管道中获取计数,我发现,尽管这行得通:
$Mailboxes | .\Get-MailboxTrustee.ps1
这不是:
$Mailboxes |
.\Get-MailboxTrustee.ps1
如果在第二个示例中检查$ PSCmdlet.MyInvocation.Line,您将看到它只是:
.\Get-MailboxTrustee.ps1
(完全缺少我命令的$Mailboxes | <new line>
部分)
太糟糕了,没有$ PSCmdlet.MyInvocation.Line [ s ]。我们知道PowerShell很明显知道,所以$ PSCmdlet的实现似乎是缺少的地方。