Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Windows Server 2012/2012 R2 (http://forum.oszone.net/forumdisplay.php?f=117)
-   -   [решено] Выгрузка пользователей через DSQUERY (http://forum.oszone.net/showthread.php?t=301286)

SkyNezu 17-06-2015 13:00 2519450

Выгрузка пользователей через 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 2519479

Воспользуйтесь 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


SkyNezu 17-06-2015 14:24 2519484

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 2519485

нет нужды работать локально.
Хм, я -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

SkyNezu 17-06-2015 14:43 2519489

Я уже понял, что натупил.

Сделал просто:

Код:

$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 2519494

В таблицу для каких целей? Для удобочитаемости можете сделать так:
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), возможно придется использовать определенную кодировку.

SkyNezu 17-06-2015 15:02 2519495

Спасибо большое, почитаю.

Но тут еще один косяк вылез. Некоторые поля (ФИО) просто пустые оказались. У меня таких учеток нет. Где-то что-то пошло не так. Буду разбираться.

А поля givenname, surname, initials и другие где взять? Если я захочу поменять выводимые данные? Они не совпадают с полями dsquery. Или я что-то путаю?

nokogerra 18-06-2015 06:30 2519696

Вложений: 1
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/lib...(v=vs.85).aspx или сделать запрос к схеме о классе "user" (никогда не делал).

SkyNezu 18-06-2015 14:06 2519858

Все получилось. Большое спасибо!

Теперь мой скрипт выглядит вот так:
Код:

$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 2519895

Код:

get-aduser userx -properties *| select passwordlastset, passwordneverexpires, enabled
p.s. а по поводу интересного отображения даты посмотрите эту тему https://social.technet.microsoft.com...orum=scrlangru

SkyNezu 19-06-2015 08:01 2520072

Ну passwordlastset заменяет pwdLastSet, но за статью спасибо.

Есть еще поле "срок действия учетной записи", оказывается срок действия у нее вышел, она не показывается как заблокированная, но уже не работает. О таком маленьком нюансе я как-то и забыл.

Хех, добавил в вывод "accountexpires" и он мне выдает или "0" или "9,22337E+18")))) Буду курить как сразу вывести нормальные значения((

nokogerra 19-06-2015 08:48 2520075

Ну и что что заменяет, вы же получили читаемый вывод даты, верно? Для этого я линканул статью.
Код:

PS C:\Windows\system32> Get-ADUser testx -Properties *| select accountexpirationdate

accountexpirationdate
---------------------
21.07.2015 0:00:00


SkyNezu 19-06-2015 10:26 2520103

Так и я о том же Большое спасибо за помощь. Сейчас я получаю то, что нужно.

Для тех кому может понадобиться данный скрипт:
Код:

$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



Время: 07:45.

Время: 07:45.
© OSzone.net 2001-