PowerShell-IF 语句不区分大小写?

PowerShell-IF 语句不区分大小写?

我正在尝试编写一个 PowerShell 脚本,该脚本将循环遍历我的所有 AD 用户对象的 ProxyAddresses。如果用户有一个带有[电子邮件保护],我希望它检查他们是否也有匹配的 SMTP 地址[电子邮件保护]如果没有则添加它,等等。

$ADobjects = @(Get-ADObject -Filter 'objectClass -eq "User"' -Properties mailNickname,ProxyAddresses -SearchBase "OU=Test,DC=domain,DC=local")

$TempArr = @()
$OldDomain = "@domain.local"
$NewDomain = "@domain.com"

$ADobjects | ForEach-Object { ## Cycle thru each AD object
    $PrimaryProxyAddress = $_.mailNickname+$NewDomain
    $TempStr = ""
    $TempAdd = ""
    If ($ADobjects.Count -ge 1) ## Make sure there is at least one item to work on
        {
        $TempArr = $_.ProxyAddresses ## Set $TempArr so that it contains all of the proxy addresses
        $TempArr | ForEach-Object { ## Cycle thru each proxy address of each AD object
        If ($_.Contains($OldDomain) -eq "True") ## Does the proxy address contain the old domain?
            { ## Come here if the proxy address contains the old domain
            $TempStr = $_ -replace $OldDomain, $NewDomain ## Replace the $OldDomain name with $NewDomain
            If ($TempArr.Contains($TempStr) -ne "True") ## See if we already have an address with the new domain name
                {
                write-host $TempStr
                $TempAdd = $TempAdd + " " + $TempStr ## We don't have one so add it to the list of SMTP addresses to add
                ## I've removed all of the addition stuff to keep the script shorter
                }
            }
        }
        }
}

在我到达那个部分之前它一直有效

If ($TempArr.Contains($TempStr) -ne "True")

$TempArr 数组可能类似于

“SMTP:[email protected] smtp:[email protected] smtp:[email protected] smtp:[email protected] x400 etc”

$TempStr 可能类似于

“SMTP:[email protected]

我的 $TempStr 确实存在于 $TempArr 数组中,但我的 IF 语句从未返回 TRUE(因此它总是认为 IF 语句是 –ne TRUE)。

在 PowerShell 中,CONTAINS 不是默认不区分大小写吗?如果不区分大小写,那么“SMTP:[电子邮件保护]“-eq“SMTP:[电子邮件保护]“?或者这可能是数据类型问题(我没有收到任何错误),因为一个是数组,另一个是字符串?我这里遗漏了什么?

非常感谢

答案1

在 PowerShell 中,CONTAINS 默认不是不区分大小写的吗?

-contains 运算符是案例不敏感

.Contains() 方法是案例敏感的

如果要使用 Contains() 方法,请在比较之前将两个字符串转换为同一种情况。例如:

If ($TempArr.ToLower().Contains($TempStr.ToLower()) -ne "True")

相关内容