可能有一个简单的方法可以做到这一点,但此时我已经用头撞墙几个小时了。我试图从 AD 中获取几个用户属性,比较其中两个属性,然后根据差异修改它们。但是,由于某些用户的办公室或部门字段具有空值,这会导致比较对象失败,因此我将这些值放入其他数组中,并使用 -replace 来消除空值,因此我的变量如下所示:
$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 命令),我将如何在不检查每个元素与其他元素的情况下比较这些值?
最佳答案
您的 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
}
}
关于arrays - 在 Powershell 中比较数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38531469/