Это происходит из-за того, что PowerShell пытается принудить правую сторону сравнения к типу левой стороны.
$allUsers | ? {$_.Title -eq $true}
Это терпит неудачу, потому что это то же самое, как делают:
$allUsers | ? {$_.Title -eq "True"}
Чтобы понять, почему, попробуйте отливку: [string]$true
С другой стороны, если бы вы сделали это (и I рекомендую вам):
$allUsers | ? {$_.Title}
Это сработало бы, как ожидалось.
Точно так же, когда вы делаете:
$allUsers | ? {$_.Title -gt 0}
Это как делает:
$allUsers | ? {$_.Title -gt "0"}
Это в теории гораздо более опасное сравнение, потому что название, которое начинается с, скажем @
вернется ложный. На практике маловероятно, что у вас будет заголовок, начинающийся с символьного значения ниже 0
, так как все буквы в верхнем и нижнем регистре имеют более высокое значение. Но я не учитываю интернационализацию.
Хотя для моей собственной пользы, и ради тех, кто придет после меня, бы вы изменить свой пост, чтобы объяснить, почему именно {$ _. Название} является предпочтительным методом ?
Я не говорю, что это абсолютно лучшее, но мне это нравится по нескольким причинам:
- Это коротко.
- Он не содержит встроенных констант. Не уверен, что это имеет большое значение, но это не так, чтобы ошибиться.
- Это (на мой взгляд) очищает то, что вы тестируете, поскольку это распространенный способ тестирования этого на многих языках.
- Он работает с
$null
и с пустой строкой.
Есть и другие способы:
$allUsers | ? { ![String]::IsNullOrEmpty($_.Title) }
$allUsers | ? { $_.Title.Length -gt 0 }
$allUsers | ? { $_.Title -ne "" } # would include $null titles
$allUsers | ? { $_.Title -ne $null } # would include empty string titles
Что-то я еще не обращался: вы должны делать это сравнение внутри -Filter
свойства Get-ADUser
и в идеале вы должны задать только для свойства, которые необходимы:
$allUsers = Get-ADUser -Filter { -not (Title -like "*") } -Properties Title
-Filter
параметр выглядит как блок сценария, но он имеет свой собственный синтаксис и действительные операторы и значения, так что это немного сложнее. Это должно быть намного быстрее, хотя.
Got it. В этом есть смысл. Хотя ради меня самого и ради тех, кто приходит за мной, вы отредактировали бы свой пост, чтобы объяснить, почему {$ _. Title} является предпочтительным методом? – Chris76786777
@ idon'twearsuits обновлен. – briantist
Очень информативный. Благодарю. – Chris76786777