我需要导出我们域中的所有用户的列表,我不熟悉DSQUERY或DSGET?

我真的很努力创build将导出以下内容的查询:Account FirstName LastName用户所在的OU

理想情况下,我希望它是一个CSV。 我没有访问域控制器,但可以运行DSQUERY / DSGET /等。 从我的电脑。

根据你的工具,你可以做

dsquery user dc=contoso,dc=com | dsget user -samid -fn -ln -dn > names.csv 

这将创build一个以空格分隔的账户名,名字,姓氏和位置。

把它转换成一个真正的CSV需要更多的工作。

 $userList=dsquery user dc=contoso,dc=com | dsget user -samid -fn -ln -dn foreach ($user in $userList) { $outstring=$user.trim(" ") -replace('\s+',',') write-host `"$outstring`" } 

这会让你输出像

 "samid","fn","ln","dn" "jarey.boe","jarey","boe","cn=jarey.boe,ou=users,dc=contoso,dc=com" 

dsquery的作品,但通过拆分一个或多个空格(\ s +)转换为CSV是脆弱的。 任何具有embedded空格的属性值都会将剩余的值移到右侧。 此外,默认情况下,dsquery将在输出100个对象后停止; “-limit 0”将输出所有结果。

通过命令行执行此操作的正确方法是使用csvde:

 csvde -f names.csv -r "(&(objectClass=user)(objectCategory=user))" -l samAccountName,givenName,sn 

强制性的PowerShell方法是:

 $a = [adsisearcher]'(&(objectClass=user)(objectCategory=user))' $a.PageSize = 1000 $a.PropertiesToLoad.AddRange(@('samAccountName','givenName','sn','distinguishedName')) $a.FindAll() | ForEach-Object { $b = $_.properties $op = '' | select DN,sAMAccountName,sn,givenName $op.DN = $b.distinguishedname[0] if ($b.samaccountname) { $op.samAccountName = $b.samaccountname[0] } if ($b.givenname) { $op.givenName = $b.givenname[0] } if ($b.sn) { $op.sn = $b.sn[0] } $op } | Export-Csv names3.csv -NoTypeInformation