将所有ADUser包装在CSV文件中

时间:2015-07-14 19:06:44

标签: powershell csv active-directory

我想在CSV文件中检索所有AD用户。但每次我运行我的脚本时,CSV文件都有不同的用户数量。

我知道最多有4000个用户......但有时会检索到500到600个结果。

我注意到在我的CSV文件中,最后一行是

"Person Name", "person.name@email.com","person.name","CN=somewhere,OU=USERS,OU=THERE,OU=HERE,OU=SOMEPLACE,OU=ORG,DC= (here is the part where it breaks)

我注意到,总是在最后一行,结果是休息。我的CSV文件有限制吗?

我无法弄清楚,发生了什么。

$path = ".\Users.csv"

$root = [adsi]''
$searcher = New-Object System.DirectoryServices.DirectorySearcher($root)
$searcher.Filter = "(&(objectClass=user))"
$searcher.PageSize = 5000 #iknow the max is 1000, but when i do it, and count my result, its show up 4000+
$searcher.SizeLimit = 5000


$cols = "cn", "mail", "samaccountname", "distinguishedname"
foreach ($i in $cols) {$searcher.PropertiesToLoad.Add($i)}

$users = $searcher.FindAll() |
  Select-Object @{e={$_.properties.cn};n='DisplayName'},
                @{e={$_.properties.mail};n='Email'},
                @{e={$_.properties.samaccountname};n='sAMAccountName'},
                @{e={$_.properties.distinguishedname};n='distinguishedname'}

$users | Export-Csv $path -Delimiter ";" -Encoding Default #now delimiting using ";" to do have problems with my string with commas

2 个答案:

答案 0 :(得分:3)

使用ActiveDirectory模块cmdlet。这么容易多了。看起来像这样:

$path = ".\Users.csv"
Get-ADUser -Filter * | 
  Select-Object cn, mail, samaccountname, distinguishedname |
  Export-Csv -Path $Path

根据您的PowerShell版本,您可能需要手动导入模块。

Import-Module ActiveDirectory

答案 1 :(得分:2)

在我看来,如果您想要从AD大量导出数据,您可以使用LDIFDE.EXE等集成工具来使用LDIF格式,如果您要导出为CSV格式,则可以使用CSVDE.EXE

csvde -f exportfile.csv -d "DC=SILOGIX-ESS01,DC=local" -r "(&
(objectClass=user))" -l DisplayName,Email,sAMAccountName,distinguishedname

CSVDE.EXE是Microsoft的原生工具。