Экспорт данных пользователя Active Directory в Powershell не завершен - PullRequest
0 голосов
/ 17 декабря 2018

Я должен экспортировать пользовательские данные учетных записей, прежде чем мы их удалим.Проблема в том, что не все членства в группах записываются в файл .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 Ответ

0 голосов
/ 17 декабря 2018

Это действительно не Format-List, вызывающий это, то же самое могло бы случиться с select, хотя использование 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) .Name

... они якобы одно и то же, каждый из которых создает список массивов имен групп.

# 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 ','

Я заклеил список групп в конце по эстетическим соображениям, а также по более короткой форме, так как я предпочитаю не писать ненужный код или максимально использовать ненужные опции.У каждого свои предпочтения.

...