webdevqa.jp.net

PowerShell-IFステートメントでは大文字と小文字が区別されませんか?

すべてのADユーザーオブジェクトのProxyAddressesを循環するPowerShellスクリプトを作成しようとしています。ユーザーが[email protected]のSMTPアドレスを持っている場合、一致するSMTPアドレスも[email protected]を持っているかどうかを確認し、持っていない場合は追加します。

$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:[email protected]」-eq「smtp:[email protected]」ではありませんか?または、一方が配列でもう一方が文字列であるため、データ型の問題(エラーは発生しません)である可能性がありますか?ここで何が欠けていますか?

どうもありがとう

2
STGdb

PowerShellでは、CONTAINSはデフォルトで大文字と小文字を区別しないことになっていますか?

-contains operator は大文字と小文字insensitiveです。

。Contains()メソッド は大文字と小文字を区別しますsensitive

Contains()メソッドを使用する場合は、比較する前に両方の文字列を1つのケースに変換してください。何かのようなもの:

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