繁体   English   中英

Powershell-从数组获取值-Where-Object

[英]Powershell- get value from array - Where-Object

我完成了创建脚本的工作,该脚本从部门编号(在AD中)获取所有用户及其相关计算机(“管理者”属性)。

我设法获得了所有用户-以及所有设置了“管理者”属性的所有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个条目

提前非常感谢您!

您使这种方式过于复杂。 managedBy属性包含用户的专有名称,因此您所要做的就是获取包含给定部门的用户专有名称的列表,然后过滤该列表中包含的managedBy值的计算机对象。

假设部门号存储在适当的属性( department )中,则应执行以下操作:

$dept = ...

$users = Get-ADUser -Filter 'department -eq "$dept"' |
         select -Expand DistinguishedName

Get-ADComputer -Filter * -Properties * | ? {
  $users -contains $_.ManagedBy
} | select -Expand Name

或类似这样的东西,如果您同时需要计算机名和关联的用户名:

$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 = @{}创建一个空的哈希表 ,该哈希表随后填充了distinguishedName / sAMAccountName对( $users[$_.DistinguishedName] = $_.SamAccountName )。 创建哈希表而不是简单列表的目的是允许您通过存储在计算机的managedBy属性中的可分辨名称来查找帐户名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM