PowerShell - Remover endereços SMTP específicos da matriz proxyAddresses

0

Eu tenho tentado descobrir como modificar os proxyAddresses de alguns dos meus usuários no AD usando o PowerShell. Meu objetivo básico é usar o Get-ADObject para consultar o AD para um conjunto específico de usuários e remover todos os endereços SMTP de um domínio específico dos proxyAddresses do usuário (se existirem).

$ADobjects = @(Get-ADObject -Filter 'objectClass -eq "User"' -Properties mailNickname, ProxyAddresses) | Where-Object {$_.ProxyAddresses -Match "@BADdomain.com"}

ProxyAddresses pode parecer com:

SMTP:[email protected], smtp:[email protected], smtp:[email protected], X500:/o=info/ou=test/cn=john.doe, x400:/o=info/ou=test/cn=john.doe, smtp:[email protected]

Não há uma ordem específica para isso, os endereços X500 podem ser os primeiros, podem ser os últimos, o SMTP, o X400, etc. O SMTP em maiúsculas indica o endereço SMTP primário e as letras minúsculas indicam o endereço secundário. É possível que [email protected] possa ser o endereço SMTP principal (vou ignorar o caso ao dividi-los - posso testar o caso mais adiante no processo para alterar o SMTP principal, se necessário). E (posso estar errado), mas parece que proxyAddresses não é uma matriz normal (talvez seja uma matriz multidimensional)? Mas quando tento dividir a matriz no ",", recebo um erro:

ForEach ($Object in $ADobjects)
{
$TempInfo = $Object.ProxyAddresses.Split(",")
write-host $TempInfo
}

O erro que produz é:

Method invocation failed because [Microsoft.ActiveDirectory.Management.ADPropertyValueCollection] doesn't contain a method named 'Split'.

Posso "dividir" proxyAddresses em uma matriz separada para que eu possa trabalhar em cada um deles e removê-lo se o nome do domínio for @ BADdomain.com? Eu poderia então removê-lo da matriz. Ou é possível usar ".Replace" e substituir tudo começando com SMTP para BADdomain.com (se BADdomain.com for encontrado antes do próximo SMTP)? Não sei, tentei maneiras, mas não obtive sucesso.

Muito obrigado !!

    
por STGdb 10.02.2014 / 21:44

1 resposta

1

Split é para dividir strings; a propriedade ProxyAddresses do objeto de usuário não é uma string, então não suporta "Split".

Tente algo assim (completamente não testado :)):

ForEach ($userObject in $ADobjects)
{
  ForEach ($proxyAddress in $userObject.ProxyAddresses)
  {
    write-host $proxyAddress
  }
}
    
por 10.02.2014 / 22:02