14

Para cosas como "Qué pasa si", tenemos $ PSCmdlet.ShouldProcess() que nos da el atributo [CmdletBinding]. ¿Existen otras herramientas o prácticas para implementar argumentos de línea de comando comunes como -Verbose, -Debug, -PassThru, etc.?Powershell: ¿cómo implementar switches estándar?

Respuesta

14

Write-Debug y Write-Verbose manejan los parámetros -Debug y -Verbose automáticamente.

-PassThru técnicamente no es un parámetro común, pero puede implementarlo como:

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

1..10|PassTest -PassThru 

Y este es un ejemplo del uso valor PassThru de su función en un cmdlet:

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 

Tienes un vistazo a Get-Help about_CommonParameters para más información.

+0

Creo que es posible que desee almacenar la variable de entrada, hacer algo y luego pasar la variable almacenada al final (si $ passthru). – Matt

+2

Sí, 'PassTest' no es una función útil; solo un ejemplo trivial para ilustrar cómo se puede implementar '-PassThru'. Además, también es posible que haga algo con la variable de entrada, pero pase el valor original sin cambios (por ejemplo, '$ _. Kill(); if ($ PassThru) {$ _}'). He agregado un ejemplo no trivial del uso del parámetro PassThru para configurar el PassThru de otro comando. – Rynant

Cuestiones relacionadas