我真的很努力创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