すべてのADユーザーオブジェクトのProxyAddressesを循環するPowerShellスクリプトを記述しようとしています。ユーザーがUSER@DOMAIN.LOCALのSMTPアドレスを持っている場合、USER @ DOMAIN.COMの一致する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:user@domain.local smtp:user@domain.com smtp:noone@domain.local smtp:user@newold.com x400 etc”
$ TempStrは次のようなものです
“SMTP:user@domain.com”
$ TempStrは$ TempArr配列に存在しますが、IFステートメントは決してTRUEを返しません(したがって、IFステートメントは-ne TRUEであると常に考えます)。
PowerShellでは、CONTAINSはデフォルトで大文字と小文字を区別しないはずではありませんか?大文字と小文字が区別されない場合、「SMTP:user@domain.com」-eq「smtp:user@domain.com」ではありませんか?または、1つは配列で、もう1つは文字列であるため、データ型の問題かもしれません(エラーは発生しません)。ここに何が欠けていますか?
どうもありがとう