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:
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:
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).
05/07/2011 15:46:32 Name UserPrincipalName ------------------- ---- ----------------- User1 User2 User3
Recentemente participei de um projeto que envolvia a migração de um cluster Windows 2000 Advanced Server com 2 nós para um uma versão mais recente do sistema operacional. Obviamente que a primeira ideia seria fazer a migração para Windows Server 2008 R2, Enterprise Edition, porém não é possível coexistir nós de cluster Windows 2000 com Windows 2008 R2. A única possibilidade para manter a configuração atual do cluster (sem refazer tudo) é migrar para Windows Server 2003.
O procedimento lógico seria adicionar novos servidores Windows Server 2003 ao cluster e depois remover, porém cabe lembrar que o cluster do Windows 2000 Advanced Server suporta apenas 2 nós, ou seja, para adicionar um nó, é necessário remover outro primeiro. Logicamente utilizaríamos a versão x64 do Windows Server 2003, porém em um cluster todos os nós devem utilizar a mesma arquitetura, neste caso x86 e por último, é obrigatório saber a senha da conta de serviço do cluster para adicionar um novo nó ao cluster.
Resumo das dicas:
Além disso, precisei desenvolver alguns scripts para fazer a criação do ambiente de laboratório e aproveito para compartilhar estes com vocês.
Como usar:
Select disk 1 attribute disk clear readonly Online disk Create part primary Select part 1 Assign letter=F format fs=ntfs unit=64k label="Dados01" quick nowait
cluster . resource "Disk F:" /create /group:"Compartilhamentos" /type:"Physical Disk"
md “F:\Pasta01\Depto TI” cluster . res "" /create /group:"Servicos" /type:"File Share" cluster . res "Depto TI" /priv path="F:\Pasta01\Depto TI" cluster . res "Depto TI" /priv Sharename="Depto TI" cluster . res "Depto TI" /AddDep:"Disk F:" cluster . res "Depto TI" /AddDep:"CLU_01" cluster . res "Depto TI" /On
Nota: CLU_01 é o nome do cluster.