Где LogonWorkstations не пусто, а где заселено - PullRequest
0 голосов
/ 14 апреля 2020

Любой из этих наборов фильтров дает мне все или ничего одному значению.

    $combined = get-aduser -filter {name -like "blah*"} -properties LogonWorkstations
    $noWS = $combined | Where -filter {$_.LogonWorkstations -eq $null}
    $isWS = $combined | Where -filter {$_.LogonWorkstations -ne $null}
    $noWS.count
    $isws.count
    $noWS = $combined | Where -Filter {$_.LogonWorkstations -like ""}
    $isWS = $combined | Where -Filter {$_.LogonWorkstations -like "*"}
    $noWS.count
    $isws.count

1 Ответ

1 голос
/ 14 апреля 2020

Одной из возможных проблем с вашим кодом может быть сравнение, которое вы проводите. $Null всегда должен быть в слева сравнения, чтобы как коллекции, так и приведение типов работали правильно при сравнении. для получения подробной информации об этом, пожалуйста, выполните поиск ...

powershell null on the left

, однако есть несколько более простой способ проверить "ничего / что-то" в вызове Where-Object или .Where(). просто используйте -not $_ или $_. Вот пример, в котором используются командлеты локальной учетной записи, поскольку у меня нет доступа к командлетам AD ...

'Total User Count    = {0}' -f $LocalUserList.Count
'Blank LastLogon     = {0}' -f $LocalUserList.Where({-not $_.LastLogon}).Count
'Non-Blank LastLogon = {0}' -f $LocalUserList.Where({$_.LastLogon}).Count

output ...

Total User Count    = 9
Blank LastLogon     = 6
Non-Blank LastLogon = 3

эти цифры согласуются с тем, что я вижу, когда я проверяю вручную. [ ухмылка ]

...