如何导出Active Directory对象的CSV文件?

5

我正在尝试获取所有用户记录以及与之关联的组,用于用户ID重新验证的工作。我的安全官希望将其以CSV格式呈现。

以下内容非常有效:

Get-ADUser -Filter * -Properties * | Select-Object -Property Name,SamAccountName,Description,EmailAddress,LastLogonDate,Manager,Title,Department,whenCreated,Enabled,Organization | Sort-Object -Property Name | ConvertTo-CSV

然而,这并不包括用户所属的群组。

类似于这样的尝试已经失败了:

Get-ADUser -Filter * -Properties * | Select-Object -Property Name,SamAccountName,Description,EmailAddress,LastLogonDate,Manager,Title,Department,whenCreated,Enabled,Organization, @{$_.MemberOf |Get-Group|ForEach-Object {$_.Name}} | Sort-Object -Property Name | ConvertTo-CSV

这也失败了:
Get-ADUser -Filter * -Properties * | Sort-Object -Property Name | ForEach-Object {
    $_ | Format-List -Property Name,SamAccountName,Description,EmailAddress,LastLogonDate,Manager,Title,Department,whenCreated,Enabled
    $_.MemberOf | Get-ADGroup | ForEach-Object {$_.Name} | Sort-Object
}  | ConvertTo-CSV

我可能忽略了一些简单的东西。 非常感谢您提供的任何帮助。 谢谢!

你使用的操作系统是什么?Windows Server吗? - Jose Vega
5个回答

8

从Windows Server操作系统执行以下命令以转储整个Active Directory:

csvde -f test.csv

这个命令非常宽泛,会给出比必要信息更多的内容。如果想将记录限制为只有用户记录,您应该使用以下命令:

csvde -f test.csv -r objectClass=user 

您可以进一步限制命令,只给您提供与所请求的搜索相关的字段,例如:

csvde -f test.csv -r objectClass=user -l DN, sAMAccountName, department, memberOf

如果您拥有一个Exchange服务器,并且每个与实际用户相关联的人都有一个邮箱 (而不是用于自助/实验室工作站的通用帐户),则可以使用mailNickname代替sAMAccountName。

7

为了后人......我找到了如何获得我所需的东西。以下是具体步骤,希望对其他人有用。

$alist = "Name`tAccountName`tDescription`tEmailAddress`tLastLogonDate`tManager`tTitle`tDepartment`tCompany`twhenCreated`tAcctEnabled`tGroups`n"
$userlist = Get-ADUser -Filter * -Properties * | Select-Object -Property Name,SamAccountName,Description,EmailAddress,LastLogonDate,Manager,Title,Department,Company,whenCreated,Enabled,MemberOf | Sort-Object -Property Name
$userlist | ForEach-Object {
    $grps = $_.MemberOf | Get-ADGroup | ForEach-Object {$_.Name} | Sort-Object
    $arec = $_.Name,$_.SamAccountName,$_.Description,$_.EmailAddress,$_LastLogonDate,$_.Manager,$_.Title,$_.Department,$_.Company,$_.whenCreated,$_.Enabled
    $aline = ($arec -join "`t") + "`t" + ($grps -join "`t") + "`n"
    $alist += $aline
}
$alist | Out-File D:\Temp\ADUsers.csv

有没有可能您可以注释每行代码的作用或引用一个显示信息的网站?感谢您的回复。 - Damainman

6
csvde -f test.csv

这个命令将在您的Active Directory服务器中执行CSV转储。您应该能够看到用户和组的完整DN。

您需要浏览输出文件并清除不必要的内容。


我们的操作尽可能地试图标准化使用PowerShell。我可以获取所需信息,但是在CSV文件中让用户字段和用户组成员出现在同一行上仍然有困难......因此一个用户就是一条记录。 - Sean

1
第一条命令是正确的,但请将"convert"更改为"export to csv",如下所示:
Get-ADUser -Filter * -Properties * `
    | Select-Object -Property Name,SamAccountName,Description,EmailAddress,LastLogonDate,Manager,Title,Department,whenCreated,Enabled,Organization `
    | Sort-Object -Property Name `
    | Export-Csv -path  C:\Users\*\Desktop\file1.csv

1

嗨,你可以尝试这个...

试试看...

$Ad = Get-ADUser -SearchBase "OU=OUi,DC=company,DC=com"  -Filter * -Properties employeeNumber | ? {$_.employeenumber -eq ""}
$Ad | Sort-Object -Property sn, givenName | Select * | Export-Csv c:\scripts\ceridian\NoClockNumber_2013_02_12.csv -NoTypeInformation

或者

$Ad = Get-ADUser -SearchBase "OU=OUi,DC=company,DC=com"  -Filter * -Properties employeeNumber | ? {$_.employeenumber -eq $null}
$Ad | Sort-Object -Property sn, givenName | Select * | Export-Csv c:\scripts\cer

希望它对你有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接