我得到了创建一个脚本的工作,该脚本来自部门编号(在AD中)所有用户及其相关计算机(管理者属性)。
我设法让所有用户 - 以及所有具有Managed By属性集的AD计算机的数组 - 现在我必须找到每个正确的计算机(意味着用户名(从AD用户获得))匹配一个(或更多)完整AD计算机摘录的计算机。
我现在尝试了这个:
$test = $user.samaccountname
$computer +=($ManagedBy | Where-Object {$_.ManagedBy -like "*"$test"*"})
变量的简短说明:
$ ManagedBy包含:
@{ManagedBy=CN=weibo1,OU=Users,OU=Managed,DC=asia,DC=ourComp,DC=com; Name=computer1}
@{ManagedBy=CN=kimyo1,OU=Users,OU=Managed,DC=asia,DC=ourComp,DC=com; Name=computer2}
$ test包含所需部门中的所有用户名:
putzifa1
fischch1
jonesem1
等
我真的不知道,也无法在网上找到任何好的解决方案(我有一些想法,比如foreach,然后一直是if或者什么,但我想性能不会起作用).. .. $ ManagedBy包含大约4000个条目,另一个大约350个
非常感谢你!
答案 0 :(得分:0)
你这样做太复杂了。 managedBy
属性包含用户的专有名称,因此您需要做的就是获取一个列表,其中包含来自给定部门的用户的可分辨名称,然后筛选该列表中包含的managedBy
值的计算机对象
假设部门编号存储在适当的属性(department
)中,应该这样做:
$dept = ...
$users = Get-ADUser -Filter 'department -eq "$dept"' |
select -Expand DistinguishedName
Get-ADComputer -Filter * -Properties * | ? {
$users -contains $_.ManagedBy
} | select -Expand Name
或类似的东西,如果你需要computername和相关的用户名:
$dept = ...
$users = @{}
Get-ADUser -Filter 'department -eq "$dept"' | % {
$users[$_.DistinguishedName] = $_.SamAccountName
}
Get-ADComputer -Filter * -Properties * | ? {
$users.Keys -contains $_.ManagedBy
} | select @{n='Computer';e={$_.Name}}, @{n='User';e={$users[$_.ManagedBy]}}
语句$user = @{}
创建一个空hashtable,随后用distinguishedName / sAMAccountName对($users[$_.DistinguishedName] = $_.SamAccountName
)填充。创建哈希表而不是简单列表的目的是允许您通过存储在计算机managedBy
属性中的可分辨名称查找帐户名。