Показать полную графическую версию : [решено] Выгрузка пользователей через DSQUERY
Есть задача: выгрузить всех пользователей, кто не менял пароль больше 45 дней и тех, кто не заблокирован.
У меня получилось следующее: dsquery user -stalepwd 45 -limit 0
Только мне нужно чтобы он вывел мне определенные поля: ФИО, подразделение, номер телефона, дата когда он последний раз менял пароль. И я никак не пойму что нужно добавить в запрос. Кто может помочь с этим?
UPD-1: Понял в чем затупил. Теперь команда выглядит вот так dsquery user -stalepwd 45 -limit 0 | dsget user -samid -display -dept -company -pwdneverexpires -disabled -acctexpires >D:\test.csv
И ошибку выдает вот такую: dsget ошибка:Недопустимый формат значения "Целевой объект этой команды". введите dsget /? для получения справки.
nokogerra
17-06-2015, 14:07
Воспользуйтесь powershell, ощутимо проще будет:
$date=(Get-Date).AddDays(-45)
Get-ADUser -SearchBase "OU=Users,DC=domain,DC=local" -f {(enabled -eq $true) -and (pwdlastset -lt $date)} -properties *| select givenname, surname, initials, department, mobile, passwordlastset
nokogerra,
При работе с AD использую RSAT, локально работать на сервере возможности нет.
А вот ошибка при попытке запуска скрипта:
Get-ADUser : Объект каталога не найден
D:\test.ps1:2 знак:11
+ Get-ADUser <<<< -SearchBase "OU=Users,DC=lol,DC=com" -f {(enabled -eq $true)
-and (pwdlastset -lt $date)} -properties *| select givenname, surname, initial
s, department, mobile, passwordlastset
+ CategoryInfo : ObjectNotFound: (:) [Get-ADUser], ADIdentityNotF
oundException
+ FullyQualifiedErrorId : Объект каталога не найден,Microsoft.ActiveDirect
ory.Management.Commands.GetADUser
Где я затупил?
nokogerra
17-06-2015, 14:31
нет нужды работать локально.
Хм, я -searchbase для примера привел. Если вы собираетесь искать пользователей во всем домене, то -searchbase можно не указывать. Если хотите указать дефолтный OU "USers", то он вовсе не OU, а CN, т.е. выглядеть будет так:
Get-ADUser -SearchBase "CN=Users,DC=domain,DC=local" -f {(enabled -eq $true) -and (pwdlastset -lt $date)} -properties *| select givenname, surname, initials, department, mobile, passwordlastset
Я уже понял, что натупил.
Сделал просто:
$date=(Get-Date).AddDays(-45)
Get-ADUser -SearchBase "DC=lol,DC=com" -f {(enabled -eq $true) -and (pwdlastset -lt $date)} -properties *| select givenname, surname, initials, department, mobile, passwordlastset
Есть возможность выгрузить результат в нормальную таблицу? А то он мне выдал вот в таком формате:
givenname: Иван Иванович
surname: Иванов
initials:
department: Центр подготовки идиотов
mobile:
passwordlastset : 17.01.2012 14:55:55
А хотелось бы без гемора в Excel таблицу собрать. Все-таки dsquery здесь как-то симпатичнее был.
nokogerra
17-06-2015, 14:54
В таблицу для каких целей? Для удобочитаемости можете сделать так:
get-aduser ....... | ft givenname, surname... -auto
Если нужно именно exel, то можно использовать export-csv, например:
get-aduser ..... | select givenname.... | export-csv c:\1.csv
и потом конвертировать в xls. Стоит прочитать справку командлета export-csv (get-help export-csv -full), возможно придется использовать определенную кодировку.
Спасибо большое, почитаю.
Но тут еще один косяк вылез. Некоторые поля (ФИО) просто пустые оказались. У меня таких учеток нет. Где-то что-то пошло не так. Буду разбираться.
А поля givenname, surname, initials и другие где взять? Если я захочу поменять выводимые данные? Они не совпадают с полями dsquery. Или я что-то путаю?
nokogerra
18-06-2015, 06:30
givenname, surname и initials вполне могут быть пустыми. Посмотрите скриншот, причем стоит учесть что name и displayname могут отличаться. Сам логин, а точнее то, что вы видите на вкладке "Учетная запись" в поле "Имя входа пользователя" - это samaccountname.
Вообще посмотреть все свойства объекта пользователя можно так:
get-aduser userx -properties *
или
get-aduser userx -properties * | get-member -membertype property
Но, как будет видно, это не все атрибуты, которые есть в "Редакторе атрибутов" пользователя. На сколько я знаю, неиспользуемые атрибуты вообще не записываются в объекте posh, т.е. если значение нулевое. Например пустая строка - это не нулевое значение. Если интересуют все-все атрибуты пользователя, можно посмотреть на Msdn например: https://msdn.microsoft.com/en-us/library/windows/desktop/ms683980(v=vs.85).aspx или сделать запрос к схеме о классе "user" (никогда не делал).
Все получилось. Большое спасибо!
Теперь мой скрипт выглядит вот так:
$date=(Get-Date).AddDays(-45)
Get-ADUser -SearchBase "DC=lol,DC=com" -f {(enabled -eq $true) -and (pwdlastset -lt $date)} -properties *| select displayname, sAMAccountName, pwdLastSet, company, department, description, telephoneNumber, l, distinguishedName | export-csv -Encoding UTF8 D:\test.csv
Сейчас осталось решить 3 проблемы:
1. Поле pwdLastSet вот в таком виде отображается "130747725964343885". Не получается пока его привести в нормальный вид.
2. Пока не нашел свойства "Срок действия пароля не ограничен", как его в вывод сделать.
3. Не нашел свойства, заблокирована ли учетка пользователя или нет в данный момент.
nokogerra
18-06-2015, 15:48
get-aduser userx -properties *| select passwordlastset, passwordneverexpires, enabled
p.s. а по поводу интересного отображения даты посмотрите эту тему https://social.technet.microsoft.com/Forums/ru-RU/5818d7e7-4ee4-4682-9d92-092915f8af46/-dsquery-dsmove?forum=scrlangru
Ну passwordlastset заменяет pwdLastSet, но за статью спасибо.
Есть еще поле "срок действия учетной записи", оказывается срок действия у нее вышел, она не показывается как заблокированная, но уже не работает. О таком маленьком нюансе я как-то и забыл.
Хех, добавил в вывод "accountexpires" и он мне выдает или "0" или "9,22337E+18")))) Буду курить как сразу вывести нормальные значения((
nokogerra
19-06-2015, 08:48
Ну и что что заменяет, вы же получили читаемый вывод даты, верно? Для этого я линканул статью.
PS C:\Windows\system32> Get-ADUser testx -Properties *| select accountexpirationdate
accountexpirationdate
---------------------
21.07.2015 0:00:00
Так и я о том же Большое спасибо за помощь. Сейчас я получаю то, что нужно.
Для тех кому может понадобиться данный скрипт:
$date=(Get-Date).AddDays(-45)
Get-ADUser -SearchBase "DC=lol,DC=com" -f {(enabled -eq $true) -and (pwdlastset -lt $date)} -properties *| select displayname, sAMAccountName, passwordlastset, passwordneverexpires, accountexpirationdate, enabled, company, department, description, telephoneNumber, l, distinguishedName | export-csv -Encoding UTF8 D:\test.csv
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC