Variáveis Nulas no PowerShell
- Introdução à Variável Nula no PowerShell
- Impactos da Variável Nula no PowerShell
- Verificando Valores Nulos no PowerShell
- Conclusão
O PowerShell trata o objeto $Null com o valor nulo, e alguns comandos requerem alguma saída para gerar. Eles geram o valor nulo se houver qualquer erro e também podem ser úteis na finalidade de resolução de problemas nos scripts para verificar se o comando gera algum valor.
Este artigo fala sobre a variável nula, os impactos de usar a variável nula em diferentes sintaxes no PowerShell e maneiras de verificar os valores nulos.
Introdução à Variável Nula no PowerShell
Podemos pensar em NULL como um valor desconhecido ou vazio. Por exemplo, uma variável é NULL até que você atribua um valor ou objeto.
Essa variável pode ser importante porque alguns comandos requerem um valor e falharão se o valor for NULL.
A variável $null é uma variável automática no PowerShell usada para representar NULL. Podemos atribuía a variáveis, usá-la em comparações e usá-la como um espaço reservado para NULL em uma coleção.
O PowerShell trata $null como um objeto com o valor NULL. Portanto, essa variável é diferente do que você pode esperar se você vem de outra linguagem.
Impactos da Variável Nula no PowerShell
O comportamento dos valores $null pode variar dependendo de onde eles aparecem dentro do seu código. Vamos explorar como as variáveis NULL afetam diferentes aspectos da programação PowerShell.
Impacto em Strings
Se você usar $null em uma string, será uma string vazia (ou um valor em branco).
$value = $null
Write-Output "The value is $value."
Saída:
The value is .
Para manter a clareza em seus scripts, é aconselhável colocar variáveis entre colchetes ([]) ao usá-las em mensagens de log, especialmente quando o valor da variável está no final da string.
$value = $null
Write-Output "The value is [$value]"
Saída:
The value is []
Essa prática ajuda a distinguir entre strings vazias e valores $null.
Impacto em Equações Numéricas
Quando uma variável $null é usada em uma equação numérica, nossos resultados serão inválidos se não gerarem um erro. Às vezes, a variável $null será avaliada como 0, ou fará com que todo o resultado seja $null.
Considere este exemplo envolvendo multiplicação, que gera 0 ou $null com base na ordem dos valores.
$null * 5
$null -eq ( $null * 5 )
Saída:
True
Impacto em Coleções
Uma coleção permite que usemos um índice para acessar valores. Se tentarmos indexar em uma coleção nula, receberemos este erro "Cannot index into a null array".
$value = $null
$value[10]
Saída:
Cannot index into a null array.
At line:2 char:1
+ $value[10]
+ ~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArray
No entanto, se você tiver uma coleção e tentar recuperar um elemento que não existe na coleção, receberá um resultado $null.
$array = @( 'one', 'two', 'three' )
$null -eq $array[100]
Saída:
True
Impactos em Objetos
Se tentarmos acessar uma propriedade ou subpropriedade de um objeto sem propriedade especificada, podemos obter uma variável $null como você faria para uma variável indefinida. Não importa se o valor é $null ou um objeto real neste caso.
$null -eq $undefined.not.existing
Saída:
True
Impacts on Methods
Chamar um método em uma variável $null lançará uma exceção RuntimeException.
$value = $null
$value.toString()
Saída:
You cannot call a method on a null valued expression.
At line:2 char:1
+ $value.toString()
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Sempre que você encontrar a frase "You cannot call a method on a null valued expression", é um sinal para inspecionar seu código em busca de lugares onde um método esteja sendo chamado em uma variável sem antes verificar os valores $null.
Verificando Valores Nulos no PowerShell
Use Operadores de Comparação -eq e -ne para Verificar Valores Nulos no PowerShell
Ao verificar valores $null no PowerShell, é uma prática recomendada colocar a variável $null no lado esquerdo das comparações. Esse estilo de escrita não é apenas intencional, mas também aceito como uma boa prática no PowerShell.
No entanto, há cenários em que colocar $null no lado direito pode lhe dar resultados inesperados. Vamos olhar o seguinte código e tentar prever os resultados:
if ( $value -eq $null ) {
'The array is $null'
}
if ( $value -ne $null ) {
'The array is not $null'
}
Se não definirmos $value, o primeiro avaliará como $true, e nossa mensagem será The array is $null. O detalhe aqui é que criar um $value que permita que ambos os resultados sejam $false é possível.
Saída:
The array is $null
Neste caso, a variável $value é um array que contém um $null.
O operador -eq verifica cada valor no array e retorna o $null correspondente, que avalia como $false. Da mesma forma, o operador -ne retorna tudo que não combina com o valor $null, resultando em nenhum resultado (também avaliando como $false).
Portanto, nenhuma das condições é $true, mesmo que uma delas possa ser esperada.
Use o Operador -not para Verificar Valores Nulos no PowerShell
O operador -not é um operador lógico no PowerShell que nega uma condição. Quando aplicado a uma variável, verifica se a variável não é nula.
$myVariable = $null
if (-not $myVariable) {
Write-Host "The variable is null."
}
Neste trecho de código, temos uma variável $myVariable inicializada com um valor nulo. O operador -not é usado na declaração if para verificar se $myVariable não é nula.
Se a condição for verdadeira, o script executará o bloco de código dentro da declaração if.
Saída:
The variable is null.
Como demonstrado na saída, o script identifica que $myVariable é nula e imprime a mensagem "The variable is null".
Use o Método IsNullOrEmpty() para Verificar Valores Nulos no PowerShell
O IsNullOrEmpty() é um método da classe System.String, não um método nativo do PowerShell. Diferentes tipos de dados podem ter diferentes maneiras de verificar valores nulos ou vazios.
Neste código, criamos uma variável chamada $myString e atribuímos a ela o valor $null, que representa uma string nula ou vazia.
Usamos o método [string]::IsNullOrEmpty($myString) para verificar se $myString é nula ou vazia. Este método é parte da classe [string] no .NET Framework e é usado para determinar se uma string é nula ou uma string vazia.
Se $myString for de fato nula ou vazia, a condição é verdadeira, e o script imprime "The string is null or empty.".
$myString = $null
if ([string]::IsNullOrEmpty($myString)) {
Write-Host 'The string is null or empty.'
}
Saída:
The string is null or empty.
Como $myString recebe o valor $null, a condição é verdadeira, e a mensagem é exibida na saída.
Use o Método IsNullOrWhiteSpace() para Verificar Valores Nulos no PowerShell
O IsNullOrWhiteSpace() é um método útil disponível na classe System.String do .NET Framework, e você pode usá-lo no PowerShell chamando-o em uma variável de string.
Esse método verifica se uma string é nula, vazia ou consiste apenas em caracteres de espaço em branco. É útil quando você quer verificar se uma variável de string está efetivamente vazia, mesmo que contenha apenas espaços ou abas.
No código abaixo, criamos uma variável chamada $myString e atribuímos a ela uma string que contém apenas caracteres de espaço em branco (espaços).
Em seguida, usamos o método [string]::IsNullOrWhiteSpace($myString) para verificar se $myString é nula ou contém apenas espaço em branco.
$myString = $null
if ([string]::IsNullOrWhiteSpace($myString)) {
Write-Host 'The string is null or contains only whitespace.'
}
Saída:
The string is null or contains only whitespace.
Como a condição é verdadeira ($myString é nula), o script imprime "The string is null or contains only whitespace.".
Esse método é útil quando você quer garantir que uma string esteja realmente vazia, mesmo que pareça estar "em branco" devido a espaços ou abas.
Conclusão
Na programação PowerShell, entender como as variáveis $null funcionam é importante porque elas podem afetar como seus scripts se comportam em diferentes situações. Para escrever scripts confiáveis, é uma boa ideia seguir as melhores práticas, como garantir que você verifique valores nulos corretamente colocando $null no lado esquerdo.
Quer você seja novo na programação ou tenha experiência, conhecer esses detalhes o ajudará a se tornar melhor no uso do PowerShell.
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn