16

对于像 -WhatIf 这样的事情,我们有 $PSCmdlet.ShouldProcess() 由 [CmdletBinding] 属性提供给我们。是否还有其他此类工具或实践可用于实现常见的命令行参数,例如 -Verbose、-Debug、-PassThru 等?

4

1 回答 1

16

Write-Debug并自动Write-Verbose处理-Debug-Verbose参数。

-PassThru在技​​术上不是一个通用参数,但您可以像这样实现它:

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

1..10|PassTest -PassThru

这是在 cmdlet 上使用函数的 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更多信息。

于 2011-08-03T20:48:29.107 回答