【问题标题】:Powershell export csv with columns带有列的 Powershell 导出 csv
【发布时间】:2016-11-29 02:09:20
【问题描述】:

我想导出包含“ParentGroupName”、“MemberName”、“DisplayName”列的 csv 文件

目前它正在将三个数据导出到一列中。

function getGroups{

    $Groups += Get-ADGroup -Filter * -SearchBase "ou=Groups,ou=DCM,ou=NTG,dc=prod,dc=main,dc=ntgov" | Select-Object -ExpandProperty samaccountname

    return $Groups
}

Measure-Command{ 


$Groups = getGroups
write-host "Groups:" $Groups.Count 

}

Measure-Command{



$date = $(get-date).ToString("dd MMM yyyy")
$global:FileName = "Active Directory Group Membership - DCM -" + $date

$stringBuilder = New-Object System.Text.StringBuilder

foreach ($GroupName in $Groups){

        Get-ADGroupMember -Identity $GroupName | Sort-Object $_.SamAccountName | ForEach-Object {
            $ParentGroupName = (Get-ADGroup -Identity $GroupName).SamAccountName 
            $MemberName = $_.SamAccountName # Member of the Group.


            if ($_.ObjectClass -eq 'group') {



                $DisplayName = ' - '

            } elseif ($_.ObjectClass -eq 'user') {


                $a = (Get-ADUser -Identity $MemberName -Properties Displayname)
                $DisplayName = $a.DisplayName 

            }



            $null = $stringBuilder.Append("$ParentGroupName, $MemberName, $DisplayName")


        }
    } 


outputArray = $stringBuilder.ToString()


out-file C:\Users\augut\Desktop\$FileName.csv


outputArray | out-file C:\Users\augut\Desktop\$FileName.csv
}

【问题讨论】:

    标签: powershell


    【解决方案1】:

    手动构建 CSV 文件让您很头疼。这可以通过为找到的具有您需要记录的属性的每个项目构造一个自定义对象来大大简化,然后将它们填充到一个数组中并将该数组导出到一个 CSV 文件。

    function getGroups{
        $Groups += Get-ADGroup -Filter * -SearchBase "ou=Groups,ou=DCM,ou=NTG,dc=prod,dc=main,dc=ntgov" | Select-Object -ExpandProperty samaccountname
        return $Groups
    }
    $Groups = getGroups
    write-host "Groups:" $Groups.Count 
    
    $date = $(get-date).ToString("dd MMM yyyy")
    $global:FileName = "Active Directory Group Membership - DCM -" + $date
    
    $results = @();
    
    foreach ($GroupName in $Groups){
            Get-ADGroupMember -Identity $GroupName | Sort-Object $_.SamAccountName | ForEach-Object {
                $ItemProperties = @{
                    "ParentGroupName" = (Get-ADGroup -Identity $GroupName).SamAccountName;
                    "MemberName" = $_.SamAccountName
                }
    
                if ($_.ObjectClass -eq 'group') {
                    $ItemProperties.Add("DisplayName","-");
                } elseif ($_.ObjectClass -eq 'user') {
                    $ItemProperties.Add("DisplayName",(Get-ADUser -Identity $MemberName -Properties DisplayName).DisplayName);
                }
                $MyItem = New-Object -TypeName psobject -property $ItemProperties;
                $Results += $MyItem;
                $ItemProperties = $null;
            }
        } 
    $results | export-csv -path "C:\Users\augut\Desktop\$FileName.csv" -NoTypeInformation
    

    【讨论】:

    • 感谢它主要适用于 displayName,它似乎为每个 groupName 和 userName 重复一个名称:例如:mjms Jayne Fairnington DCM_NTH_FOI TP6 Jayne Fairnington DCM_NTH_FOI yfair Jayne Fairnington DCM_NTH_FOI ktimi Jayne Fairnington zzMinisterVowles_O bxl Jayne Fairnington DCM_DNH_SPIO_RW FMD Jayne Fairnington DCM_DNH_SPIO_RW MAT Jayne Fairnington DCM_DNH_SPIO_RW aleon Jayne Fairnington DCM OCM 参谋长 amart Jayne Fairnington DCM OCM 参谋长 bqb Jayne Fairnington DCM OCM 参谋长
    • @GuzziT 我刚刚做了一个小修改,试试新版本。
    • 它没有改变 excel 中的输出:/
    猜你喜欢
    • 1970-01-01
    • 2015-07-25
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    • 2019-03-07
    相关资源
    最近更新 更多