2016-07-22 117 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

工作就像一個魅力! –