PowerShell - SE instrução é insensível a maiúsculas e minúsculas?

1

Estou tentando escrever um script do PowerShell que percorra os ProxyAddresses para todos os meus objetos de usuário do AD. Se um usuário tiver um endereço SMTP com [email protected], quero que ele verifique se eles também têm um endereço SMTP correspondente de [email protected] e, se não, adicione-o, etc.

$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
                }
            }
        }
        }
}

Funciona até eu chegar na parte

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

O array $ TempArr pode ser algo como

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

O $ TempStr pode ser algo como

“SMTP:[email protected]

Meu $ TempStr existe no array $ TempArr, mas minha instrução IF nunca retorna TRUE (então sempre pensa que a instrução IF é –ne TRUE).

O padrão CONTAINS não deve ser sensível a maiúsculas e minúsculas por padrão no PowerShell? Se não faz distinção entre maiúsculas e minúsculas, não "SMTP: usuário@domínio.com" -eq "smtp: usuário@domínio.com"? Ou talvez seja um problema de tipo de dados (não recebo erros), pois um é um array e o outro é uma string? O que estou perdendo aqui?

Muito obrigado

    
por STGdb 21.02.2014 / 21:15

1 resposta

3

Isn’t CONTAINS supposed to be case insensitive by default in PowerShell?

O -contém operador é case insensitive .

O método .Contains () é case sensitive .

Se você quiser usar o método Contains (), converta as duas strings em um caso antes de comparar. Algo como:

If ($TempArr.ToLower().Contains($TempStr.ToLower()) -ne "True")
    
por 21.02.2014 / 21:30