Visualizzazione post con etichetta Exchange Server. Mostra tutti i post
Visualizzazione post con etichetta Exchange Server. Mostra tutti i post

giovedì 11 dicembre 2014

MS Exchange: abilitare un utente all'invio per conto di un Distribution Group

Per abilitare un utente ad inviare per conto di un gruppo di distribuzione (Distribution Group) è necessario procedere tramite Exchange Management Shell (EMS). Exchange Management Console, infatti, non mette a disposizione alcuna opzione per fornire questo tipo di permesso.
Il cmdlet per fornire l'abilitazione Send On Behalf su un Distribution Group è: Set-DistributionGroup
Set-DistributionGroup <Distribution_Group> -GrantSendOnBehalfTo <user>

ATTENZIONE! il metodo sopra indicato va a sostituire eventuali altri utenti/gruppi abilitati in send on behalf sulla casella. 

Per visualizzare gli utenti/gruppi abilitati in Send on Behalf sul Distribution Group possiamo utilizzare il cmdlet Get-DistributionGroup
Get-DistributionGroup <Distribution_Group> | fl name,grant*

Se vogliamo aggiungere un utente/gruppo a quelli già abilitati dobbiamo procedere in altro modo.

Innanzitutto andiamo a memorizzare i campi del Distribution Group su cui vogliamo delegare un altro utente in send on behalf all'interno di una variabile tramite il seguente comando
$gruppo = Get-DistributionGroup <Distribution_Group>

quindi, in un'altra variabile, andiamo a memorizzare l'utente che vogliamo delegare
$delegati= Get-User <utente>
Nel caso volessimo delegare gli utenti appartenenti ad un gruppo utilizziamo Get-DistributionGroup al posto di Get-User
$delegati = Get-DistributionGroup <Distribution_Group_2>

A questo punto dobbiamo aggiungere al campo GrantSendOnBehalf del primo gruppo di distribuzione, il valore contenuto all'interno del campo DistinguishedName del secondo gruppo/utente in questo modo:
$gruppo.GrantSendOnBehalfTo += $delegati.DistinguishedName

Alla fine non ci resta che settare i permessi SendOnBehalf con il comando
Set-DistributionGroup <Distribution_Group> -GrantSendOnBehalfTo $gruppo.GrantSendOnBehalfTo

Rimuovere i permessi di Send On Behalf su un Distribution Group

Per rimuovere un utente o un gruppo delegato in send on behalf su un Distribution Group dobbiamo procedere in modo analogo a quanto visto precedentemente.
Leggiamo le impostazioni del Distribution Group e memorizziamole all'interno di una variabile
$gruppo = Get-DistributionGroup <Distribution_Group>
ora abbiamo bisogna di individuare il Distinguished Name dell'utente o gruppo a cui vogliamo recovare i permessi. Per farlo utilizziamo il seguente comando
$gruppo.GrantSendOnBehalfTo | fl DistinguishedName

L'output sarà simile al seguente

DistinguishedName : CN=Gruppo_1,OU=Groups,OU=Company,DC=contoso,DC=com
DistinguishedName : CN=Gruppo_2,OU=Groups,OU=Company,DC=contoso,DC=com

Copiamo il DistinguishedName che vogliamo eliminare quindi passiamolo all'istruzione successiva come mostrato di seguito
$gruppo.GrantSendOnBehalfTo -= "CN=Gruppo_2,OU=Groups,OU=Company,DC=contoso,DC=com"

Ora non ci resta che applicare le impostazioni al Distribution Group
Set-DistributionGroup <Distribution_Group> -GrantSendOnBehalfTo $gruppo.GrantSendOnBehalfTo


Se, invece, vogliamo eliminare tutti i permessi send on behalf da un distribution Group, l'operazione è molto più semplice. Basta eseguire il seguente comando:

Set-DistributionGroup <Distribution_Group> -GrantSendOnBehalfTo $null

martedì 7 ottobre 2014

MS Exchange: incrementare lo spazio riservato alle regole (RulesQuota)

A partire da Exchange Server 2007, di default, lo spazio riservato alle regole per ciascuna mailbox è di 64KB. 
Quando si raggiunge e si supera tale limite, Outlook visualizza un messaggio di avviso: Impossibile caricare uno o più regole in Microsoft Exchange. Tali regole sono state disattivare. Cause possibili: alcuni parametri non supportati o spazio insufficiente per la memorizzazione di tutte le regole


Impossibile caricare una o più regole in Microsoft Exchange
FIG 1 - Impossibile caricare una o più regole in Microsoft Exchange

Le regole, oltre a non essere caricate sul server Exchange, vengono disattivate. 

Soluzione 1:
La prima operazione da effettuare è quella di verificare, ed eventualmente riorganizzare, le regole definite tramite Outlook. Eliminare le regole non necessarie e verificare se più regole possono essere "accorpate". Se si intende cancellare tutte le regole definite sulla casella, è possibile avviare outlook con lo switch /cleanrules . Da Start->Esegui (o tramite Win+R) digitare 
Outlook /cleanrules

Soluzione 2:
Aumentare lo spazio riservato alle regole tramite Exchange Management Shell (EMS). Utilizzando il cmd-let Set-Mailbox con il parametro -RulesQuota è possibile espandere lo spazio riservato alle regole fino a 256KB. Il comando da lanciare tramite EMS è il seguente:

Set-Mailbox -identity <identity> -RulesQuota 256kb 

Per indicare a Set-Mailbox la casella sulla quale agire è possibile utilizzare l'SMTP primario, l'Alias, il Display Name, il Dominio\account o il Distinguished Name (DN).

ad es.
set-mailbox -identity GLUBRANO -RulesQuota 256kb

Se vogliamo verificare lo spazio riservato alle regole su una specifica casella di posta possiamo utilizzare il cmd-let Get-Mailbox nel seguente modo:

Get-Mailbox <identity> | fl RulesQuota

ad es.
Get-Mailbox GLUBRANO | fl RulesQuota

