![]() |
get-aduser -filter с массивом?
Доброго времени суток. Есть список txt с samaccountname, но мне нужно выбрать всех пользователей, которых НЕТ в этом списке. Обычно для выбора пользователей из списка использовал:
Код:
get-content путь_к_файлу_txt | foreach-object {get-aduser -i $_} Спасибо заранее. |
Код:
Compare-Object (get-content путь_к_файлу_txt) (get-aduser -fi * | foreach {$_.samaccountname}) |Where {$_.SideIndicator -eq "=>"} |
Да, действительно, спасибо. Не знал об этом командлете.
Один вопрос: почему при Compare-Object (get-content путь_к_файлу_txt) (get-aduser -filter '*' | select samaccountname) выдает такое: Код:
....................... |
Что пишете, то и выдает, никакого обмана.
Код:
Compare-Object (get-content путь_к_файлу_txt) (get-aduser -filter '*' | select -exp samaccountname) |Where {$_.SideIndicator -eq "=>"} |
Спасибо за ответ.
Теперь стало чуть больше понятно, но лыжи еще не едут. Я написал то же самое, но без -exp. Это что, expression? И не ясно почему мой вариант не отработал - в txt стринг, я делаю ...| select samaccountname - тоже получаю стринг, а выдается невесть что. |
Это что, expression? - Нет, -ExpandProperty.
делаю ...| select samaccountname - тоже получаю стринг - Получается не String,a тип Selected.Microsoft.ActiveDirectory.Management.ADUser Разница использования -ExpandProperty и без: Код:
PS > [string](Get-ADUser test | select samaccountname) |
Понял, спасибо большое. Если не затруднит - осталась последняя неясность. После
Код:
Compare-Object (get-content путь_к_файлу_txt) (get-aduser -fi * | foreach {$_.samaccountname}) |
Легко, когда есть лишние пробелы. На будущее приводите полный вывод с неправильными результатами, а так только гадать остается.
#Убрать лишние пробелы Код:
Compare-Object (get-content путь_к_файлу_txt | foreach {$_.Trim()}) (get-aduser -fi * | foreach {$_.samaccountname}) |
От пробелов я предварительно избавился в текстовом редакторе, но вывод с Trim() точно такой же, например:
Код:
........................................ Код:
PS C:\Windows\system32> Get-ADUser -f '*' | where {$_.samaccountname -eq "stepanenko"} |
Что возвращает код:
Код:
Compare-Object (get-content путь_к_файлу_txt | foreach {$_.Trim()}) (get-aduser -fi * | foreach {$_.samaccountname}) | |
Код:
Compare-Object (Get-Content C:\Users\nokogerra\Desktop\us.txt | foreach {$_.Trim()}) (Get-ADUser |
Странное поведение, а код:
Код:
$users = Get-Content C:\Users\nokogerra\Desktop\us.txt |
вывело всех пользователей, samaccountname которых нет в текстовом файле. хм, т.е. это еще одно решение моей первоначальной задачи, но не совсем понятное, разве contains и notcontains так работают? они вроде должны возвращать булевое значение. И должно оцениваться, входит ли $_.samaccountname в $users, а не наоборот, разве нет?
|
они вроде должны возвращать булевое значение - Так и возвращается булевое значение, если пользователь есть в AD, но нет в файле, то выводим объект на консоль.
|
Сначала я не понял логики, но потом все же дошло: проверка "пообъектно", где объект - это атрибут samaccountname, т.е. если совпало, значит FALSE, не совпало - TRUE (при частичном совпадении тоже) и при TRUE, пользователь будет выведен.
Спасибо большое за помощь, Вы предложили 2 рабочих варианта, не вижу особого смысла ковыряться в лишних "<=". |
Время: 00:30. |
Время: 00:30.
© OSzone.net 2001-