Powershell: как реализовать стандартные коммутаторы?
Для таких вещей ,как-WhatIf, у нас есть $PSCmdlet.ShouldProcess (), данный нам атрибутом [CmdletBinding]. Существуют ли другие подобные инструменты или методы для реализации общих аргументов командной строки, таких как-Verbose,- Debug, - PassThru и т. д.?
1 ответ:
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
для получения дополнительной информации.