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!