PowerShell - IF não diferencia maiúsculas de minúsculas?


2

Estou tentando escrever um script do PowerShell que percorrerá os ProxyAddresses para todos os meus objetos de usuário do AD. Se um usuário tiver um endereço SMTP com USER@DOMAIN.LOCAL, desejo que ele verifique se eles também têm um endereço SMTP correspondente de USER@DOMAIN.COM e, caso contrário, 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")

A matriz $ TempArr pode ser algo como

“SMTP:user@domain.local smtp:user@domain.com smtp:noone@domain.local smtp:user@newold.com x400 etc”

O $ TempStr pode ser algo como

“SMTP:user@domain.com”

Meu $ TempStr existe na matriz $ TempArr, mas minha instrução IF nunca retorna VERDADEIRO (portanto, sempre acha que a declaração SE é –ne VERDADEIRO).

CONTAINS não deve diferenciar maiúsculas de minúsculas por padrão no PowerShell? Se não diferencia maiúsculas de minúsculas, “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

Respostas:


4

CONTAINS não deve diferenciar maiúsculas de minúsculas por padrão no PowerShell?

O operador -contains não diferencia maiúsculas de minúsculas .

O método .Contains () faz distinção entre maiúsculas e minúsculas .

Se você deseja 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")

11
Ótima resposta - infelizmente, recebi o seguinte erro: // A chamada do método falhou porque [Microsoft.ActiveDirectory.Management.ADPropertyValueCollection] não contém um método chamado 'ToLower' // Mas você me forneceu as informações necessárias e alterei o linha de um método para um operador e agora funciona // If ($ TempArr -Contains $ TempStr -ne "True") // Obrigado !!
STGdb

Sim, eu estava pensando sobre isso. ToLower é para strings, não arrays - mas ei, você descobriu, é isso que conta. ;)
Ƭᴇcʜιᴇ007 22/02
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.