Powershell onde-objeto - não como

2

Se eu canalizar para where-object { $_.someProperty -notlike "*someValue*" } , o -notlike parece filtrar mais do que apenas correspondências, mas também objetos cujo someProperty está vazio.

where-object -notlike do TechNet:

Specifies the Not-Like operator, which gets objects when the property value does not match a value that includes wildcard characters.

Com base na definição, por que -notlike não retorna objetos cuja someProperty está vazia? Desde então, nenhuma correspondência foi encontrada?

Só para esclarecer: Estou realizando Get-ADComputer -Filter * -Property MemberOf,someotherstuff,someotherstuff | where-object { $_.memberof -notlike "*somepartialdn*" }

A expectativa é que o objeto do computador seja retornado, já que não há correspondência, mesmo que o valor da propriedade seja nulo.

    
por frank.s 02.12.2013 / 23:33

2 respostas

2

Isso depende da sua definição de "vazio".

Se someProperty não tiver um valor, o valor efetivo será $null . Sua comparação de string não se aplica a $null .

Se someProperty for uma string vazia ( "" ou [String]::Empty ), a comparação de string será aplicada.

$values = "indonesia","turkmenistan",$null,"columbia"
$values |Where-Object {$_ -notlike "*istan"}
# Results in @("indonesia","columbia")

$values = "indonesia","turkmenistan",[String]::Empty,"columbia"
$values |Where-Object {$_ -notlike "*istan"}
# Results in @("indonesia","","columbia")
    
por 03.12.2013 / 00:00
0

Isso é apenas um palpite, mas você pode conseguir contornar isso fazendo o seguinte:

where-object { $_.someProperty -ne "" -and $_.someProperty -notlike "*someValue*" }

Tenho certeza de que o que você está enfrentando se deve ao fato de os dados serem canalizados como uma string ... e, portanto, os valores vazios são considerados ""

    
por 03.12.2013 / 00:02

Tags