Powershell: как реализовать стандартные коммутаторы? - PullRequest
15 голосов
/ 03 августа 2011

Для таких вещей, как -WhatIf, у нас есть $ PSCmdlet.ShouldProcess (), переданный нам атрибутом [CmdletBinding].Существуют ли другие подобные инструменты или методы для реализации общих аргументов командной строки, такие как -Verbose, -Debug, -PassThru и т. Д.?

1 Ответ

15 голосов
/ 04 августа 2011

Write-Debug и Write-Verbose обрабатывают параметры -Debug и -Verbose автоматически.

-PassThru технически не является общим параметром, но вы можете реализовать его следующим образом:

function PassTest {
    param(
        [switch] $PassThru
    )
    process {
        if($PassThru) {$_}
    }
}

1..10|PassTest -PassThru

И это пример использования значения PassThru вашей функции в командлете:

function Add-ScriptProperty {
    param(
        [string] $Name,
        [ScriptBlock] $Value,
        [switch] $PassThru
    )
    process{
        # Use ":" to explicitly set the value on a switch parameter
        $_| Add-Member -MemberType ScriptProperty -Name $Name -Value $Value `
            -PassThru:$PassThru 
    }
}

$calc = Start-Process calc -PassThru|
        Add-ScriptProperty -Name SecondsOld `
            -Value {((Get-Date)-$this.StartTime).TotalSeconds} -PassThru
sleep 5
$calc.SecondsOld

Для получения дополнительной информации посмотрите Get-Help about_CommonParameters.

...