Я создал скрипт 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
[email protected] MP 11/14/2017 3:14:45 PM 2/14/2018 4:02:51 AM
[email protected] DG 11/15/2017 12:51:25 PM 2/21/2018 2:12:52 PM
[email protected] AE
[email protected] MM
[email protected] RW
[email protected] KK
[email protected] AP
[email protected] JS
[email protected] CB 11/17/2017 12:21:32 PM 11/22/2017 4:41:35 PM
[email protected]
[email protected] TT
Как вы видите, у пользователя с инициалами TT нет значения, несмотря на то, что скриншот показывает, что они у него есть. Несмотря на то, что я создал этого пользователя сегодня и изменил несколько значений в тот же день.
Вопросы
- Что я упускаю?
- Это проблема с самим AD или только с командой?
решение1
Решение проблемы — щелкнуть правой кнопкой мыши по ярлыку 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
[email protected] MP 11/14/2017 3:14:45 PM 2/14/2018 4:02:51 AM
[email protected] DG 11/15/2017 12:51:25 PM 2/21/2018 2:12:52 PM
[email protected] AE 11/16/2017 1:11:30 PM 11/22/2017 4:11:37 PM
[email protected] MM 11/16/2017 1:12:02 PM 11/22/2017 4:11:37 PM
[email protected] RW 11/16/2017 1:12:40 PM 11/22/2017 4:11:37 PM
[email protected] KK 11/16/2017 1:13:13 PM 11/22/2017 4:11:37 PM
[email protected] AP 11/16/2017 1:14:15 PM 11/22/2017 4:11:37 PM
[email protected] JS 11/16/2017 1:14:50 PM 11/22/2017 4:11:37 PM
[email protected] 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
[email protected] 11/22/2017 4:02:18 PM 11/22/2017 4:41:36 PM
[email protected] TT 2/21/2018 1:21:13 PM 2/21/2018 1:59:17 PM
решение2
Как и вы, когда я выполнил эту команду:
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
Обратите внимание, что вы можете заменить «*» списком свойств, разделенных запятыми, которые вас интересуют — это может повлиять на производительность, если у вас большие наборы данных или ограниченный объем оперативной памяти.
Надеюсь, это поможет другим.