Existe uma IsNullOrEmpty
função interna incorporada para verificar se uma sequência é nula ou vazia no PowerShell?
Não consegui encontrá-lo até agora e, se houver uma maneira interna, não quero escrever uma função para isso.
.net
string
powershell
null
pencilCake
fonte
fonte
String.IsNullOrEmpty
?Respostas:
Você pode usar o
IsNullOrEmpty
método estático:fonte
!
. Isso funciona apenas nas versões mais recentes do PowerShell.!
é um alias para-not
Vocês estão fazendo isso muito difícil. O PowerShell lida com isso de maneira bastante elegante, por exemplo:
fonte
IsNullOrWhitespace()
para esse cenário. Mas, após 11 anos de script com o PowerShell, acho que preciso muito raramente desse teste de string . :-)Além de, a
[string]::IsNullOrEmpty
fim de verificar se há nulo ou vazio, você pode converter uma string em um booleano explicitamente ou em expressões booleanas:Resultado:
fonte
If
cláusula converte internamente tudo dentro dos parênteses em booleano único, o que significaif($string){Things to do for non-empty-nor-null}
ouif(!$string){Things to do for empty-or-null}
sem conversão explícita[bool]
seria suficiente.Se for um parâmetro em uma função, você pode validá-lo
ValidateNotNullOrEmpty
como pode ver neste exemplo:fonte
Pessoalmente, não aceito um espaço em branco ($ STR3) como 'não vazio'.
Quando uma variável que contém apenas espaços em branco é passada para um parâmetro, muitas vezes ocorre um erro de que o valor dos parâmetros não pode ser '$ null', em vez de dizer que pode não ser um espaço em branco, alguns comandos de remoção podem remover uma pasta raiz em vez de um subpasta se o nome da subpasta for um "espaço em branco", todo o motivo para não aceitar uma sequência que contenha espaços em branco em muitos casos.
Acho que essa é a melhor maneira de fazer isso:
Esvaziar
Esvaziar
Esvaziar!! :-)
Não está vazio
fonte
Eu tenho um script do PowerShell que preciso executar em um computador tão desatualizado que não tenha [String] :: IsNullOrWhiteSpace (), então escrevi o meu.
fonte
fonte
A substituição do PowerShell 2.0 para
[string]::IsNullOrWhiteSpace()
éstring -notmatch "\S"
(" \ S " = qualquer caractere que não seja um espaço em branco)
O desempenho é muito próximo:
fonte
Outra maneira de fazer isso de uma maneira pura do PowerShell seria fazer algo assim:
Isso avalia com êxito se há nulo, sequência vazia e espaço em branco. Estou formatando o valor passado em uma string vazia para manipular nulo (caso contrário, um nulo causará um erro quando o Trim for chamado). Em seguida, basta avaliar a igualdade com uma string vazia. Acho que ainda prefiro o IsNullOrWhiteSpace, mas se você estiver procurando outra maneira de fazer isso, isso funcionará.
Em um ataque de tédio, eu brinquei com isso um pouco e o tornei mais curto (embora mais enigmático):
ou
dependendo do que você está tentando fazer.
fonte
Observe que os testes
"if ($str)"
e"IsNullOrEmpty"
não funcionam comparativamente em todas as instâncias: uma atribuição de$str=0
produz false para ambos e, dependendo da semântica pretendida do programa, isso pode causar uma surpresa.fonte
Verifique o comprimento. Se o objeto existir, ele terá um comprimento.
Objetos nulos não têm comprimento, não existem e não podem ser verificados.
O objeto String tem um comprimento.
A pergunta era: IsNull ou IsEmpty, NOT IsNull ou IsEmpty ou IsWhiteSpace
fonte
Null objects have no length
- você já tentou executar$null.length
? :-) Para um teste rápido de bool, passar para Get-Member e depois ter que lidar com o erro resultante para o caso $ null parece um pouco pesado para mim.