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

}

}

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *