Если я буду трубить where-object { $_.someProperty -notlike "*someValue*" }
, то -notlike
похоже, фильтрует не только совпадения, но и объекты, someProperty
пусто.
where-object -notlike
из TechNet:
Specifies the Not-Like operator, which gets objects when the property value does not match a value that includes wildcard characters.
Исходя из определения, почему -notlike
не возвращать объекты, чьи someProperty
пусто? Поскольку совпадений не найдено?
Чтобы уточнить: я выполняю Get-ADComputer -Filter * -Property MemberOf,someotherstuff,someotherstuff | where-object { $_.memberof -notlike "*somepartialdn*" }
Ожидается, что объект компьютера будет возвращен, поскольку совпадения нет, даже если значение свойства равно null.
Это зависит от вашего определения слова «пустой».
Если someProperty
не имеет значения, это эффективное значение $null
. Ваше сравнение строк не применяется к $null
.
Если someProperty
это пустая строка (""
или [String]::Empty
) вместо этого применяется сравнение строк.
$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")
Это всего лишь предположение, но вы можете обойти это, выполнив следующие действия:
where-object { $_.someProperty -ne "" -and $_.someProperty -notlike "*someValue*" }
Я почти уверен, что то, что вы испытываете, связано с тем, что данные передаются в виде строки ... и поэтому пустые значения принимаются как ""