¿Hay un incorporado IsNullOrEmpty
similar para verificar si una cadena es nula o vacía, en PowerShell?
No pude encontrarlo hasta ahora y si hay una forma integrada, no quiero escribir una función para esto.
.net
string
powershell
null
lápiz de pastel
fuente
fuente
String.IsNullOrEmpty
?Respuestas:
Puedes usar el
IsNullOrEmpty
método estático:fuente
!
. Eso solo funciona en las versiones más nuevas de PowerShell.!
es un alias para-not
Ustedes están haciendo esto demasiado difícil. PowerShell maneja esto con bastante elegancia, por ejemplo:
fuente
IsNullOrWhitespace()
para ese escenario. Pero después de 11 años de secuencias de comandos con PowerShell, encuentro que necesito esa prueba de cadena muy raramente . :-)Además de
[string]::IsNullOrEmpty
, para verificar si es nulo o está vacío, puede convertir una cadena a un booleano explícitamente o en expresiones booleanas:Salida:
fuente
If
La cláusula convierte internamente todo dentro del paréntesis en booleano único, lo que significa queif($string){Things to do for non-empty-nor-null}
oif(!$string){Things to do for empty-or-null}
sin conversión explícita[bool]
sería suficiente.Si es un parámetro en una función, puede validarlo
ValidateNotNullOrEmpty
como se puede ver en este ejemplo:fuente
Personalmente, no acepto un espacio en blanco ($ STR3) como "no vacío".
Cuando una variable que solo contiene espacios en blanco se pasa a un parámetro, a menudo se producirá un error que el valor de los parámetros puede no ser '$ nulo', en lugar de decir que no puede ser un espacio en blanco, algunos comandos de eliminación pueden eliminar una carpeta raíz en lugar de un subcarpeta si el nombre de la subcarpeta es un "espacio en blanco", todo el motivo para no aceptar una cadena que contenga espacios en blanco en muchos casos.
Creo que esta es la mejor manera de lograrlo:
Vacío
Vacío
¡¡Vacío!! :-)
No vacío
fuente
Tengo un script de PowerShell que tengo que ejecutar en una computadora tan desactualizada que no tiene [String] :: IsNullOrWhiteSpace (), así que escribí el mío.
fuente
fuente
Reemplazo de PowerShell 2.0 para
[string]::IsNullOrWhiteSpace()
esstring -notmatch "\S"
(" \ S " = cualquier carácter que no sea un espacio en blanco)
El rendimiento está muy cerca:
fuente
Otra forma de lograr esto de una manera pura de PowerShell sería hacer algo como esto:
Esto evalúa con éxito la cadena nula, vacía y el espacio en blanco. Estoy formateando el valor pasado en una cadena vacía para manejar nulo (de lo contrario, un nulo causará un error cuando se llame a Trim). Luego solo evalúa la igualdad con una cadena vacía. Creo que todavía prefiero el IsNullOrWhiteSpace, pero si está buscando otra forma de hacerlo, esto funcionará.
En un ataque de aburrimiento, jugué con esto y lo hice más corto (aunque más críptico):
o
dependiendo de lo que intentes hacer.
fuente
Tenga en cuenta que las pruebas
"if ($str)"
y"IsNullOrEmpty"
no funcionan de manera comparable en todos los casos: una asignación de$str=0
produce falso para ambos, y dependiendo de la semántica del programa previsto, esto podría dar una sorpresa.fuente
Verifica la longitud. Si el objeto existe, tendrá una longitud.
Los objetos nulos no tienen longitud, no existen y no se pueden verificar.
El objeto de cadena tiene una longitud.
La pregunta era: IsNull o IsEmpty, NOT IsNull o IsEmpty o IsWhiteSpace
fuente
Null objects have no length
: ¿has intentado ejecutar$null.length
? :-) Para una prueba rápida de bool, conectarme a Get-Member y luego tener que manejar el error resultante para el caso $ null me parece un poco pesado.