Nei giorni scorsi mi e' capitato di creare un nuovo utente ed una nuova casella di posta in un ambiente ibrido Exchange/Microsoft365.
Anche se inizialmente sembrava essere andato tutto bene, dopo poco si sono manifestati alcuni problemi.
L'utente nuovo non appariva nella GAL e non riusciva a spedire agli indirizzi on-prem (per fortuna pochi indirizzi).
Analizzando meglio la situazione mi sono reso conto che questo utente esisteva in AD, ma non appariva tra i remote mailbox users in exchange.
Questo rappresentava il nocciolo della questione, ovvero esisteva un utente AD, senza attributi exchange, a cui corrispondeva una casella/utente Office365.
Tutto nasce dal processo che ho seguito per creare l'utente.
In AD ho creato il nuovo utente. Ho sincronizzato AD con AzureAD. Quando e' apparso l'utente anche nella console di amministrazione di Microsoft 365, gli ho assegnato una licenza creando cosi' la mailbox. Ho saltato a pie' pari tutta la parte Exchange on-prem.
Il risultato finale e' stato questo.
La prox volta che creero un nuovo utente, provvedero a crearlo prima on-prem, e quindi ad effettuare un remote-move.
Ma adesso e' necessario sistemare le cose.
Il processo e' abbastanza semplice (basta saperlo!!!). Occorre:
- recuperare l'ExchangeGUID della casella di posta remota
- abilitare l'utente AD come mailbox remote user (a seguito di questa operazione l'utente deve apparire nella console di Exchange)
- associare l'ExchangeGUID al nuovo utente Exchange
- sincronizzare AD con Azure AD
PASSAGGIO 1
recuperare l'exchange guid della mailbox su Microsoft 365:
get-mailbox -identity p.pippo@disneylanda.it|fl ExchangeGuid
ExchangeGuid : a09ff8fb-26f7-4d81-9425-0c967acfadcd
PASSAGGIO 2
Abilitare l'utente AD come remote mailbox user
Occorre solo abilitare l'utente in Exchange, poiche in AD gia esiste.
Enable-RemoteMailbox p.pippo -RemoteRoutingAddress p.pippo@disneylanda.mail.onmicrosoft.com
A questo punto l'utente deve apparire nell'elnco dei contatti nella GUI di Exchange
PASSAGGIO 3
Associare il corretto ExchangeGUID (recuperato nel passaggio 1) al nuovo utente
Set-RemoteMailbox p.pippo -ExchangeGUID a09ff8fb-26f7-4d81-9425-0c967acfadcd
a09ff8fb-26f7-4d81-9425-0c967acfadcd
PASSAGGIO 4
sincronizzazione AD con AzureAD
Start-ADSyncSyncCycle -PolicyType Delta
adesso potete verificare se funziona la spedizione ad indirizzi on-prem e se l'utente appare nella GAL, quando fate una ricerca.
REFERENCE
https://www.msb365.blog/?p=866
martedì 28 luglio 2020
mercoledì 15 luglio 2020
Exchange - cancellazione mailbox database
Nel caso in cui si voglia cancellare un database di posta di Exchange e' necessario spostare tutte le caselle che esso ospita su un altro DB. Soprattutto se il database che volete cancellare e' quello nativo, dovete ricordare di spostare anche le "arbiration mailboxes"
Con il seguente comando e' possibile vedere le caselle di Exchange e su quale DB sono ospitate:
Get-Mailbox |ft name,alias,database
Con il seguente comando, invece, e' possibile vedere le arbitration mailboxes e su quale DB sono ospitate:
Get-Mailbox -arbitration|ft name,alias,database
Con il seguente comando e' possibile spostare le arbitration mailbox su un altro DB
Get-Mailbox -Database "Mailbox Database 1" -arbitration | New-MoveRequest -TargetDatabase "Mailbox Database 2"
Le arbitration mailbox sono tre in Exchange2010 e 5 Exchange 2013/2016. Se cancellate si possono ricreare, ma devono esserci.
Sono usate per vari scopi, come OAB, federazione tra exchange in differenti organizzazioni, moderazione ecc.
Verifica dei database montati
Get-MailboxDatabase -Status | Sort Name | Format-Table Name, Server, Mounted
Smontare il database
Get-MailboxDatabase -Status | Sort Name | Format-Table Name, Server, Mounted
Dismount-Database "Mailbox Database 1" -Confirm:$False
Cancellare il database
Remove-MailboxDatabase "Mailbox Database 1" (da powershell si puo rimuovere il DB senza smontarlo, da GUI bisogna fare i 2 passaggi)
FORMA VELOCE
Spostamento caselle
Get-MailboxDatabase "Mailbox Database 1" |Get-Mailbox |New-MoveRequest -TargetDatabase "Mailbox Database 2" -Confirm:$true
Get-MailboxDatabase "Mailbox Database 1" |Get-Mailbox -Arbitration | New-MoveRequest -TargetDatabase "Mailbox Database 2"
Get-MailboxDatabase "Mailbox Database 1" |Get-Mailbox -Monitoring | New-MoveRequest -TargetDatabase "Mailbox Database 2" (exchange2013 in poi)
MONITORAGGIO SPOSTAMENTO
Get-MoveRequest
Get-MoveRequestStatistic
CANCELLAZIONE
Remove-MailboxDatabase "Mailbox Database 1"
P.S.
REFERENCE
https://docs.microsoft.com/en-us/exchange/recreating-arbitration-mailboxes-exchange-2013-help
http://techgenix.com/what-are-arbitration-mailboxes-used/
http://www.thatlazyadmin.com/2191-2/
Con il seguente comando e' possibile vedere le caselle di Exchange e su quale DB sono ospitate:
Get-Mailbox |ft name,alias,database
Con il seguente comando, invece, e' possibile vedere le arbitration mailboxes e su quale DB sono ospitate:
Get-Mailbox -arbitration|ft name,alias,database
Con il seguente comando e' possibile spostare le arbitration mailbox su un altro DB
Get-Mailbox -Database "Mailbox Database 1" -arbitration | New-MoveRequest -TargetDatabase "Mailbox Database 2"
Le arbitration mailbox sono tre in Exchange2010 e 5 Exchange 2013/2016. Se cancellate si possono ricreare, ma devono esserci.
Sono usate per vari scopi, come OAB, federazione tra exchange in differenti organizzazioni, moderazione ecc.
Verifica dei database montati
Get-MailboxDatabase -Status | Sort Name | Format-Table Name, Server, Mounted
Smontare il database
Get-MailboxDatabase -Status | Sort Name | Format-Table Name, Server, Mounted
Dismount-Database "Mailbox Database 1" -Confirm:$False
Cancellare il database
Remove-MailboxDatabase "Mailbox Database 1" (da powershell si puo rimuovere il DB senza smontarlo, da GUI bisogna fare i 2 passaggi)
FORMA VELOCE
Spostamento caselle
Get-MailboxDatabase "Mailbox Database 1" |Get-Mailbox |New-MoveRequest -TargetDatabase "Mailbox Database 2" -Confirm:$true
Get-MailboxDatabase "Mailbox Database 1" |Get-Mailbox -Arbitration | New-MoveRequest -TargetDatabase "Mailbox Database 2"
Get-MailboxDatabase "Mailbox Database 1" |Get-Mailbox -Monitoring | New-MoveRequest -TargetDatabase "Mailbox Database 2" (exchange2013 in poi)
MONITORAGGIO SPOSTAMENTO
Get-MoveRequest
Get-MoveRequestStatistic
CANCELLAZIONE
Remove-MailboxDatabase "Mailbox Database 1"
P.S.
se prima di cancellare il DB lo tenete smontato per un po potrebbe essere necessario disabilitare l'indicizzazione verso quel DB. Per farlo e sufficiente usare il seguente comando:
Get-MailboxDatabase -identity "mailbox database" -IndexEnable $false
e riavviare il servizio di ricerca di Exchange.
REFERENCE
https://docs.microsoft.com/en-us/exchange/recreating-arbitration-mailboxes-exchange-2013-help
http://techgenix.com/what-are-arbitration-mailboxes-used/
http://www.thatlazyadmin.com/2191-2/
BACKUP E CANCELLAZIONE EVENTI WINDOWS
Backup e cancellazione eventi di Windows
Alcune volte mi e' capitato di voler pulire gli eventi di Windows, senza pero perderne traccia, in caso di necessita.
In questi casi si puo fare un backup del registro, e quindi svuotarlo.
Siccome i registri degli eventi sono molti, fare l'operazione a mano potrebbe richiedere molto tempo.
Fare l'operazione tramite script, e' invece un'operazione molto veloce e rapida.
Bisogna ricordarsi di eseguire lo script come amministratore
La prima versione esporta i registri degli eventi.
La seconda li esporta e li svuota.
Il path dove esportarli deve essere un percorso valido.
Al nome dei file esportati vengono anteposti la data e l'ora.
VERSIONE SOLO BACKUP
$datetime=((get-date).ToString("yyyyMMdd_HHmmss_"))
Get-winevent -Listlog * | select Logname, Logfilepath | ForEach-Object -Process {
$name = $datetime + $_.Logname
$safename = $name.Replace("/","-")
wevtutil.exe EPL $name C:\Users\Owner\Desktop\eventlogs\$safename.evtx
}
VERSIONE BACKUP E CANCELLAZIONE
<#$datetime=((get-date).ToString("yyyyMMdd_HHmmss_"))
Get-winevent -Listlog * | select Logname, Logfilepath | ForEach-Object -Process {
$name = $_.Logname
$safename = $datetime + $_.Logname
$safename = $safename.Replace("/","-")
#Write-Output $safename
wevtutil.exe EPL $name C:\temp\Backupevents\$safename.evtx
}#>
$datetime=((get-date).ToString("yyyyMMdd_HHmmss_"))
Get-winevent -Listlog * | select Logname, Logfilepath | ForEach-Object -Process {
$name = $_.Logname
$safename = $datetime + $_.Logname
$safename = $safename.Replace("/","-")
wevtutil.exe EPL $name C:\temp\Backupevents\$safename.evtx
wevtutil cl $name
}
REFERENCE
https://stackoverflow.com/questions/1954203/timestamp-on-file-name-using-powershell
https://serverfault.com/questions/843645/need-a-backup-of-entire-event-log-of-windows-servers-using-cmd-or-powershell
Powershell - Visualizzare il contenuto delle variabili
Come visualizzare il contenuto di una variabile in Powershell.
Supponiamo che sia stata definita questa variabile.
E' possibile visualizzarne il contenuto in powershell oppure all'interno dello script in questi due modi (e sicuramente ne esisteranno anche di altri)
Variabile
$name=((get-date).ToString("yyyyMMdd_HHmmss_"))
Metodo 1
write-output $name
Metodo 2
Get-Variable name
Powershell - commentare le righe
Come commentare le righe in powershell
Per commentare una riga singola
# riga di commento singola
Per commentare piu righe
<#
...#>
... righe di commento multiple
...
REFERENCE
Iscriviti a:
Post (Atom)