从user.txt导出memberof列表

时间:2015-11-20 06:14:30

标签: csv powershell

我是powershell的新手。下面的脚本工作正常我只需要在其中添加memberof。我怎么能实现它? 我想实现这样的目标。

User    Group 
------  ------
User    Group, Group 1, Group 2 
User1   Group, Group 2 
User2   Group, Group 1 
User3   Group, Group 1, Group 2, Group 3
$USERS = Get-Content c:\Temp\users.txt
$USERS|Foreach{Get-ADUser $_ -Properties * |Select SAMAccountName, mail, XXXXX, memberof}|Export-CSV -Path C:\Temp\USERS.csv 

提前致谢。

指导我们。

1 个答案:

答案 0 :(得分:1)

我假设您在将数据导出到一致列表时遇到困难。除此之外,组名称不易读取,因此我为它添加了一个函数:

Function Get-DisplayName {
    Param (
        [String[]]$CN
    )
    Process {
        foreach ($C in $CN) {
            $m = Get-ADObject -Identity $C -Properties displayName,cn
            if ($m.ObjectClass -eq "user") {$m.displayName} Else{$m.cn} 
        }
    }
}

$Users = Get-Content 'c:\Temp\users.txt'

$Result = $Users | ForEach-Object {
    Get-ADUser $_ -Properties * | Select-Object SAMAccountName, mail, 
        @{Name='Group';Expression={Get-DisplayName $_.memberof}}
}

$Export = Foreach ($R in $Result) {
    Foreach ($G in $R.Group) {
         $R | Select-Object SamAccountName, Mail, @{Name='Group';Expression={$G}}
    }
}

$Export | Export-CSV -Path 'C:\Temp\UsersExport.csv'

输出将如下所示:

SamAccountName    Mail              Group
--------------    ----              -----
Bobs              Bob@domain.com    Group 1
Bobs              Bob@domain.com    Group 2
Bobs              Bob@domain.com    Group 3
Mikec             Mike@domain.com   Group 1
Mikec             Mike@domain.com   Group 2
...

Select-Object CmdLet接受Expressions。通过使用它,我们可以调用函数来找到正确的DisplayName。稍后在脚本中,我们可以将这些数据展开为每个Group用户所属的一行。

为了帮助您入门,您可以使用以下命令:

  • 要查找有关CmdLet的信息,您可以使用Get-Help Select-Object -ShowWindow
  • 要查看哪些CmdLets可供您使用,您可以使用Get-Command '*Select*'

希望这可以帮助你。