Export-Csv не показывает имя группы AD при экспорте ее членов - PullRequest
2 голосов
/ 04 июня 2019

У меня есть список с группами AD в файле CSV: Input_ADGroup.csv Столбец A выглядит следующим образом:

CN  
ADgroup1  
ADgroup2

У меня уже есть некоторый код, который перечисляет всех пользователей групп в выводе.CSV-файл, однако мне не хватает имени группы AD.Таким образом, неясно, какие пользователи являются членами какой группы.

$Manager = @{Name = "Manager"; Expression = {%{(Get-ADUser $_.Manager -Properties DisplayName).DisplayName}}}
$Manager_Location = @{Name = "Manager_Location"; Expression = {%{(Get-ADUser $_.Manager -Properties Office).Office}}}
$Fields = @(
'SamAccountName'
'CN'
'DisplayName'
'Office'
'mail'
'Department'
$Manager
$Manager_Location
)

Import-Csv -Path H:\Test\Input_ADGroup.csv | 
ForEach-Object {
    Get-ADGroup -Filter "CN -eq '$($_.CN)'" -Properties * -ErrorAction SilentlyContinue |
    Get-ADGroupMember | Get-ADUser -properties * | Select $Fields
} | Export-Csv -Path H:\Test\Output_ADGroup.csv -NoTypeInformation
H:\Test\Output_ADGroup.csv

Так что возможно получить столбец, который показывает "source-ADgroup" ... или другой формат, который разбивает список с помощью ADGroupимя или что-то?

Ответы [ 3 ]

0 голосов
/ 04 июня 2019

@ Lotpings @robdy - Спасибо за ваш вклад, я получил его так много, спасибо. Смотрите код ниже

Import-Csv -Path H:\Test\Input_ADGroup.csv | 
ForEach-Object {
    Get-ADGroup -Filter "CN -eq '$($_.CN)'" -Properties CN -PipelineVariable name -ErrorAction SilentlyContinue |
    Get-ADGroupMember | Get-ADUser -properties * | Select ($Fields+@{n="Group";e={$name}})
} | Export-Csv -Path H:\Test\Output_ADGroup.csv -NoTypeInformation
H:\Test\Output_ADGroup.csv

Последнее замечание: группа AD отображается в виде CN = Groupname, OU = ... OU = ... etc
Я не мог заставить его показывать только «Groupname», но это действительно не проблема.

0 голосов
/ 04 июня 2019

IMO мое другое предлагаемое решение является более эффективным при использовании того же CN из ввода:

$Data = ForEach($CN in (Import-Csv -Path H:\Test\Input_ADGroup.csv).CN) {
   Get-ADGroup -Filter "CN -eq '$CN'" -Properties CN -ErrorAction SilentlyContinue |
      Get-ADGroupMember | Get-ADUser -Properties * | Select-Object ($Fields+@{n="Group";e={$CN}})
}
$Data
$Data | Export-Csv -Path H:\Test\Output_ADGroup.csv -NoTypeInformation
0 голосов
/ 04 июня 2019

Поскольку у вас уже есть имя группы AD в $_, вы можете добавить еще одно вычисляемое свойство к вашему Select-Object, изменив это:

Get-ADGroup -Filter "CN -eq '$($_.CN)'" -Properties * -ErrorAction SilentlyContinue |
Get-ADGroupMember | Get-ADUser -properties * | Select $Fields

к этому (сохранение первого имени группы в переменной, чтобы не перепутать с $_, используемым позже в конвейере):

$GroupName = $_.CN

Get-ADGroup -Filter "CN -eq '$($_.CN)'" -Properties * -ErrorAction SilentlyContinue |
Get-ADGroupMember | Get-ADUser -properties * | Select ($Fields+@{n="Group";e={$GroupName}})

Кредиты @LotPings и @Maikel за указание на проблему с неправильным использованием $_ в комментариях


ПРИМЕЧАНИЕ: помните о скобках, в противном случае вы получите сообщение об ошибке:

Select-Object: не найден позиционный параметр, который принимает аргумент n = "Group"; e = {$ GroupName}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...