我尝试从其姓氏中查询AD以获取用户列表,这些用户列表中有帮助。
我下午大部分时间都在尝试,但我只得到一张空白的Excel表格。
此外,我想知道在AD中是否有多个人使用该用户名,不知道如何开始使用该用户名。
到目前为止我所拥有的:
Import-module ActiveDirectory
$names = get-content c:\tempfiles\Final.txt
$names | ForEach-Object {
$ADUserParams=@{
'Searchbase' = 'OU=Administrators,OU=Locations,DC=The,DC=group,DC=com'
'Searchscope'= 'Subtree'
}
get-aduser @ADUserParams -filter 'surname -like "$Names*"' | Select-Object Samaccountname, UserPrincipalName | export-csv C:\TempFiles\Usernames.csv
}
如果它是foreach-object
,我是否还需要过滤器?如果有多个姓氏相同的话,有没有办法检查该OU中的AD,我将如何计算它们?我可以提取一个用户姓氏列表然后运行以下内容,但它是一个手动任务来找到缺少的名字。 (如果这是有道理的)
到目前为止,我所拥有的是:
get-content C:\TempFiles\Users.txt | sort -u > C:\TempFiles\users_cleaned.txt
答案 0 :(得分:1)
这应该这样做(但是由于我现在无法访问AD而未经测试):
Import-module ActiveDirectory
$names = get-content c:\tempfiles\Final.txt
$ADUserParams=@{
'Searchbase' = 'OU=Administrators,OU=Locations,DC=The,DC=group,DC=com'
'Searchscope'= 'Subtree'
}
$names | ForEach-Object {
$CurrentUser = get-aduser @ADUserParams -filter "surname -like '$_*'" | Select-Object Samaccountname, UserPrincipalName
If ($CurrentUser) {
If ($CurrentUser.Count -gt 1){ $DuplicateSurname = $true }Else{ $DuplicateSurname=$false }
$CurrentUser | ForEach-Object {
$_ | Add-Member -MemberType NoteProperty -Name DuplicateSurname -Value $DuplicateSurname
Write-Output $_
}
} Else {
Write-Warning "$_* did not matched any users."
}
} | export-csv C:\TempFiles\Usernames.csv
<强>解释强>
在ForEach-Object
循环中,管道中的当前项由$_
表示。您还需要对过滤字符串使用双引号,因为变量(如$_
)在双引号字符串中展开,而不是单引号字符串。
你不需要在循环中声明你的$ADUserParams
哈希表(这很浪费)所以我把它移到了外面。
Get-ADUser
的结果将返回到管道,最后我将| export-csv
移到ForEach-Object
之外,以便将处理结果传送到它。我想如果没有这个你只能得到最终的结果。
“我还想知道AD中是否有多个人使用该用户名
为了解决这个问题,我已经放了第二个ForEach-Object
循环回到$CurrentUser
的每个用户,并向对象添加了一个“DuplicateSurname”属性(这应该是CSV中的一个附加列) )根据$CurrentUser
的计数是否大于1来计算。
最后,我们必须确保将$_
的内容放回到我们对Write-Object $_
执行的管道中。