Get-ADUser WhenChanged и WhenCreated пусты для некоторых пользователей.
Я создал сценарий PowerShell 5.1 для экспорта всех пользователей в БД и сохранения всех данных в файл CSV. Сценарий позволяет вам установить дату назад во времени, чтобы вы могли выбирать, когда вы хотите экспортировать своих пользователей.
После некоторых испытаний выяснилось, что не все пользователи экспортируются, и после дальнейшего изучения я понял, что собственность WhenChanged
а также WhenCreated
нет для каждого пользователя. Несмотря на то, что в интерфейсе AD отображается свойство с правильными данными, как показано на скриншоте ниже.
Когда я запускаю следующую команду:
Get-ADUser -filter * -Properties LastLogonDate, userPrincipalName, initials, WhenCreated, whenChanged | Select-Object userPrincipalName, initials, whenCreated, whenChanged
Я получаю следующий результат:
userPrincipalName initials whenCreated whenChanged
----------------- -------- ----------- -----------
11/9/2017 2:06:29 PM 1/24/2018 4:26:48 PM
11/9/2017 2:07:47 PM 11/22/2017 4:12:52 PM
mp@mycompany.local MP 11/14/2017 3:14:45 PM 2/14/2018 4:02:51 AM
dg@mycompany.local DG 11/15/2017 12:51:25 PM 2/21/2018 2:12:52 PM
ae@mycompany.local AE
mm@mycompany.local MM
rw@mycompany.local RW
kk@mycompany.local KK
ap@mycompany.local AP
js@mycompany.local JS
cb@mycompany.local CB 11/17/2017 12:21:32 PM 11/22/2017 4:41:35 PM
aw@mycompany.local
tt@mycompany.local TT
Как видите, пользователь с инициалами TT не имеет значения, несмотря на то, что на скриншоте показано, что они есть. Несмотря на то, что я создал этого пользователя сегодня и изменил несколько значений в тот же день.
Вопросы
- Что мне не хватает?
- Это проблема самой AD или только команды?
2 ответа
Решение проблемы состоит в том, чтобы щелкнуть правой кнопкой мыши ярлык PowerShell и выбрать Run as Administrator
, Вы должны сделать это, даже если вы уже являетесь администратором. Если вы сделаете это и снова запустите команду, все ваши данные будут там.
userPrincipalName initials whenCreated whenChanged
----------------- -------- ----------- -----------
11/9/2017 2:06:29 PM 1/24/2018 4:26:48 PM
11/9/2017 2:06:29 PM 11/9/2017 2:06:29 PM
11/9/2017 2:06:29 PM 11/9/2017 2:06:29 PM
11/9/2017 2:07:47 PM 11/22/2017 4:12:52 PM
mp@mycompany.local MP 11/14/2017 3:14:45 PM 2/14/2018 4:02:51 AM
dg@mycompany.local DG 11/15/2017 12:51:25 PM 2/21/2018 2:12:52 PM
ae@mycompany.local AE 11/16/2017 1:11:30 PM 11/22/2017 4:11:37 PM
mm@mycompany.local MM 11/16/2017 1:12:02 PM 11/22/2017 4:11:37 PM
rw@mycompany.local RW 11/16/2017 1:12:40 PM 11/22/2017 4:11:37 PM
kk@mycompany.local KK 11/16/2017 1:13:13 PM 11/22/2017 4:11:37 PM
ap@mycompany.local AP 11/16/2017 1:14:15 PM 11/22/2017 4:11:37 PM
js@mycompany.local JS 11/16/2017 1:14:50 PM 11/22/2017 4:11:37 PM
cb@mycompany.local CB 11/17/2017 12:21:32 PM 11/22/2017 4:41:35 PM
11/22/2017 3:37:49 PM 2/16/2018 2:50:25 PM
11/22/2017 3:38:43 PM 2/17/2018 3:58:24 PM
aw@mycompany.local 11/22/2017 4:02:18 PM 11/22/2017 4:41:36 PM
tt@mycompany.local TT 2/21/2018 1:21:13 PM 2/21/2018 1:59:17 PM
Как и вы, когда я выполнил эту команду:
Get-ADObject -filter 'sAMAccountName -eq "xxxxxx"' | select whenchanged
дата всегда была пустой. Я нашел эту статью: https://www.itprotoday.com/powershell/view-all-properties-ad-objects-powershell , в которой показано, как составить список всех свойств объекта:
Get-ADObject -filter 'sAMAccountName -eq "xxxxxx"' -properties *
Это привело меня к этому варианту моего запроса, чтобы правильно отобразить WhenChanged (или любое другое свойство в этом отношении):
Get-ADObject -filter 'sAMAccountName -eq "xxxxxx"' -properties *| select whenchanged
Обратите внимание, что вы можете заменить «*» списком свойств, которые вас интересуют, разделенными запятыми. Это, вероятно, повлияет на производительность, если у вас большие наборы данных или ограниченный объем оперативной памяти.
Надеюсь, это поможет другим.