我试图查看我拥有的用户列表,并希望获得一些属性(DisplayName,Office)以在表格中显示,然后将表格转换为.csv。
我一直在与之合作:
$Users = gc "C:\scripts\Users.txt
foreach ($User in $Users) {
Get-ADUser -Identity $User -Properties DisplayName,Office
}
那很好,我可以将它与"选择DisplayName,Office"但如果我做了一个" Out-File -append"它看起来很可怕。我想我应该用数组或哈希表来做这个,但是我一直在阅读它们并且不太了解如何自动化可以导出的数据。感谢您提供的任何帮助。
答案 0 :(得分:8)
这可以通过完全跳过where对象和$ users声明来简化。您所需要的只是:
<强>代码强>
get-content c:\scripts\users.txt | get-aduser -properties * | select displayname, office | export-csv c:\path\to\your.csv
答案 1 :(得分:4)
查询所有用户并按文本文件中的列表进行过滤:
$Users = Get-Content 'C:\scripts\Users.txt'
Get-ADUser -Filter '*' -Properties DisplayName,Office |
Where-Object { $Users -contains $_.SamAccountName } |
Select-Object DisplayName, Office |
Export-Csv 'C:\path\to\your.csv' -NoType
Get-ADUser -Filter '*'
返回所有AD用户帐户。然后将此用户对象流传送到Where-Object
过滤器,如果其SamAccountName
属性包含在输入文件($Users
)的用户列表中,则会检查每个对象。只有具有匹配帐户名的对象才会传递到管道的下一步。在导出数据之前,输出可以受selecting相关属性的限制。
您可以使用hashtable lookups替换-contains
运算符来进一步优化代码:
$Users = @{}
Get-Content 'C:\scripts\Users.txt' | ForEach-Object { $Users[$_] = $true }
Get-ADUser -Filter '*' -Properties DisplayName,Office |
Where-Object { $Users.ContainsKey($_.SamAccountName) } |
Select-Object DisplayName, Office |
Export-Csv 'C:\path\to\your.csv' -NoType
答案 2 :(得分:0)
以下示例基于20,000个帐户对象范围内的域。
DEFINE VARIABLE mAmount AS DECIMAL FORMAT "zzz,zzz,zz9" NO-UNDO.
ASSIGN mAmount = 100000000.
DISPLAY mAmount WITH FRAME a.
DISPLAY mAmount FORMAT "zzzzzz,zz9" WITH FRAME b.
在第二个示例中,$ userlist包含368个帐户名称(只是字符串,而不是预先获取的帐户对象)。
请注意,如果我根据您的建议添加measure-command {Get-ADUser -Filter '*' -Properties DisplayName,st }
...
Seconds : 16
Milliseconds : 208
measure-command {$userlist | get-aduser -Properties DisplayName,st}
...
Seconds : 3
Milliseconds : 496
条款以修剪实际所需的结果,则会更加昂贵。
where
索引属性似乎具有相似的性能(我尝试返回measure-command {Get-ADUser -Filter '*' -Properties DisplayName,st |where {$userlist -Contains $_.samaccountname } }
...
Seconds : 17
Milliseconds : 876
)。
即使我在集合中返回所有用户帐户属性,它也会更有效率。 (在下面添加一个select语句会使其缩短半秒)。
displayName
我无法找到一份关于AD查询链接的好文档,但是您在搜索范围内的每个帐户都会返回属性。这讨论了执行有效AD查询的基础知识 - 范围和过滤:https://msdn.microsoft.com/en-us/library/ms808539.aspx#efficientadapps_topic01
当您的搜索范围为&#34; *&#34;时,您仍然在构建一个(大)对象列表并迭代每个对象。 LDAP搜索过滤器总是更有效地首先构建列表(或者是一个狭窄的搜索库,它再次构建一个较小的列表来查询)。