如何导出 - Active Directory对象的CSV?

时间:2010-12-07 21:47:26

标签: powershell active-directory

我正在尝试转储所有用户记录及其关联组以进行用户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

我可能错过了一些简单的事情。 任何帮助将不胜感激。 谢谢!

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:7)

从Windows Server OS执行以下命令以转储整个Active Director:

csvde -f test.csv

此命令非常广泛,可为您提供超过必要的信息。要将记录限制为仅用户记录,您需要:

csvde -f test.csv -r objectClass=user 

您可以进一步限制命令,只为您提供所需的搜索字段,例如:

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

如果您有Exchange服务器并且与活人有关联的每个用户都有一个邮箱(而不是kiosk / lab工作站的通用帐户),您可以使用mailNickname代替sAMAccountName。

答案 2 :(得分:5)

csvde -f test.csv

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

您必须浏览该输出文件并删除不必要的内容。

答案 3 :(得分:0)

你可以试试这个......

尝试..

$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

希望它适合你。

答案 4 :(得分:0)

第一个命令是正确的,但从转换为导出更改为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