Как напечатать аргументы командлета powershell внутри класса командлетов
Может ли кто-нибудь помочь мне записать фактическую команду PowerShell, выданную вместе с аргументами.
У меня есть командлет, реализованный в C# следующим образом
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""
Я ясно знаю имя командлета, но не знаю, как распечатать точную строку аргументов.
Environment.CommandLine работает внутри обычных exe, но как сделать то же самое в командлетах
Спасибо
2 ответа
Использовать MyInvocation.Line
собственность на PSCmdlet например:
void ProcessRecord() {
var line = this.MyInvocation.Line
}
Посмотрите на InvocationInfo
объект доступен как MyInvocation
член на PSCmdlet
, Это обеспечивает информацию как Line
, BoundParameters
и т.д., которые будут вам полезны.
Я добавлю предостережение в $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, похоже, там, где его не хватает.