Archives For Microsoft Exchange

La funzione di Message Trace di Office 365, quindi Exchange in cloud, funziona abbastanza bene. Si dichiara l’intervallo da analizzare e il mittente o il destinatario sul quale devi effettuare delle verifiche. A quel punto ti basterà mettere la visualizzazione in ordine di oggetto mail e cercare ciò che ti interessa realmente. E se invece si potesse saltare questo step, avere da subito maggiore profondità (in giorni) e cercare per oggetto della mail senza specificare un mittente o un destinatario? Si può fare, basta aggirare l’ostacolo passando –come spesso accade– da PowerShell.

PowerShell: un Message Trace basato sull'oggetto della mail

Ho cercato sul web qualcuno con la mia stessa esigenza. L’ho trovato e ho potuto osservarne il lavoro. Tutto parte dallo script proposto su blogs.perficient.com/microsoft/2016/03/office-365-script-to-perform-message-trace-by-subject. È la giusta base di partenza alla quale vanno modificate solo un paio di cose, soprattutto per quello che riguarda il modo di trattare il parametro di data e ora, secondo quanto spiegato qui.

La modifica è banale e riguarda esclusivamente il modo in cui viene formato l’output del Get-Date, parametro senza il quale lo script va in errore e non è capace di svolgere correttamente il suo lavoro:

[DateTime]$DateEnd = Get-Date -format "MM/dd/yyyy HH:mm"

Così facendo, non è necessario intervenire ulteriormente sullo script originale (a meno che tu non voglia modificare il formato di output nelle 3 volte in cui viene richiamato nel corso dello script, nda). Ho caricato la versione modificata dello script su GitHub, ed è entrata a far parte della “suite” dedicata all’amministrazione di Office 365 via PowerShell: github.com/gioxx/o365/blob/master/Get-MessageTraceBySubject.ps1

Il risultato funziona, impiega il suo tempo, presenta infine le mail che è riuscito a individuare e che contengono quell’oggetto ricercato (attento, usa le wildcard quanto non sei sicuro del titolo completo dato a una mail). Il file di log viene prodotto nella stessa cartella in cui risiede lo script, a meno di andare a lanciare lo stesso con il parametro -LogFile $percorso, per esempio .\Get-MessageTraceBySubject.ps1 -LogFile C:\MessageTrace.txt

Buon lavoro :-)

Pillole

Le pillole sono articoli di veloce lettura dedicati a notizie, script o qualsiasi altra cosa possa essere "divorata e messa in pratica" con poco. Uno spazio del blog riservato ai post "a bruciapelo"!

Per la serie “sbagliando si impara“, anche se in realtà vale anche quella che dice che l’errore davanti ai propri occhi è anche quello che continua a sfuggire pure alla centesima rilettura, oggi prendo appunti su PowerShell e ordinamento dei risultati richiesti.

Nello specifico volevo ottenere una lista di contatti con un preciso dominio impostato nel PrimarySMTPAddress (WindowsEmailAddress), ho pensato bene quindi di lanciare un comando semplice (il Get-MailContact), filtrare in output solo ciò che mi interessava e pretendere di ordinare l’output dopo averlo già generato:

PS C:\PS1\PS1> Get-MailContact -ResultSize unlimited | where {$_.WindowsEmailAddress -like "*@contoso.com"} | ft name,Alias,WindowsEmailAddress | sort name
out-lineoutput : L'oggetto di tipo "Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData" non è valido oppure non è stato specificato nella sequenza corretta. L'errore dipende probabilmente da un comando "format-*" specificato dall'utente in conflitto con la formattazione predefinita.
    + CategoryInfo          : InvalidData: (:) [out-lineoutput], InvalidOperationException
    + FullyQualifiedErrorId : ConsoleLineOutputOutOfSequencePacket,Microsoft.PowerShell.Commands.OutLineOutputCommand

Per una illogica del mio unico neurone alla ricerca di aria fresca, mi ostinavo a chiedere un sort in seguito alla formattazione della tabella in output, quando in realtà il sort va chiesto prima di preparare i risultati da mostrare a video (cosa abbastanza normale a pensarci a sangue freddo, non trovi?). Il modo giusto per chiederlo è quindi anteporlo al Format-Table:

Get-MailContact -ResultSize unlimited | where {$_.WindowsEmailAddress -like "*@contoso.com"} | sort name | ft name,Alias,WindowsEmailAddress

Che produce un risultato a video assolutamente preciso, secondo richiesta impartita:

Sbagliando si impara: PowerShell, Sort e Format-Table

Metto da parte, lezione imparata, nel frattempo mi bastono da solo.

G

Pillole

Le pillole sono articoli di veloce lettura dedicati a notizie, script o qualsiasi altra cosa possa essere "divorata e messa in pratica" con poco. Uno spazio del blog riservato ai post "a bruciapelo"!

