2011-08-29 8 views
7

Estoy bastante seguro de que no tengo más opciones que las que he descubierto, pero quería elegir el cerebro de Internet colectivo.Cómo marcar un parámetro de interruptor como obligatorio en Powershell

Prefiero usar un parámetro [cambiar] al pasar valores booleanos a funciones personalizadas. Sin embargo, tengo algunos casos en los que quería marcar el parámetro de cambio como obligatorio. Esto se puede realizar opcionalmente a través del [parámetro (Obligatorio = $ verdadero)] en el parámetro. Sin embargo, realmente no me gusta el indicador de UI que aparece. Prefiero arrojar una excepción.

Pero, un interruptor puede ser verdadero o falso, y la propiedad "IsPresent" no hace distinción. Si paso un parámetro de interruptor como -ejemplo: $ false, el interruptor informa que $ example.IsPresent es falso!

He recurrido al uso de un [bool]. Por ejemplo:

param 
(
    [bool]$theValue = $(throw('You didn't specify the value!')) 
); 

¿Hay algún otro truco que pueda extraer?

+0

Por qué no tener dos interruptores? 'example' y' exampleOff'. Entonces, cuando ni 'IsPresent' arroja un error. – jpaugh

Respuesta

17

En cierto modo, un parámetro switch es siempre obligatorio. Si no lo especifica, obtiene un valor de falso. Si lo especifica (-var) obtiene un valor verdadero y si especifica el valor también (-var:$false) obtiene el valor especificado.

Realmente no puedo pensar en una situación en la que es obligatorio especificar un cambio. Si no especificas, es falso. Simple como eso.

Creo que lo que quiere es mencionar específicamente el valor de param para ser verdadero o falso? Si ese es el caso, la versión bool que lo mencionas es lo que iba a ir, aunque funciona de la misma manera con switch también:

param([switch]$a = $(throw "You didn't specify the value")) 

Y también en relación con $example.IsPresent - Sé que no es intuitivo/roto, pero es lo mismo que el valor de la variable del interruptor en sí. Así es como se define el constructor de Switch Paramater y la única propiedad que tiene es el IsPresent:

Crea un nuevo objeto SwitchParameter que incluye un valor booleano que identifica si el interruptor está presente.

http://msdn.microsoft.com/en-us/library/system.management.automation.switchparameter.ctor%28v=vs.85%29.aspx

+0

Si el mensaje de excepción es lo que le está molestando, esto es lo mejor que va a obtener. –

+1

¡Uy! He llegado a la conclusión errónea de que arrojar el error al usar "Cambiar" en la lista de parámetros no funcionaría. He intentado esto de nuevo, y parece bueno ir. La respuesta de manojlds es precisa y muy detallada. –

+0

-var: $ false era lo que estaba buscando. ¡Gracias! –

Cuestiones relacionadas