Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Hoje precisei executar um script PowerShell para ajustar o UserPrincipalName (UPN) de todos os usuários com caixa postal em um ambiente Exchange 2007.
Devido a algumas características do ambiente do cliente, é importante que este script seja executado diariamente, logo precisei criar uma agendamento no Task Scheduler.
O script PowerShell para verificar se o UPN está correto e ajustá-lo, se necessário, segue abaixo: (mas não é o foco deste post).
$Data = Get-Date
$mailboxes = get-mailbox -resultsize:unlimited | where {$_.userprincipalname -ne ($_.SAMAccountName)+("@corpr.hunecke.com.br")} | ft $Data.ToString(), SAMAccountName, UserPrincipalName >>c:\UpdateUPN.log
$mailboxes = get-mailbox -resultsize:unlimited | where {$_.userprincipalname -ne ($_.SAMAccountName)+("@corpr.hunecke.com.br")}
foreach ($mailbox in $mailboxes) {set-mailbox $mailbox.name -UserPrincipalName (($mailbox.SAMAccountName)+("@corpr.hunecke.com.br"))}
Para fazer o agendamento do script PowerShell (.ps1) precisei criar um arquivo .bat que faz a chamada para o script PowerShell do Windows, conforme abaixo:
UpdateUPN.bat
powershell -command "& {c:\UpdateUPN.ps1}"
No Task Schedule, criei uma Basic Task para execução de um programa.
Importante: Se vc executar o script acima, receberá a mensagem dizendo que o comando get-mailbox não é reconhecido, isso porque os cmdlets do Exchange não são reconhecidos pelo PowerShell do Windows, logo é necessário carregá-los antes dos comandos específicos do Exchange, desta forma, o script ficou:
UpdateUPN.ps1
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin
$Data = Get-Date
$mailboxes = get-mailbox -resultsize:unlimited | where {$_.userprincipalname -ne ($_.SAMAccountName)+("@corpr.hunecke.com.br")} | ft $Data.ToString(), SAMAccountName, UserPrincipalName >>e:\UpdateUPN.log
$mailboxes = get-mailbox -resultsize:unlimited | where {$_.userprincipalname -ne ($_.SAMAccountName)+("@corpr.hunecke.com.br")}
foreach ($mailbox in $mailboxes) {set-mailbox $mailbox.name -UserPrincipalName (($mailbox.SAMAccountName)+("@corpr.hunecke.com.br"))}
O resultado no arquivo de log apresentará a data de execução, o nome dos usuários que tiveram seu UPN alterado e o UPN antigo (no meu caso, este campo estava em branco).
UpdateUPN.log
05/07/2011 15:46:32 Name UserPrincipalName
------------------- ---- -----------------
User1
User2
User3