13

Quiero probar para ver si a una variable se le ha asignado una variable y si no se realiza una acción. ¿Cómo se puede lograr esto?powershell probando una variable que aún no se ha asignado

Lo he intentado con el siguiente código pero recibo el error: El operando derecho de '-is' debe ser un tipo.

$ ProgramName no está asignado en este punto.

If ($ProgramName -isnot $null) { 
    $ProgramName = $ProgramName + ', ' + $cncPrograms 
} 
Else { 
    If ($cncPrograms -isnot $null) { 
    $ProgramName = $cncPrograms 
    } 
} 

Respuesta

31

Cualquier variable no asignada tendrá un valor nulo, no un tipo de datos de null. Así, acaba de hacer esto:

If ($ProgramName -ne $null) 

... que volverá TRUE si ha sido asignado a un valor no nulo.

Un cheque aún más fácil de hacer es

IF($ProgramName) 

que comprobará si es $null o no, aunque la lógica se invierte, lo que podría utilizar

IF(!$ProgramName) 

Editar:

Ruffin plantea un buen punto sobre el modo estricto en los comentarios. Este método también funcionará:

Test-Path variable:ProgramName o Test-Path variable:global:ProgramName si tiene un ámbito explícitamente global, por ejemplo. Esto devolverá $true o $false dependiendo de si existe la variable.

+0

Gracias. Encontré tu explicación más útil después de leer el artículo que Andy Arismendi publicó. ¡Tiene sentido total ahora! Gracias por publicar. – resolver101

+2

No creo * que funcione con 'Set-StrictMode -version latest;', ¿correcto? ¿Cómo debería verificarlo cuando el modo estricto está activado? ** EDITAR ** Aparentemente ['Variable de la ruta de prueba: global: foo '] (http://stackoverflow.com/a/3163008/1028230) – ruffin

+3

@ruffin 'Variable de la ruta de prueba: ProgramName' devolverá' $ true 'o' $ falso'. Buena captura en modo estricto. Agregué eso a la respuesta. – JNK

7

Test-Path variable:\var debe hacer lo que quiera, supongo.

+0

Sí. funciona también Tantas formas de verificar. ¿No es este un buen método? solo preguntando porque terminaste tu oración con "supongo". – resolver101

+2

Esta es realmente la respuesta correcta. La otra forma de hacerlo es técnicamente un truco. Esta es la forma programática prevista para hacerlo. – ZaxLofful

Cuestiones relacionadas