2

有人可以帮我记录与参数一起发出的实际 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 在常规 exe 中工作,但如何在 cmdlet 中执行相同操作

谢谢

4

3 回答 3

2

使用MyInvocation.LinePSCmdlet 上的属性,例如:

void ProcessRecord() {
    var line = this.MyInvocation.Line
}
于 2013-08-11T16:30:09.087 回答
2

看看作为成员InvocationInfo可用的对象。它提供对您有用的信息,例如等。MyInvocationPSCmdletLineBoundParameters

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

于 2013-08-11T16:40:20.270 回答
0

我将在 $PSCmdlet.MyInvocation.Line 中添加一个警告:

它只知道传入的单行。我用它从我的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 的实现似乎是缺乏的地方。

于 2019-04-03T12:16:09.690 回答