Automatização de migração via scripts
Após todo setup hybrid ter sido completado, me surgiu a demanda de criar alguns scripts no qual pudessem ajudar o pessoal do service-desk a realizar as migrações, sem que eles tenham que fazer todas as tarefas uma a uma.
Pois bem, as tarefas nas quais me foram solicitadas são:
1 – Remover o dumpster – e-mails já deletados – de todas as mailbox que serão migradas ao Exchange Online
2 – Iniciar a batch de migraçao de uma lista de usuários em .TXT e parar a migração aos 95%
3 – Finalizar os usuários pausados aos 95% – incrementando aquilo que foi atualizado. Posteriormente atribuir a licença do Exchange Online a cada usuário finalizado. Impor uma quota e adicionar o usuário em um determinado grupo. (Isso foi solicitado devido a uma configuração especifica do AirWatch MDM).
O primeiro script não tem segredo, basta deixar no C:\ o content.txt com a lista de usuários. Assim como nos demais scripts, e popular tudo que estar em verde com as devidas informações.
$Content = Get-Content C:\content.txt $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://SEUEXCHANGE/PowerShell/ -Authentication Kerberos Import-PSSession $Session $Content | Get-Mailbox | Search-mailbox -SearchDumpsterOnly -DeleteContent Start-Sleep -s 10 Remove-PSSession -ComputerName “SEUEXCHANGE” Write-Host "Finished"
O segundo script:
$Content = Get-Content "C:\content.txt" $exchange = "SEUEXCHANGE" $OPUsernane ="DOMINIO.LOCAL\USUARIO" $Username ="USUARIO@DOMINIO.COM" $Password = ConvertTo-SecureString 'SENHA' -AsPlainText -Force $Livecred = New-Object System.Management.Automation.PSCredential $Username, $Password $OPLivecred = New-Object System.Management.Automation.PSCredential $OPUsernane, $Password $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $LiveCred -Authentication Basic -AllowRedirection Import-PSSession $Session Write-host "Creating move requests" $Content | New-MoveRequest -Remote -RemoteHostName MAIL.SEUDOMINIO.COM -TargetDeliveryDomain SEUTENANT.MAIL.ONMICROSOFT.COM -RemoteCredential $OPLivecred -BadItemLimit 500 -AcceptLargeDataLoss -SuspendWhenReadyToComplete:$True Write-Host "Move request creation completed" #Remove-PSSession ps.outlook.com
O terceiro script, deverá ser preenchido com algumas informações mais especificas. Por exemplo, o nome do seu pool de licensas – pode ser obtido com o comando Get-MsolAccountSku – e a sigla do seu país. Ao final, terá a inclusão dos usuários em um grupo do AD – que obviamente se não lhe for valido, basta remover a linha do script – seguido da inclusão da quota.
$Content = Get-Content "C:\content.txt" $Username ="USUARIO@DOMINIO.COM" $Password = ConvertTo-SecureString 'SENHA' -AsPlainText -Force $License = "SEUTENANT:EXCHANGESTANDARD" $Livecred = New-Object System.Management.Automation.PSCredential $Username, $Password $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $LiveCred -Authentication Basic -AllowRedirection Import-PSSession $Session Import-Module MSOnline Connect-MsolService -Credential $Livecred #Count how many move request will be completed Write-Host "Counting how many move request will be completed" $mvrqs = (Get-MoveRequest | where {$_.status -eq "AutoSuspended"}) #Resume move request AutoSuspended Write-Host "Disabling SuspendWhenReadyToComplete option" Get-MoveRequest | where {$_.status -eq ”AutoSuspended”} | Set-MoveRequest -SuspendWhenReadyToComplete:$False Write-Host "Resuming move request AutoSuspended" Get-MoveRequest | Resume-MoveRequest Write-Host "Start do-until" do { Start-Sleep -s 60 $mvrqstc = Get-MoveRequest | where {$_.status -eq "Completed" -or $_.status -eq "CompletedWithWarning"} } until ($mvrqstc.count -ge $mvrqs.count) Write-Host "Licensing" $Migration = Get-MoveRequest foreach ($User in $Migration) { $MsolUser = Get-MsolUser -SearchString $User.Displayname $MoveRequest = Get-MoveRequest $MsolUser.UserPrincipalName -ErrorAction silentlycontinue $MoveRequest | Set-MsolUser -UserPrincipalName $MsolUser.UserPrincipalName -UsageLocation "BR" If (($User.Status -eq "Completed") -or ($User.Status -eq "Completedwithwarning")) { Echo "Migration Status = $($User.Status) | $($User.Displayname)" $MsolUser = Get-MsolUser -SearchString $User.Displayname If ($MsolUser.IsLicensed -eq $True) { Echo "License Assignment = True | $($MsolUser.Displayname)" Echo "" } elseif ($MsolUser.IsLicensed -eq $False) { Echo "***License Assignment = False | $($MsolUser.Displayname). License will be assigned." Set-MsolUserLicense -UserPrincipalName $MsolUser.UserPrincipalName -AddLicenses $License Echo "" } } else { Echo "Migration Status = $($User.Status) | $($User.Displayname)" Echo "" } } foreach ($mbx in $Content) { $mbxtype = (Get-Mailbox -Identity $mbx).recipienttypedetails if( $mbxtype -ieq "UserMailbox") { ADD-ADGroupMember -Identity "NOMEDOGRUPO" -Members $mbx Set-Mailbox $mbx -ProhibitSendQuota 2900MB -ProhibitSendReceiveQuota 3GB -IssueWarningQuota 2800MB } }