PowerShell -contém -como

Quando as pessoas estão explorando os operadores disponíveis no PowerShell (ajuda about_comparison_operators), muitas vezes eles vão executar em dois semelhante aparente, mas drasticamente diferentes, operadores e ficar confuso com eles.

muitas vezes verei alguém tentar isto:

if ($string -contains '*win*') { }

eles estão tentando ver se $string contém as letras “win”, mas infelizmente isso não é o que-contém faz. O que eles realmente querem usar é o operador semelhante:

if ($string-like ‘ * win*’) {}

I know it doesn’t read as nicely when you say it out loud. Parece uma rapariga do Vale, suponho. “Se, Tipo, esta variável, tipo, é tipo, sabes, este wildcard, omigod, tipo a sério?”Mas-like é o operador correto para esta tarefa.

O operador-contém é um pouco mais complicado. Foi concebido para lhe dizer se uma colecção de objectos inclui (‘contém’) um objecto em particular. Se a tua colecção de objectos é um monte de cordas, isto é bastante simples.

$coll = "one','two','three','four'if ($coll -contains 'one') { }

fica mais difícil quando a coleção contém objetos complexos. Isto não vai funcionar como você poderia pensar:

$coll = Get-Service
if ($coll-contains ‘BITS’) {}

a variável $coll não contém o texto “BITS;” o que ele contém é um objeto de serviço cujo nome é propriedade BITS. Você realmente não pode usar-contém desta forma, porque compara todo o objeto. Por exemplo:

# Get all processes
$procs = Get-Process

# Get just one process
$proc = Get-Process | Select-first 1

# Check it
$procs-contains $proc

isto será quase sempre falso. Isso é porque, no tempo que leva para executar o segundo comando, o primeiro processo mudou. Sua memória, CPU, ou algum outro valor mudou. Embora o $procs contenha o mesmo processo real que o $proc, nem todas as propriedades são exatamente as mesmas em ambos os casos. So-contains não consegue detectar a correspondência.

Saiba mais sobre as ” dez maiores irritações PowerShell.”

deseja fazer uma pergunta sobre este artigo? Responderei em http://powershell.com/cs/forums/230.aspx!

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *