如何在cmdlet类中打印powershell cmdlet参数

时间:2013-08-11 16:09:39

标签: powershell cmdlet pscmdlet

有人可以帮我记录与参数一起发出的实际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中执行相同操作

由于

3 个答案:

答案 0 :(得分:2)

在PSCmdlet上使用MyInvocation.Line属性,例如:

void ProcessRecord() {
    var line = this.MyInvocation.Line
}

答案 1 :(得分:2)

InvocationInfo上查看MyInvocation成员PSCmdlet成员。它提供了对您有用的LineBoundParameters等信息。

http://msdn.microsoft.com/en-us/library/system.management.automation.invocationinfo_members(v=vs.85).aspx

答案 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的实现似乎是缺少的地方。