arrays - 在 Powershell 中比较数组

标签 arrays powershell active-directory

可能有一个简单的方法可以做到这一点,但此时我已经用头撞墙几个小时了。我试图从 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/

相关文章:

git - Git列出自特定提交以来已修改(未添加)的所有文件,包括已添加并随后修改的文件

powershell - 从GUID列表中获取GetADUser

java - 一种在 java 代码中定义/实现故障转移 ldap 服务器的方法

azure - Powershell脚本仅启动列表中的第一个VM

powershell - 如何使用 CMD 从服务器本身查找计算机对象 OU

ios - 创建对象的 NSMutableArray

java - Collections.shuffle 没有按预期工作

php - 向数组添加空值

arrays - 如何在 Perl 6 中将未展平的数组重复传递给 reduce?

powershell - 如何将此文件夹名称设置为变量