2012-05-10 15 views
8

En referencia al enlace this, intento introducir el modo detallado en mi script.Powershell: Definición del conmutador Verbose en una función

Cuando tengo una función definida como esto -

function TestVerbose 
{ 
    param(
     [switch]$verbose, 
     [Parameter(Mandatory = $True)] 
     $p1 
    ) 

    if($verbose) 
    { 
    Write-Verbose "Verbose Mode" 
    } 
} 

Get-Help TestVerbose 

me sale el siguiente error -

Get-Help : A parameter with the name 'Verbose' was defined multiple times for the command. At line:12 char:9 + Get-Help <<<< TestVerbose + CategoryInfo : MetadataError: (:) [Get-Help], MetadataException + FullyQualifiedErrorId : ParameterNameAlreadyExistsForCommand,Microsoft.PowerShell.Commands.GetHelpCommand

PERO, si defino la función como esta [eliminar el atributo obligatorio parámetro ], funciona bien

function TestVerbose 
{ 
    param(
     [switch]$verbose, 
     $p1 
    ) 
    if($verbose) 
    { 
    Write-Verbose "Verbose Mode" 
    }  
} 

Get-Help TestVerbose 

Cualquier i ¿por qué tal comportamiento? Quiero mantener el interruptor obligatorio y desea que el usuario ejecute mi función como esta -

TestVerbose -verbose

Respuesta

16

Parece que está utilizando PoweShell v2, en el que Detallado (junto con depuración, whatif, etc.) están reservados y sus funciones proporcionado automáticamente para usted. En lugar de escribir su propio interruptor de detección "detallado", la funcionalidad ya está allí. En el caso de verbose no tiene que especificarlo en la declaración del parámetro, a otros parámetros les gusta whatif requieren synatax especial.

C:\Users\james> function testverbose{ 
>>  param(
>>   [Parameter(Mandatory = $True)] 
>>   $bar 
>> ) 
>> 
>>  Write-Verbose "VERBOSE!" 
>>  $bar 
>> } 
>> 
C:\Users\james> testverbose -bar "woot" 
woot 
C:\Users\james> testverbose -bar "woot" -Verbose 
VERBOSE: VERBOSE! 
woot 
+0

Gracias! No sabia esto Sí, estoy usando V2. –

+1

Todavía quería poder probar para ver si el botón -Verbose estaba activado. Encontré mi respuesta en [esta pregunta] (http://stackoverflow.com/questions/24446680/is-it-possible-to-check-if-verbose-argument-was-given-in-powershell). –

Cuestiones relacionadas