Uno di quei consigli che sono facili da ricordare e da recuperare con una ricerca nel blog, in case of emergency. Gestisci un tenant con centinaia (se non di più) persone registrate e non puoi certo ricordare uno a uno gli indirizzi di posta gestiti, soprattutto quando si parla di persone con uno o più alias a testa, shared mailbox, contatti e chissà quanto altro ancora, Exchange è un mondo infinito, nella sua soluzione cloud è poi in continua evoluzione.

Come cerchi un indirizzo di posta elettronica all’interno del tenant? Come capisci a chi o cosa è stato assegnato? Tutto sommato semplice: usi l’ennesima query.

Get-Recipient -Filter {EmailAddresses -like "*mario.rossi*"}

Powershell office 365 cercare un indirizzo di posta

In un solo colpo trovi qualsiasi cosa abbia uno specifico (o parte del) indirizzo di posta elettronica tra quelli a lui assegnati, a prescindere che si tratti di una mailbox (personal o shared non importa), un contatto mail, un mail user. Nella query che ho riportato qui sopra il *mario.rossi* cerca qualunque indirizzo contenga quel nome.cognome, a prescindere dalla sua posizione, ignorando totalmente il dominio. Funziona, è immediato, è maledettamente comodo, soprattutto quando ti ritrovi di fronte alla domanda secca di un tuo superiore oppure un errore di PowerShell quando si tenta di creare una casella di posta elettronica con lo stesso indirizzo di posta di qualcosa di già esistente.

Per ovvi motivi, il filtro può funzionare con qualsiasi parametro facente compatibile con il Get-Recipient, basterà modificare un tantinello la richiesta da far eseguire a PowerShell, per esempio:

Get-Recipient -Filter { Name -like "*alessio*"}

Ricercherà qualsiasi cosa abbia “Alessio” nel campo nome, a prescindere -ancora una volta- che si tratti di casella di posta, contatto o gruppo (e non solo).

Buon lavoro.

G

Più che un vero articolo, si tratta sul serio di appunti pubblici, riflessioni e domanda finale che completa il pacchetto. Sì perché se c’è una cosa che odio, è dover fare da tramite per operazioni anche molto banali, come seguire un feed o accedere a una pagina contenente informazioni che possono essere di dominio più o meno pubblico. Questo è il caso di Office 365 e del servizio di Health Status, diventato accessibile per i soli clienti, senza apparente possibilità di facile condivisione.

Appunti su Health Status di Office 365 e utenti non amministratori

Tu che gestisci un tenant Exchange in cloud, sai di cosa sto parlando, vero? Hai a che fare con sedi periferiche della tua azienda? Colleghi che sanno capirti quando parli e ai quali fanno capo anche altri utenti che generalmente non si interfacciano con te? Come hai superato l’ostacolo nato lo scorso giugno? In breve: Microsoft ha scelto di disabilitare il feed RSS che permetteva di rimanere informati sullo stato di salute della sua infrastruttura da qualsiasi dispositivo, browser o client di posta elettronica. Sul tenant del mio gruppo, gestiamo alcuni utenti non amministratori ma che raccolgono le richieste di supporto degli utenti per le relative sedi, trovandosi in difficoltà nel caso in cui il servizio di Office 365 abbia qualche problema.

Il risultato? Arriverà a me (o a un collega) una mail o una telefonata di richiesta informazioni e toccherà inviare una risposta basata sul semplice copia-incolla dalla Dashboard amministrativa di Microsoft.

L’azienda di Remond spiega che basterà fare uso di un ruolo amministrativo ad-hoc, o passare dalla sua Mobile App che però non accetta nessuno fuorché un amministratore (anche limitato): support.office.com/en-us/article/How-to-check-Office-365-service-health-932AD3AD-533C-418A-B938-6E44E8BC33B0?ui=en-US&rs=en-US&ad=US&fromAR=1

Office 365 Admin
Price: Free
Office 365 Admin
Price: Free

Un amministratore ad-hoc

Io a quei ruoli ho dato un’occhiata, ma non ho trovato nulla che mi portasse al documentato “Service Health Admin Role“. Mi sono dovuto “accontentare” del Service Administrator, il quale però ha anche accesso alla lista di tutti gli utenti registrati nel tenant, con relativi dettagli di licenza, alias e molto altro ancora, seppur in sola lettura. I ruoli attualmente disponibili si trovano alla pagina support.office.com/en-us/article/About-Office-365-admin-roles-da585eea-f576-4f55-a1e0-87090b6aaa9d.

La domanda è quindi …

… hai avuto la necessità di gestire questa particolarità? Se si, come hai fatto? Ho provato ad aprire una richiesta di supporto in Microsoft senza però successo. Sarà probabilmente finita in quel calderone di feedback dei clienti che ogni tanto vengono aperti, controllati e richiusi, in attesa che il team di sviluppatori possa integrare questa necessità generata da una loro decisione, da una loro limitazione imposta.

L’area commenti è aperta e disponibile a ricevere ogni possibile consiglio, ovviamente graditissimo.

Grazie a tutti!

G