【问题标题】:Powershell- get value from array - Where-ObjectPowershell-从数组中获取值-Where-Object
【发布时间】:2014-07-31 06:47:25
【问题描述】:

我的工作是创建一个脚本,该脚本从部门编号(AD 中)获取所有用户及其相关计算机(由属性管理)。

我设法获得了所有用户 - 以及一组设置了 Managed By 属性的所有 AD 计算机 - 现在我必须找到每台正确的计算机(意味着用户名(从 AD 用户获得))匹配一个(或更多)完整 AD-Computer 提取的计算机。

我现在用这个试了一下:

$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 个

非常感谢您!

【问题讨论】:

  • 可能有点不清楚...我有几个部门编号(这是一个 AD 属性),我需要从该部门的人员那里获取计算机名称 :-)

标签: arrays powershell foreach


【解决方案1】:

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

【讨论】:

  • 您好,感谢您的帮助。我真的不明白你在那里做什么,但我不需要将第二部分(Get-ADcomputer)放入变量或其他东西中吗?
  • @Michael 你是否需要在变量中输出Get-ADComputer 取决于你想用它做什么。有关术语 @{} 的解释,请参阅更新的答案。
  • 我试过你的解决方案:在 C:\c\PowerShell\GetADUserWhereUID.ps1:52 char:12 + $user = @{}Get-ADUser -Filter 'department -eq "$dept"' | % {$users[$_.Distinguis ... + ~~~~~~~~~~ 表达式或语句中出现意外的标记“Get-ADUser”。
  • 天哪,这种语法在 powershell 中太糟糕了
  • 两者都试过了(复制粘贴你所做的,只需在我的 foreach(部门)中放一个)...目前它没有填充任何变量
猜你喜欢
  • 2014-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-16
  • 2018-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多