Export-Csv在导出其成员时不显示广告组名称

时间:2019-06-04 11:59:26

标签: powershell

我有一个CSV文件中包含广告组的列表:Input_ADGroup.csv 列A如下所示:

CN  
ADgroup1  
ADgroup2

我已经有一些代码在output.csv文件中列出了组的所有用户,但是我缺少ADgroup的名称。因此,尚不清楚哪些用户属于哪个组。

$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 :(得分:0)

由于$_中已经有广告组名称,因此您可以通过更改以下内容来向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指出注释中错误使用$_的问题


注意:请记住括号,否则您将收到类似以下的错误:

  

选择对象:找不到一个接受参数n =“ Group”; e = {$$ GroupName}

的位置参数

答案 1 :(得分:0)

@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 = ...等
我无法显示“ Groupname”,但这确实不是问题。

答案 2 :(得分:0)

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