Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] get-aduser -filter с массивом?

Ответить
Настройки темы
PowerShell - [решено] get-aduser -filter с массивом?

Старожил


Сообщения: 498
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


Доброго времени суток. Есть список txt с samaccountname, но мне нужно выбрать всех пользователей, которых НЕТ в этом списке. Обычно для выбора пользователей из списка использовал:
Код: Выделить весь код
get-content путь_к_файлу_txt | foreach-object {get-aduser -i $_}
. Чтобы выбрать всех, кого в этом списке нет удобнее всего использовать фильтр -f {samaccountname -ne $_ или $x}, но фильтр не работает таким образом, кто-нибудь подскажет решение?
Спасибо заранее.

Отправлено: 11:29, 05-11-2014

 

Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
Compare-Object (get-content путь_к_файлу_txt) (get-aduser -fi * |  foreach {$_.samaccountname}) |Where {$_.SideIndicator -eq "=>"}
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:44, 05-11-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 498
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


Да, действительно, спасибо. Не знал об этом командлете.
Один вопрос: почему при Compare-Object (get-content путь_к_файлу_txt) (get-aduser -filter '*' | select samaccountname) выдает такое:
Код: Выделить весь код
.......................
@{samaccountname=loor}                                      =>
@{samaccountname=neupokoev}                                 =>
..........................
Fedorenko                                                   <=
hogaev                                                      <=
.............................
и в списке с "=>" есть вхождения из списка "<="

Отправлено: 12:06, 05-11-2014 | #3


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Что пишете, то и выдает, никакого обмана.

Код: Выделить весь код
Compare-Object (get-content путь_к_файлу_txt) (get-aduser -filter '*' | select -exp samaccountname) |Where {$_.SideIndicator -eq "=>"}
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:11, 05-11-2014 | #4


Старожил


Сообщения: 498
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


Спасибо за ответ.
Теперь стало чуть больше понятно, но лыжи еще не едут. Я написал то же самое, но без -exp. Это что, expression? И не ясно почему мой вариант не отработал - в txt стринг, я делаю ...| select samaccountname - тоже получаю стринг, а выдается невесть что.

Отправлено: 12:29, 05-11-2014 | #5


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Это что, expression? - Нет, -ExpandProperty.
делаю ...| select samaccountname - тоже получаю стринг - Получается не String,a тип Selected.Microsoft.ActiveDirectory.Management.ADUser

Разница использования -ExpandProperty и без:
Код: Выделить весь код
PS > [string](Get-ADUser test | select samaccountname)
@{samaccountname=test}

PS > [string](Get-ADUser test | select -exp samaccountname)
test
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:36, 05-11-2014 | #6


Старожил


Сообщения: 498
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


Понял, спасибо большое. Если не затруднит - осталась последняя неясность. После
Код: Выделить весь код
Compare-Object (get-content путь_к_файлу_txt) (get-aduser -fi * |  foreach {$_.samaccountname})
были строки с => - что логично, но были и <=, т.е. в 1м объекте были найдены строки, которых нет во 2м (т.е. все пользователи), но текстовый файл выбирался get-aduser командлетом, и там не может быть пользователей, которых нет в get-aduser -f '*'. Я и руками проверил, взяв одного пользователя из <= - и он нашелся с помощью get-aduser. Как такое возможно?

Отправлено: 12:52, 05-11-2014 | #7


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Легко, когда есть лишние пробелы. На будущее приводите полный вывод с неправильными результатами, а так только гадать остается.

#Убрать лишние пробелы

Код: Выделить весь код
Compare-Object (get-content путь_к_файлу_txt | foreach {$_.Trim()}) (get-aduser -fi * |  foreach {$_.samaccountname})
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:57, 05-11-2014 | #8


Старожил


Сообщения: 498
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


От пробелов я предварительно избавился в текстовом редакторе, но вывод с Trim() точно такой же, например:
Код: Выделить весь код
........................................
testx                                                       =>
testx2                                                      =>
falk                                                        =>
btg                                                         <=
kuzmina                                                     <=
bogdanova                                                   <=
us12                                                        <=
baa                                                         <=
sartakova                                                   <=
Osinceva                                                    <=
stepanenko                                                  <=
Т.е. stepanenko якобы есть в первом объекте (в txt) - и это правда, но ее нет в списке всех пользователей, но это не так. вот опровержение:
Код: Выделить весь код
PS C:\Windows\system32> Get-ADUser -f '*' | where {$_.samaccountname -eq "stepanenko"}


DistinguishedName : CN=Евгения В. Степаненко,CN=Users,DC=domain,DC=local
Enabled           : True
GivenName         : Евгения
Name              : Евгения В. Степаненко
ObjectClass       : user
ObjectGUID        : xx
SamAccountName    : stepanenko
SID               : xx
Surname           : Степаненко
UserPrincipalName : stepanenko@domain.local

Отправлено: 13:10, 05-11-2014 | #9


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Что возвращает код:
Код: Выделить весь код
Compare-Object (get-content путь_к_файлу_txt | foreach {$_.Trim()}) (get-aduser -fi * |  foreach {$_.samaccountname}) | 
	Where {$_.SideIndicator -eq "<="} | Foreach { try {Get-ADUser $_.InputObject} catch {}}

Отправлено: 13:26, 05-11-2014 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] get-aduser -filter с массивом?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - get-aduser ..| select enabled? nokogerra Скриптовые языки администрирования Windows 8 17-09-2014 14:51
PowerShell - [решено] Get-AdUser и несколько доменов pogo Скриптовые языки администрирования Windows 4 10-12-2013 11:48
2008 R2 - [решено] posh: new-aduser ps1 convert-to-html nokogerra Windows Server 2008/2008 R2 3 07-10-2013 07:36
2008 R2 - [решено] posh: set-aduser -name? nokogerra Windows Server 2008/2008 R2 6 01-10-2013 09:56
[решено] Проблема с массивом Angel_19 AutoIt 3 11-07-2012 11:34




 
Переход