giovedì 11 settembre 2014

MS Exchange: Risposte automatiche (Fuori Sede) tramite EMS

Le risposte automatiche (Fuori Sede) possono essere inserite facilmente dagli utenti tramite il client di posta (ad es. Outlook) oppure tramite OWA. 

Nel caso volessimo utilizzare Exchange Management Shell (EMS) per inserire o eliminare una regola fuori sede (out of office) dobbiamo servirci del cmd-let Set-MailboxAutoReplyConfiguration
Set-MailboxAutoReplyConfiguration <nome_utente> -AutoReplyState Scheduled -StartTime <data_e_ora_attivazione> -EndTime <data_e_ora_disattivazione> -ExternalMessage "Messaggio per i mittenti esterni all'organizzazione" -InternalMessage "Messaggio per i mittenti interni all'organizzazione."
I parametri StartTime e EndTime consentono di specificare la data e l'ora in cui attivare/disattivare l'invio della risposta automatica. Le date vanno espresse in modalità anglossassone (mese/giorno/anno).

ExternalMessage e InternalMessage consento di specificare il messaggio di risposta automatica desiderato rispettivamente per gli utenti esterni e interni all'organizzazione.

AutoReplyState consente di abilitare, disabilitare, schedulare la risposta automatica sulla casella. I valori accettati dal parametro sono:
  • Enabled per abilitare all'istante la risposta automatica fino a quando non viene deliberatamente disattivata.
  • Disabled per disabilitare la risposta automatica.
  • Scheduled permette di abilitare la risposta automatica solo nell'intervallo di date specificate con StartTime e EndTime.
Ad es.
Set-MailboxAutoReplyConfiguration GLUBRANO -AutoReplyState Scheduled -StartTime "10/31/2014 07:00 AM" -EndTime "10/31/2014 11:30 pm" -ExternalMessage "Sono in ferie." -InternalMessage "Sono in ferie."
Per disattivare la risposta automatica
Set-MailboxAutoReplyConfiguration GLUBRANO -AutoReplyState Disabled

lunedì 1 settembre 2014

MS Exchange: Fornire i permessi di Revisore sulla mailbox tramite EMS


In alcuni contesti potrebbe essere necessario abilitare un utente su una casella di posta con permessi limitati, ad esempio in solo lettura.
In questi casi basta fornire i permessi di Revisore (Reviewer) all'utente sull'intera casella di posta o su una singola cartella, permettendone la visualizzazione degli elementi ma non la modifica, la cancellazione o la creazione di nuovi. L'operazione può essere effettuata da Outlook o tramite Exchange Management Shell.
In questo articolo vedremo come effettuare l'operazione tramite EMS.

Il comando utilizzato è il seguente:
Add-MailboxFolderPermission -Identity <mailbox o mailbox:\cartella> -User <utente> AccessRights Reviewer

Vediamo qualche esempio.

Per fornire i permessi su una singola cartella, il primo passo è quello di abilitare l'utente come Revisore sulla cartella Top of Information Store:
Add-MailboxFolderPermission -Identity info@contoso.com:\ -User GLUBRANO -AccessRights Reviewer

I permessi forniti sulla cartella Top of Information Store non vengono ereditati dalle sottocartelle, quindi dobbiamo procedere manualmente all'abilitazione su una specifica cartella. Ad es. per la cartella Posta in arrivo:
Add-MailboxFolderPermission -Identity "info@contoso.com:\posta in arrivo" -User GLUBRANO -AccessRights Reviewer
Nel caso in cui i nomi delle cartelle siano in inglese è necessario sostituire Posta in arrivo con inbox
Add-MailboxFolderPermission -Identity "info@contoso.com:\Inbox" -User GLUBRANO -AccessRights Reviewer

Se invece vogliamo fornire i permessi di revisore sull'intera casella di posta possiamo crearci uno script PS1 che individua le cartelle presenti sulla casella di posta e abilita l'utente come revisore su ciascuna di esse. Allo script vanno ovviamente passati la mailbox e l'utente che si intende abilitare.


param (
 [Parameter( Mandatory=$true)]
 [string]$Mailbox,

 [Parameter( Mandatory=$true)]
 [string]$User
)
Set-AdServerSettings -ViewEntireForest $true 

$exclusions = @("/Recoverable Items",
                "/Deletions",
                "/Purges",
                "/Versions"
                )

