Экспорт данных пользователя Active Directory в Powershell не завершен
Я должен экспортировать пользовательские данные аккаунтов, прежде чем мы их удалим. Проблема в том, что не все членства в группах записываются в файл.txt (пример ниже).
Это код:
Get-ADUser -Properties * -Filter "cn -eq '$name'" |
format-list -property @{Label = "Name";Expression = {$_.sAMAccountName}},
@{Label = "Initials";Expression = {$_.initials}},
@{Label = "Email";Expression = {$_.Mail}},
@{Label = "Groups";Expression = {%{(Get-ADPrincipalGroupMembership $name | select -expandproperty name)}}},
@{Label = "Creation";Expression = {$_.whenCreated}},
@{Label = "Deletion";Expression = {%{(Get-Date)}}},
@{Label = "Last change";Expression = {$_.whenChanged}} |
#write data into txt file
Out-File -append "C:\temp\deleted.txt" -Encoding utf8
И это вывод:
Name : John Doe
Initials : Jdo
Email : John.Doe@acme.com
Groups : {Domain-User, Remotedesktopuser, Administrator, Share-User...}
Creation : 23.03.2018 13:36:44
Deletion : 17.12.2018 08:46:30
Last Change : 16.12.2018 10:42:21
1 ответ
Это действительно не Format-List, вызывающий это, то же самое произошло бы с выбором, хотя использование Format-*, как это на самом деле не вещь. Это будет список по умолчанию, так что нет никакой реальной причины использовать его для того, что вам нужно.
Тебе даже не нужно это расширять.
Проблема в том, что вы не можете использовать этот цикл и ожидать, что это сработает, автоформаторы этого не допустят. Вы должны напрямую обрабатывать коллекцию, что-то вроде этого...
Get-ADUser -Properties * -Filter * |
Select-Object -property @{Label = "Name";Expression = {$_.sAMAccountName}},
@{Label = "Initials";Expression = {$_.initials}},
@{Label = "Email";Expression = {$_.Mail}},
@{Label = "Creation";Expression = {$_.whenCreated}},
@{Label = "Deletion";Expression = {%{(Get-Date)}}},
@{Label = "Last change";Expression = {$_.whenChanged}},
@{Label = "Groups";Expression = {%{(Get-ADPrincipalGroupMembership $_.SamAccountName).Name -join ','}}} |
Out-File -append "C:\temp\deleted.txt" -Encoding utf8
Get-Content -Path "C:\temp\deleted.txt"
# Results
Name : Administrator
Initials :
Email : Administrator@contoso.com
Creation : 3/31/2017 8:02:15 PM
Deletion : 12/17/2018 4:07:52 AM
Last change : 12/9/2018 7:23:22 PM
Groups : Domain Users,Administrators,Schema Admins,Enterprise Admins,Domain Admins,Group Policy Creator Owners,Organization Management,Recipient
Management,ADSyncAdmins,ADRMSSuperUsers
…
Обновление согласно комментарию / вопросу ОП
Не беспокойтесь, рад, что это сработало для вас.
Что касается...
Не могли бы вы объяснить мне, в чем разница между этими двумя командами группы AD?
Если ты имеешь ввиду...
Get-ADPrincipalGroupMembership Administrator | выберите -expandproperty name
... vs... (Get-ADPrincipalGroupMembership Administrator). Имя
... они якобы одно и то же, каждый из которых создает список групп и список имён.
# use the expand switch to show the group name list
Get-ADPrincipalGroupMembership Administrator | select -expandproperty name
Domain Users
Administrators
Schema Admins
Enterprise Admins
Domain Admins
Group Policy Creator Owners
Organization Management
Recipient Management
ADSyncAdmins
ADRMSSuperUsers
# Use the property to view the group name list
(Get-ADPrincipalGroupMembership Administrator).Name
Domain Users
Administrators
Schema Admins
Enterprise Admins
Domain Admins
Group Policy Creator Owners
Organization Management
Recipient Management
ADSyncAdmins
ADRMSSuperUsers
Однако средства форматирования при сериализации данных будут пытаться поместить все это в одну строку. Тем не менее, они будут обрезать это, чтобы соответствовать ширине экрана / страницы. Так что, если вам нужен другой макет, то вам нужно либо поработать с файлами форматирования по умолчанию, либо обработать его с помощью кода. Лично я никогда не пытаюсь с ними связываться, а просто работаю, чтобы справиться с этим в коде. Итак, это...
(Get-ADPrincipalGroupMembership Administrator).Name -join ','
... просто говорит, я знаю, что эта коллекция является списком массивов. Я знаю, что это будет усечено по ширине экрана / страницы, поэтому объедините этот список строк как одну строку и автоматическую переноску.
Вы могли бы сделать то же самое с вашим оригинальным расширением таким же образом...
(Get-ADPrincipalGroupMembership Administrator | select -expandproperty name) -join ','
Я заклеил список групп в конце по эстетическим причинам, а также по более короткой форме, так как я предпочитаю не писать ненужный код или максимально использовать ненужные опции. У каждого свои предпочтения.