我正在尝试编写一个 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")