ForEach($folder in (Get-MailboxFolderStatistics $Mailbox |select folderpath))
 {
  if ($folder.FolderPath -eq "/Top of Information Store")
  {
   $foldername=$Mailbox;
  }
  else
  {
   $foldername=$Mailbox + ":" + $folder.FolderPath.Replace("/","\"); 
  }
 
  if ($exclusion -notcontains $folder.FolderPath)
  {
   if (Get-MailboxFolderPermission $foldername -User $User)
   {
    Set-MailboxFolderPermission $foldername -User $User -AccessRights Reviewer
   }
   else
   {
       Add-MailboxFolderPermission $foldername -User $User -AccessRights Reviewer
   }
  }
 

 }

Dal link di seguito è possibile scaricare il file PS1
DOWNLOAD

mercoledì 20 agosto 2014

MS Exchange: Visualizzare i Domain Controller utilizzati da Exchange utilizzando EMS

Exchange Server, tramite il servizio DSAccess (Directory Service Access), gestisce autonomamente il discovery dei domain controller presenti all'interno dell'infrastruttura. Il servizio si attiva circa ogni 15 min. e registra, nel log Applicazione, gli eventi MSExchange ADAccess con codice 2080 contenenti l'elenco dei DC trovati.


Evento MSExchange ADAccess
FIG 1 - Evento MSExchange ADAccess



In un'azienda può essere utile conoscere quali domain controller vengono utilizzati da Exchange, ad es., se vengono installati nuovi domain controller all'interno dell'infrastruttura potrebbe essere utile verificare se i server Exchange riescono a contattarli. 

Il cmdlet utile a tale scopo è Get-ExchangeServer.
Tramite Get-ExchangeServer è possibile visualizzare gli attributi di uno o tutti i server Exchange presenti all'interno dell'infrastruttura. Se ci interessa conoscere quali domain controller vengono utilizzati dai vari server Exchange presenti possiamo utilizzare il seguente comando:

Get-ExchangeServer -Status | FL Name,Current*

Il comando resitutisce i campi Name, CurrentDomainControllers, CurrentGlobalCatalogs e CurrentConfigDomainController che di seguito vedremo in dettaglio.

Name
Nome del server Exchange

CurrentDomainControllers
Indica i domain controller utilizzati per eseguire query LDAP alla porta 389

CurrentGlobalCatalogs
Indica i domain controller che hanno la funzione di Global Catalog utilizzati per eseguire query LDAP alla porta 3268

CurrentConfigDomainController
Indica il domain controller scelto per leggere/scrivere sulla Configuration Partition di Active Directory. La Configuration Partition viene modificata ogni volta che si effettua una modifica all'organizzazione di Exchange.


mercoledì 13 agosto 2014

MS Exchange: Aggiornare la rubrica offline di Exchange tramite EMS


Può capitare, ad es. a seguito di modifica o creazione di massa di mailbox, di dover forzare la rigenerazione delle rubrica (o le rubriche) offline di Exchange (rubriche che vengono scaricate dai client outlook). Tale operazione è in genere schedulata per essere eseguita ogni giorno sul server tuttavia, per via dei ritardi con cui outlook sincronizza la rubrica offline (OAB), possono verificarsi disallineamenti anche superiori alle 24 ore.

Per forzare la rigenerazione della rubrica, possiamo utilizzare il seguente cmdlet tramite Exchange Management Shell (EMS):

Get-OfflineAddressBook | Update-OfflineAddressBook

una volta rigenerata la rubrica possiamo riavviare il servizio Background file transfer con il comando

Get-ClientAccessServer | Update-FileDistributionService

Ora non resta che forzare il client Outlook a scaricare l'Offline Address Book (OAB): In Outlook 2010/2013 cliccare sul menu Invia/Ricevi selezionare Gruppi di invio/ricezione quindi cliccare su Scarica rubrica...

Per scaricare una copia completa della rubrica rimuovere la spunta alla voce Scarica modifiche successive a ultima operazione di invio/ricezione

mercoledì 30 luglio 2014

MS Exchange: Rimuovere regola di posta in arrivo impostata sulla casella tramite EMS


Nell'articolo MS Exchange: Visualizzare le regole di posta in arrivo impostate sulla casella tramite EMS abbiamo visto come visualizzare le regole definite sulla posta in arrivo di una casella tramite Exchange Management Shell.
In questo articolo, sempre tramite EMS, vedremo come rimuovere una singola regola o tutte le regole di posta in arrivo definite sulla casella utilizzando il cmdlet Remove-InBoxRule.

Per eliminare una specifica regola di posta in arrivo definita su una casella possiamo utilizzare il seguente comando:

Remove-InBoxRule -Mailbox <casella_di_posta> -identity <nome_regola> -Confirm:$FALSE -Force

Al posto della casella di posta è possibile utilizzare l'Alias, Display Name, Dominio\account o Distinguished Name (DN). I parametri -Confirm:$FALSE e -Force forzano l'eliminazione della regola senza che venga visualizzata una richiesta di conferma.

ad es.
Remove-InBoxRule -Mailbox GLUBRANO -identity TEST -Confirm:$FALSE -Force

con il comando sopra illustrato eliminiamo la regola nominata TEST dalla casella GLUBRANO

Se invece vogliamo eliminare tutte le regole di posta in arrivo definite sulla casella:
Get-InboxRule -Mailbox <casella di posta> | Remove-InboxRule

ad es.
Get-InboxRule -Mailbox GLUBRANO | Remove-InboxRule -Confirm:$FALSE -Force

martedì 29 luglio 2014

MS Exchange: Visualizzare le regole di posta in arrivo impostate sulla casella tramite EMS


Tramite Exchange Management Shell (EMS) è possibile visualizzare le regole di posta in arrivo definite sulla casella utilizzando il cmdlet Get-InboxRule:
Get-InboxRule -Mailbox <casella_di_posta>

Al posto della casella di posta è possibile utilizzare l'Alias, Display Name, Dominio\account o Distinguished Name (DN)

ad es.
Get-InboxRule -Mailbox GLUBRANO
Get-InboxRule -Mailbox giovanni.lubrano@contoso.com
Get-InboxRule
FIG 1 - Get-InboxRule


Se vogliamo maggiori dettagli sulle regole possiamo utilizzare la Format List (fl)
Get-InboxRule -Mailbox <casella_di_posta> |fl

ad es.
Get-InboxRule -Mailbox GLUBRANO

e avremo un output dettagliato sulle regole del tipo mostrato di seguito


RunspaceId                            : 871f5e59-3e43-4f9d-8a6b-bd94ede79728
Description                           : If the message:
                                            the message was received from 'TEST@contoso.com'
                                        Take the following actions:
                                            move the message to folder 'TEST'
                                            and stop processing more rules on this message
                                        
Enabled                               : True
Identity                              : giovannilubrano.com/USERS/010/GLUBRANO\397942073027723265
InError                               : False
Name                                  : TEST@contoso.com
Priority                              : 1
RuleIdentity                          : 397942073027723265
SupportedByTask                       : True
BodyContainsWords                     : {}
ExceptIfBodyContainsWords             : {}
FlaggedForAction                      : 
ExceptIfFlaggedForAction              : 
FromAddressContainsWords              : {}
ExceptIfFromAddressContainsWords      : {}
From                                  : {"TEST@contoso.com" [SMTP:TEST@contoso.com]}
ExceptIfFrom                          : 
HasAttachment                         : False
ExceptIfHasAttachment                 : False
HasClassification                     : 
ExceptIfHasClassification             : 
HeaderContainsWords                   : {}
ExceptIfHeaderContainsWords           : {}
FromSubscription                      : 
ExceptIfFromSubscription              : 
MessageTypeMatches                    : 
ExceptIfMessageTypeMatches            : 
MyNameInCcBox                         : False
ExceptIfMyNameInCcBox                 : False
MyNameInToBox                         : False
ExceptIfMyNameInToBox                 : False
MyNameInToOrCcBox                     : False
ExceptIfMyNameInToOrCcBox             : False
MyNameNotInToBox                      : False
ExceptIfMyNameNotInToBox              : False
ReceivedAfterDate                     : 
ExceptIfReceivedAfterDate             : 
ReceivedBeforeDate                    : 
ExceptIfReceivedBeforeDate            : 
RecipientAddressContainsWords         : {}
ExceptIfRecipientAddressContainsWords : {}
SentOnlyToMe                          : False
ExceptIfSentOnlyToMe                  : False
SentTo                                : 
ExceptIfSentTo                        : 
SubjectContainsWords                  : {}
ExceptIfSubjectContainsWords          : {}
SubjectOrBodyContainsWords            : {}
ExceptIfSubjectOrBodyContainsWords    : {}
WithImportance                        : 
ExceptIfWithImportance                : 
WithinSizeRangeMaximum                : 
ExceptIfWithinSizeRangeMaximum        : 
WithinSizeRangeMinimum                : 
ExceptIfWithinSizeRangeMinimum        : 
WithSensitivity                       : 
ExceptIfWithSensitivity               : 
ApplyCategory                         : {}
CopyToFolder                          : 
DeleteMessage                         : False
ForwardAsAttachmentTo                 : 
ForwardTo                             : 
MarkAsRead                            : False
MarkImportance                        : 
MoveToFolder                          : TEST
RedirectTo                            : 
SendTextMessageNotificationTo         : {}
StopProcessingRules                   : True
MailboxOwnerId                        : giovannilubrano.com/USERS/010/GLUBRANO
IsValid                               : True


lunedì 14 luglio 2014

MS Exchange: Abilitare/disabilitare un utente per l'invio per conto di un'altra casella di posta tramite EMS


All'interno di un azienda può essere utile abilitare un utente ad inviare email "per conto di" una casella di struttura condivisa. Tale abilitazione viene fornita tramite il cmdlet Set-Mailbox

Per abilitare un utente in send on behalf (invio per conto) su una casella è possibile utilizzare il seguente comando da Exchange Management Shell (EMS):
Set-Mailbox <casella_di_struttura> -GrantSendOnBehalfto @{Add= "utente"}
Ad es.
Set-Mailbox info@contoso.com -GrantSendOnBehalfto @{Add= "GLUBRANO"}

Tale comando aggiunge l'utente in send on behalf sulla casella (eventuali altri utenti delegati in send on behalf sulla stessa casella non vengono toccati). Se invece intendiamo rimuovere tutti gli altri delegati in send on behalf e abilitare solo l'utente che indichiamo, possiamo utilizzare il seguente comando:
Set-Mailbox <casella_di_struttura>  -GrantSendOnbehalfto <casella_utente>
Ad es.
Set-Mailbox info@contoso.com -GrantSendOnBehalfto giovanni.lubrano@contoso.com


Per rimuovere l'abilitazione Send On Behalf ad uno o più utenti:
Set-Mailbox <casella_di_struttura> -GrantSendOnBehalfto @{Remove= "utente"}
Ad es.
Set-Mailbox info@contoso.com -GrantSendOnBehalfto @{Remove= "GLUBRANO"}

giovedì 10 luglio 2014

MS Exchange: Settare le Impostazioni Internazionali tramite EMS

Tramite Exchange Management Shell (EMS) possiamo settare le impostazioni internazionali come formato data e ora, lingua (compresa la lingua delle cartelle) e fuso orario di una casella di posta utilizzando il cmdlet Set-MailboxRegionalConfiguration.
Set-MailboxRegionalConfiguration <identity> [-DateFormat ] [-Language ] [-LocalizeDefaultFolderName ] [-TimeFormat ] [-TimeZone ]
Per indicare a Set-MailboxRegionalConfiguration la casella sulla quale agire è possibile utilizzare l'SMTP primario, l'Alias, il Display Name, il Dominio\account o il Distinguished Name (DN).

Ad es.
Set-MailboxRegionalConfiguration GLUBRANO -DateFormat "dd/MM/yyyy" -TimeFormat "HH:mm" -TimeZone "W. Europe Standard Time"   -Language "it-IT" -LocalizeDefaultFolderName:$true

oppure nel caso volessimo settare come lingua quella inglese (Stati Uniti) possiamo utilizzare il seguente comando:
Set-MailboxRegionalConfiguration giovanni.lubrano@contoso.com -DateFormat "MM/dd/yyyy" -TimeFormat "HH:mm" -TimeZone "W. Europe Standard Time"   -Language "en-US" -LocalizeDefaultFolderName:$true
da notare che nel cambiare la lingua è necessario modificare anche il formato della data (negli USA viene indicato prima il mese poi il giorno e infine l'anno).

I parametri utilizzati nei 2 esempi sono:

DateFormat
Ci consente di specificare il formato della data.

TimeFormat
Specifica il formato dell'ora.

TimeZone
Specifica il fuso orario

Language
Permette di specificare l'impostazione della lingua della casella di posta (it-IT, en-US, ecc)

LocalizeDefaultFolderName
Specifica se rinominare le cartelle predefinite (posta in arrivo, Posta inviata, Posta eliminata, ecc) in modo che i nomi corrispondano alla lingua specificata.


Impostazioni Internazionali OWA
FIG. 1 Impostazioni Internazionali OWA

martedì 8 luglio 2014

MS Exchange: Identificare caselle di posta disconnesse tramite EMS

Per identificare le caselle di posta disabilitate nella propria organizzazione è possibile utilizzare il seguente comando da Exchange Management Shell (EMS).
Get-mailboxserver | foreach {Get-MailboxStatistics -Server $_ | where { $_.DisconnectDate -ne $null } 
| select DisplayName,ServerName,DatabaseName,DisconnectDate, DisconnectReason, MailboxGUID, LegacyDN} 
| export-csv C:\Disconnected-Mailbox_List.csv 
Con tale comando andiamo ad interrogare ciascun server di posta (Get-MailboxServer) e verifichiamo che le caselle residenti sul server non abbiano valorizzato il campo DisconnectDate. In caso contrario, se il campo DisconnectDate è valorizzato, abbiamo individuato una casella di posta disconnessa quindi, all'interno del file C:\Disconnected-Mailbox_List.csv, andiamo a salvare le informazioni relative alla casella disconnessa in particolare andiamo a salvare i seguenti campi:

DisplayName
Si tratta del Display Name della casella di posta

ServerName
Indica il nome del server dove si trova la casella disconnessa

DatabaseName
Database dove risiede la casella

DisconnectDate
Data e ora in cui la casella di posta è stata disconnessa

DisconnectReason
Indica il motivo della disconnessione. Può assumere 2 valori: SoftDeleted o Disabled

  • SoftDeleted: quando una casella di posta viene spostata da un database su MS Exchange Server 2010 SP1 a un altro database, Exchange non cancella completamente la mailbox dal database sorgente una volta completata l'operazione ma contrassegna la casella sorgente come SoftDeleted
  • Disabled: quando una casella di posta viene disconnessa o rimossa usando Disable-Mailbox o Remove-Mailbox, Exchange la contrassegna con lo stato disabled.


MailboxGUID
Identificativo univoco della mailbox

LegacyDN
Legacy Distinguished Name 

martedì 1 luglio 2014

MS Exchange: Trovare caselle di posta inutilizzate tramite EMS


In alcune realtà aziendali può essere utile verificare la presenza caselle di posta non più utilizzate sull'infrastruttura interna.
Con i seguenti comandi eseguiti tramite Exchange Management Shell (EMS) troviamo tutte le caselle di posta a cui gli utenti non accedono da almeno 90 giorni.
$mailboxes = Get-Mailbox -ResultSize Unlimited 
$mailboxes | ?{(Get-MailboxStatistics $_).LastLogonTime -and (Get-MailboxStatistics $_).LastLogonTime -le (Get-Date).AddDays(-90)} > c:\mailbox-in-disuso.txt

Come prima cosa utilizziamo il comando Get-Mailbox per individuare tutte le mailbox presenti sulla nostra infrastruttura. Il risultato viene memorizzato all'interno della variabile $mailboxes.
Nell'istruzione successiva, alla collezione di oggetti contenuti nella variabile $mailboxes, applichiamo, tramite pipe (|), un filtro con il cmdlet Where-Object (nell'istruzione abbiamo utilizzato l'alias "?") che individua tutte le caselle di posta in cui la proprietà LastLogonTime è valorizzata e l'ultimo logon risulta effettuato oltre 90 giorni fa: se la data indicata dall'ultimo logon è inferiore (antecedente) o uguale alla data di 90 giorni fa (data attuale - 90 giorni) allora abbiamo trovato una mailbox inutilizzata. 
L'output prodotto da tale filtro viene dirottato sul file mailbox-in-disuso.txt con l'istruzione >c:\mailbox-in-disuso.txt

venerdì 27 giugno 2014

MS Exchange: Impostare quote di archiviazione su una casella di posta tramite EMS


Per settare le quote di archiviazione di una casella di posta tramite Exchange Management Shell (EMS), è possibile utilizzare il cmdlet Set-Mailbox
La sintassi è la seguente


Set-Mailbox <casella_posta> -IssueWarningQuota <quota> -ProhibitSendQuota <quota> -ProhibitSendReceiveQuota <quota> -UseDatabaseQuotaDefaults $false

ad es.
Set-Mailbox GLUBRANO -IssueWarningQuota 850MB -ProhibitSendQuota 900MB -ProhibitSendReceiveQuota 1GB -UseDatabaseQuotaDefaults $false

Set-Mailbox giovanni.lubrano@contoso.com -IssueWarningQuota 850MB -ProhibitSendQuota 900MB -ProhibitSendReceiveQuota 1GB -UseDatabaseQuotaDefaults $false

Al posto della casella di posta è possibile utilizzare l'Alias, Display Name, Dominio\account o Distinguished Name (DN)

I parametri mostrati nell'esempio sono:

UseDatabaseQuotaDefaults
Consente di specificare se la casella di posta deve utilizzare o meno le impostazioni di quota specificate per il database dove risiede la casella. Nell'esempio abbiamo passato a tale parametro il valore $False, in questo modo le impostazioni di quota specificate per il database dove risiede la casella vengono ignorate.

IssueWarningQuota
Consente di specificare la dimensione della cassetta postale che determina l'invio di un messaggio di avviso all'utente.

ProhibitSendQuota
Consente di specificare la dimensione della cassetta postale raggiunta la quale l'utente non potrà più inviare

ProhibitSendReceiveQuota
Consente di specificare la dimensione della cassetta postale raggiunta la quale l'utente non potrà più inviare e ricevere email

Ai parametri IssueWarningQuota, ProhibitSendQuota, ProhibitSendReceiveQuota vanno passati numeri interi qualificati con una delle seguenti unità:
B (byte)
KB (kilobyte)
MB (megabyte)
GB (gigabyte)
TB (terabyte)
Se il valore non viene qualificato viene considerato come byte.


Exchange Server Storage Quotas
FIG. 1 Exchange Server Storage Quotas

lunedì 23 giugno 2014

MS Exchange: Rimuovere i permessi di Full-Access a un utente su una casella di posta tramite EMS


Nell'articolo MS Exchange: Abilitare un utente in Full-Access su una casella di posta tramite EMS  abbiamo visto come abilitare un utente in full-access su una casella di posta. In questo articolo faremo l'operazione inversa: rimuoviamo i permessi di full-access all'utente da una casella di posta condivisa.
Il cmdlet utilizzato per eseguire l'operazione è Remove-MailboxPermission utilizzando la seguente sintassi
Remove-MailboxPermission <mailbox_da_condividere> -AccessRights FullAccess -user <utente_da_disabilitare> -confirm:$false

ad es.
Remove-MailboxPermission info@contoso.com -AccessRights FullAccess -user GLUBRANO -confirm:$false

Al posto dell'indirizzo di posta primario è possibile utilizzare l'alias, il Distinguished Name (DN), dominio\account oppure l'Immutable ID.
L'opzione -confirm:$false fa in modo che non venga richiesta alcuna conferma per l'esecuzione dell'operazione.


Come già visto nell'articolo relativo all'abilitazione, se volessimo rimuovere più utenti dal Full-Access su una casella di posta possiamo avvalerci di uno script. Lo script mostrato di seguito (Remove-FullAccess.ps1) accetta come parametri la casella di posta condivisa condividere è un file CSV contenente l'elenco degli utenti a cui eliminare il Full-Access sulla casella. 
Esempio di utilizzo dello script:
c:\scripts\Add-FullAccess.ps1 info@contoso.com  c:\scripts\elenco.csv
param($Arg1,$Arg2)
Set-AdServerSettings -ViewEntireForest $true 

$csv = Import-Csv $Arg2 -Header @("UserToDisable")
foreach ($line in $csv) {    
 Remove-MailboxPermission $Arg1 -AccessRights FullAccess -user $line.UserToEnable -confirm:$false
}
Di seguito è possibile effettuare il download dello script.
Download script Remove-FullAccess.ps1

mercoledì 18 giugno 2014

MFCMAPI: Spostare una cartella speciale (Posta in arrivo, Posta indesiderata, Posta eliminata ecc)

In alcuni casi mi è capitato, a causa di anomalie sulla casella di posta, che cartelle speciali e predefinite (come Posta indesiderata, Posta eliminata, Posta in arrivo, ecc) fossero state spostate all'interno di altre cartelle. Provando a spostare nella posizione corretta tali cartelle tramite outlook si riceve il messaggio Impossibile spostare gli elementi. Impossibile spostare le cartelle speciali e predefinite, ad esempio Posta in arrivo, Contatti, Calendario, Attività e Soluzioni.


Impossibile spostare gli elementi
FIG. 1 Impossibile spostare gli elementi


Come fare per riportare la cartella nella posizione standard?
La soluzione è tramite MFCMAPI. Microsoft Foundation Class MAPI (MFCMAPI) è un tool molto utilizzato per identificare/risolvere problemi in Outlook e su caselle di posta in Exchange. Il tool può essere scaricato gratuitamente da http://mfcmapi.codeplex.com/ e non richiede installazione.
Per spostare le cartelle speciali procedere nel seguente modo:

  1. Assicurarsi che Outlook sia configurato in cached mode, quindi chiudere il client di posta;
  2. Avviare MFCMAPI sul client dell'utente che presenta il problema;
  3. Dal menu Session selezionare Logon e, nel caso si disponga di più profili di Outlook, indicare il profilo che si intende caricare;
    FIG. 2 MFCMAPI
  4. Cliccare 2 volte sulla casella di posta, espandere la voce Radice - Cassetta postale;
  5. Espandere la cartella IPM_SUBTREE
  6. Localizzare la cartella che si intende spostare, cliccarci su con il tasto destro e selezionare Copy dal menu contestuale;
  7. Selezionare la cartella IPM_SUBTREE quindi cliccarci su con il tasto destro del mouse e selezionare Paste;
  8. Nella finestra successiva viene chiesto se si vuole copiare solo il contenuto della cartella. Non selezionare nulla e cliccare su OK;
    MFCMAPI: Paste folder contents only
    FIG. 3 MFCMAPI Paste folder contents only
  9. Selezionare l'opzione Move folder instead of copy e Copy Subfolders quindi cliccare su OK
MFCMapi Copy Subfolders, Move folder instead of copy
FIG. 4 MFCMAPI Copy Subfolders, Move folder instead of copy


lunedì 16 giugno 2014

MS Exchange: Abilitare un utente in Full-Access su una casella di posta tramite EMS

In quest'articolo illustrerò come fornire i permessi di Full-Access su una casella di posta elettronica tramite Exchange Management Shell (EMS).
Il cmdlet per fornire i permessi in full access ad un utente su una casella di posta è Add-MailboxPermission.
La sintassi è la seguente:
Add-MailboxPermission <mailbox_da_condividere> -AccessRights FullAccess -user <utente_da_delegare>

ad es.
Add-MailboxPermission info@contoso.com -AccessRights FullAccess -user giovanni.lubrano@contoso.com
Add-MailboxPermission info@contoso.com -AccessRights FullAccess -user GLUBRANO


Al posto dell'indirizzo di posta primario è possibile utilizzare l'alias, il Distinguished Name (DN), dominio\account oppure l'Immutable ID.

AutoMapping
A partire da Exchange Server 2010 SP1 è stata introdotta una nuova funzionalità che consente ai client Outlook 2007 e successivi, tramite il servizio di individuazione automatica, di agganciare automaticamente le caselle di posta su cui l'utente è abilitato in Full-Access. Tale funzionalità è chiamata AutoMapping. Ciò può semplificare la vita all'utente che non deve configurarsi manualmente le caselle di posta condivise, tuttavia, se l'utente è abilitato in Full-Access ad un numero elevato di caselle, potrebbe comportarte un problema di prestazioni di Outlook. In Exchange 2010 SP1 non è in alcun modo possibile disattivare questa funzionalità mentre in Exchange 2010 SP2 è possibile disabilitarla utilizzando la shell.


Utilizzando l'opzione -AutoMapping con il cmdlet Add-MailboxPermission in EMS è possibile forzare l'abilitazione/disabilitazione di tale funzionalità quando deleghiamo un utente in full access su una casella di posta.

Per disabilitare l'AutoMapping
Add-MailboxPermission <mailbox_da_condividere> -AccessRights FullAccess -user <utente_da_delegare> -AutoMapping $FALSE

Per abilitare nuovamente l'automapping

Add-MailboxPermission <mailbox_da_condividere> -AccessRights FullAccess -user <utente_da_delegare> -AutoMapping $TRUE

Quando si forniscono i permessi in Full-Access su una casella con l'AutoMapping attivato, Exchange provvede:

  • a popolare l'attributo msExchDelegateListLink in Active Directory sull'account della casella condivisa (viene aggiunto l'utente delegato);
  • a popolare l'attributo MsExchDelegateListBL in AD sull'account dell'utente delegato. L'attributo contiene la casella di posta su cui l'utente è stato abilitato in full-access con AutoMapping attivo. Outlook interroga tale attributo per auto-configurare la casella di posta condivisa.


Tale processo funziona perfettamente nel caso di permessi assegnati individualmente agli utenti ma in molte aziende l'assegnazione di permessi viene gestita tramite gruppi e in questi casi l'AutoMapping non funziona. Quando un gruppo viene delegato in Full-Access su una casella i permessi vengono ereditati anche dai membri ma l'attributo msExchDelegateListBL viene modificato solo al gruppo e non ai suoi membri.
Un workaround a questo tipo di problema è quello di crearsi uno script che, passati come parametri la casella di posta e il gruppo, fornisce i permessi Full-Access a tutti gli utenti appartenenti al gruppo. Nel caso un utente venga aggiunto successivamente al gruppo in AD possiamo rieseguire lo script oppure abilitare singolarmente l'AutoMapping all'utente con il cmdlet Add-MailboxPermission e il paramentro -AutoMapping $True.


Se vogliamo abilitare più utenti in Full-Access su una casella di posta possiamo avvalerci di uno script. Lo script che illustrerò di seguito (Add-FullAccess.ps1) accetta come parametri la casella di posta da condividere e un file CSV contenente l'elenco degli utenti da abilitare in Full-Access sulla casella. Nello script viene forzata la disabilitazione dell'AutoMapping. Rimuovendo il parametro -AutoMapping $False o passandogli il valore $True, l'AutoMapping verrà attivato. Ovviamente è possibile modificare lo script in modo tale che possiamo decidere se abilitare o meno l'AutoMapping in base ad un apposito parametro passato nella chiamata allo stesso.


Esempio di utilizzo dello script:
c:\scripts\Add-FullAccess.ps1 info@contoso.com  c:\scripts\elenco.csv


param($Arg1,$Arg2)
Set-AdServerSettings -ViewEntireForest $true 
$csv = Import-Csv $Arg2 -Header @("UserToEnable")
foreach ($line in $csv) {    
 Add-MailboxPermission $Arg1 -AccessRights FullAccess -user $line.UserToEnable -AutoMapping $False
} 

Per quanto riguarda lo script per abilitare l'AutoMapping a tutti gli utenti appartenenti ad un gruppo possiamo creare uno script a cui passare, tramite parametri, la mailbox da condividere e il nome del gruppo. Lo script provvederà ad abilitare l'AutoMapping a tutti gli utenti appartenenti al gruppo

ad es.
c:\scripts\Add-FullAccessGroup.ps1 info@contoso.com  GruppoAD


param($Arg1,$Arg2)
Set-AdServerSettings -ViewEntireForest $true 
$DL = Get-distributiongroupmember $Arg2 | Select-Object -ExpandProperty Name
foreach ($MEMBER in $DL ) {
 Add-MailboxPermission $Arg1 -AccessRights FullAccess -User $MEMBER -AutoMapping $True
}
I più pigri possono scaricare i 2 script tramite il link sottostante
Download Scripts

giovedì 12 giugno 2014

MS Exchange:verificare Exchange ActiveSync, MAPI, OWA, POP o IMAP su una cassetta postale tramite EMS

Nell'articolo MS Exchange: abilitare/disabilitare Exchange ActiveSync, MAPI, OWA, POP o IMAP per una cassetta postale tramite EMS abbiamo visto come attivare alcune caratteristiche sulla casella di posta tramite il comando Set-CASMailbox da Exchange Management Shell (EMS).

E se volessimo verificarne solo lo stato attualmente impostato sulla casella?

Niente di più semplice. Basta utilizzare il comando Get-CASMailbox e indicare la casella di posta (tramite indirizzo di posta, user id o alias).

ad es.
Get-CASMailbox giovanni.lubrano@contoso.com
Get-CASMailbox <user_ID>

get-mailbox <user_id>
Fig. 1 Get-CASMailbox <user_id>

con gli esempi sopra indicati si ottiene, in output, la situazione sullo stato di Exchange ActiveSync, MAPI, OWA, POP e IMAP.



Se invece ci interessa solo una delle caratteristiche possiamo utilizzare la seguente sintassi:

Get-CASMailbox UserName@DomainName |fl PopEnabled
Per visualizzare se il protocollo POP è attivo sulla casella

Get-CASMailbox UserName@DomainName |fl OWAEnabled
Per visualizzare se l'accesso tramite OWA è abilitato sulla casella

Get-CASMailbox UserName@DomainName |fl ImapEnabled
Per visualizzare se il protocollo IMAP è attivo sulla casella

get-CASMailbox UserName@DomainName |fl MapiEnabled
Per visualizzare se il protocollo MAPI è attivo sulla casella

get-CASMailbox UserName@DomainName |fl ActiveSyncEnabled
Per visualizzare se Active Sync è attivo sulla casella


Fig. 2 Get-CASMailbox

That's all

sabato 7 giugno 2014

MS Exchange: abilitare/disabilitare Exchange ActiveSync, MAPI, OWA, POP o IMAP per una cassetta postale tramite EMS


Exchange Management Shell (EMS), introdotto con Microsoft Exchange Server 2007, è un'estensione di Powershell orientata agli amministratori dei server Exchange. Quest'articolo sarà il primo di una lunga (spero) serie relativa ai comandi su EMS. In tali articoli non mi soffermerò sulla storia o sulle funzioni di questa potentissima shell (l'argomento è troppo vasto per essere trattato in articoli su blog) ma mi concentrerò solamente su  determinate operazioni o comandi utili.

In quest'articolo vedremo come attivare/disattivare delle caratteristiche delle caselle di posta su Exchange Server tramite EMS.


Il comando trattato in questo articolo è Set-CasMailbox che ci consente di abilitare/disabilitare le seguenti caratteristiche di una casella di posta:

- Internet Message Access Protocol  (IMAP)
- Post Office Protocol  (POP)
- Microsoft Outlook Web App (OWA)
- Messaging Application Programming Interface (MAPI)
- Microsoft Exchange ActiveSync


Per abilitare il protocollo IMAP sulla casella dell'utente
Set-CASMailbox UserName@DomainName -ImapEnabled $True

Per disabilitare il protocollo IMAP sulla casella dell'utente
Set-CASMailbox UserName@DomainName -ImapEnabled $False

Per abilitare il protocollo POP sulla casella dell'utente
Set-CASMailbox UserName@DomainName -PopEnabled $True

Per disabilitare il protocollo POP sulla casella dell'utente
Set-CASMailbox UserName@DomainName -PopEnabled $False

Per abilitare OWA sulla casella dell'utente
Set-CASMailbox UserName@DomainName -OWAEnabled $True

Per disabilitare OWA sulla casella dell'utente
Set-CASMailbox UserName@DomainName -OWAEnabled $False

Per abilitare il protocollo MAPI sulla casella dell'utente
Set-CASMailbox UserName@DomainName -MAPIEnabled $True

Per disabilitare il protocollo MAPI sulla casella dell'utente
Set-CASMailbox UserName@DomainName -MAPIEnabled $False

Per abilitare Exchange ActiveSync sulla casella dell'utente
Set-CASMailbox UserName@DomainName -ActiveSyncEnabled $True

Per disabilitare Exchange ActiveSync sulla casella dell'utente
Set-CASMailbox UserName@DomainName -ActiveSyncEnabled $False



Ovviamente le opzioni -ImapEnabled, -PopEnabled, -OWAEnabled, -MAPIEnabled, -ActiveSyncEnabled possono essere utilizzate anche contemporaneamente e al posto della casella di posta dell'utente possiamo utilizzare anche il display name, l'alias, il Distinguished Name (DN) o dominio\account AD.
Ad es. se vogliamo abilitare l'accesso tramite OWA e disabilitare il protocollo IMAP possiamo utilizzare il seguente comando
Set-CASMailbox UserName@DomainName -OWAEnabled $True -ImapEnabled $False


E se volessimo agire su più caselle?
In questo caso potremmo preparare un file di testo con all'interno le caselle di posta su cui bisogna agire e quindi creare un ciclo che, per ogni casella di posta elencata all'interno del file, provveda ad effettuare gli opportuni settaggi/abilitazioni.
Procediamo con un esempio: supponiamo di voler abilitare/disabilitare l'accesso tramite OWA ad un elenco di caselle di posta.
Per effettuare questa operazione potremmo procedere in modi diversi. Io ho preferito procedere nel seguente modo:

  • Creato un file con estensione CSV con all'interno elencate le caselle di posta su cui agire. Il file CSV non è altro che un file di testo in cui in ogni rigo è indicata la casella di posta/account su cui agire seguito da invio.
  • Creato un file di script Powershell (file con estensione PS1 da lanciare tramite Exchange Management Shell) contenete i comandi da eseguire e accetta come parametri il nome del file CSV conte


Il file PS1 l'ho nominato EnableDisableOWA.ps1 mentre il file CSV elenco.csv
I due file possono essere scaricati cliccando QUI

- Scompattare i file in una cartella
- Eseguiamo EMS
- lanciamo il file ps1 tramite EMS indicando il percorso completo del file e passando, come parametri, il file CSV e $TRUE o $FALSE a seconda se vogliamo abilitare o disabilitare OWA.

ad es. 
 c:\EnableDisableOWA.ps1 c:\elenco.csv $TRUE
per abilitare OWA su tutte le cartelle elencate in elenco.csv 

Il codice contenuto all'interno del file PS1 è il seguente


param($Arg1,$Arg2)
Set-AdServerSettings -ViewEntireForest $true 
$csv = Import-Csv $Arg1 -Header @("MailboxToEnableDisable")
foreach ($line in $csv) { 
  Set-CASMailbox $Arg1 -OWAEnabled $Arg2
} 

analizziamo passo passo lo script
param($Arg1,$Arg2)
L'istruzione param($Arg1,$Arg2) cattura i parametri passati alla chiamata del file di script. Nel nostro caso il file elenco.csv e $TRUE.

Set-AdServerSettings -ViewEntireForest $true
É utile solo nel caso in cui in Active Directory (AD) siano presenti più domini i cui utenti dispongono di casella di posta. In questo modo vengono gestiti tutti gli oggetti della foresta.

$csv = Import-Csv $Arg1 -Header @("MailboxToEnableDisable")
Importa il file CSV indicato come primo parametro durante la chiamata allo Script EnableDisableOWA.ps1

foreach ($line in $csv) { 
  Set-CASMailbox $Arg1 -OWAEnabled $Arg2
}
Per ogni riga del file CSV viene abilitata/disabilitato l'accesso ad OWA a seconda che sia stato passato il parametro $TRUE o $FALSE nella chiamata a EnableDisableOWA.ps1


Le funzioni del cmdlet Set-CASMailbox non finiscono qui: ci sono altri parametri che permettono di effettuare altre operazioni. Tuttavia le altre operazioni esulano dalla trattazione di questo articolo.