2016-07-22 78 views
2

可能有一种简单的方法可以做到这一点,但在这一点上,我一直在头撞墙。我试图从AD中获取多个用户属性,比较其中两个属性,然后根据这些差异修改它们。然而,由于一些用户的办公室或部门领域的空值会导致比较对象失败,所以我将其替换为其他数组中的替换项以取消空值,因此我的变量如下所示:Powershell中的数组比较

$UserData = Get-ADuser -filter * -properties physicaldeliveryofficename,department | select samaccountname,physicaldeliveryofficename,department 
$Offices = $UserData.physicaldeliveryofficename -replace "^$","N/A" 
$Departments = $UserData.department -replace "^$","N/A" 

到目前为止好,但当我循环比较值,我开始陷入困境。通过用户喜欢这个循环似乎每个元素比较所有其他元素:虽然没有一个循环,并利用

Foreach ($user in $UserData.samaccountname) { 
Compare-object $offices $departments -includeqeual} 

比较对象本身给出准确的结果,但后来我需要一个循环检查无论如何对于匹配。

假设我只是想确定哪些用户具有匹配的办公室和部门领域(并且基于它做了一个非常简单的Set-ADUser命令),我将如何比较这些值而不检查每个元素与其他每个元素?

回答

2

您的ForEach循环将无法正常工作,因为即使您正在浏览每个用户帐户,也总是比较相同的办公室和部门集合。我写了这个可以给你更好的结果,并将比较结果保存为对象的一部分,这样你也可以看到用户帐户。

Get-ADuser -Filter * -properties physicaldeliveryofficename,department | ForEach { 
    $Offices = $_.physicaldeliveryofficename -replace "^$","N/A" 
    $Departments = $_.department -replace "^$","N/A" 
    $Results = Compare-object $offices $departments -IncludeEqual 
    [pscustomobject]@{ 
     User = $_.samaccountname 
     compare = $Results 
    } 
} 
+0

工作就像一个魅力! –