Archives For PowerShell

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"!

Rapida pillola del giorno dedicata a Windows 10, e in particolare a Groove Musica, una delle applicazioni che sono già installate nel sistema e che apparentemente non sono eliminabili con il semplice clic destro → Disinstalla. Si tratta di ciò che resiste di Zune (te lo ricordi?) e più che altro del servizio di accesso alla musica (previo abbonamento) di Microsoft. Non sempre però l’applicazione pre-installata torna utile, quindi perché non toglierla di mezzo?

Disinstallare Groove Musica da Windows 10

immagine: ArsTechnica

ATTENZIONE: Prima di partire, il solito consiglio: occhio sempre a quello che tocchi e che rimuovi, effettua dei backup del tuo sistema per sicurezza, così potrai agilmente tornare indietro in caso di problemi.

Ancora una volta puoi centrare l’obiettivo passando da PowerShell, e nello specifico utilizzerai il comando Get-AppxPackage, cercando di filtrare ciò che riporta “Zune” nel nome (in caso contrario, otterrai una nutrita lista di pacchetti installati, di difficile consultazione immediata):

Get-AppxPackage –AllUsers | where {$_.Name -like "*zune*"}

Il risultato dovrebbe portarti a qualcosa di simile alla schermata seguente:

Rimuovere Groove Musica da Windows 10

Copia il valore in corrispondenza di PackageFullName (ti basta evidenziarlo con il mouse e poi fare un solo clic con il tasto destro, nda), quindi lancia il comando di rimozione:

remove-AppxPackage Microsoft.ZuneMusic_3.6.12711.0_x64__8wekyb3d8bbwe

Ovviamente Microsoft.ZuneMusic_3.6.12711.0_x64__8wekyb3d8bbwe dovrà essere sostituito con il valore precedentemente copiato, anche se in realtà dovrebbe risultati essere identico.

Rimuovere Groove Musica da Windows 10 1

Lo stesso identico metodo vale anche con altre applicazioni pre-installate nel sistema, “Xbox” compresa (occhio però, nel suo specifico caso ti consiglio di non andare oltre la rimozione di Microsoft.XboxApp, che dovrebbe corrispondere al pacchetto Microsoft.XboxApp_11.13.6008.0_x64__8wekyb3d8bbwe) ;-)

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"!

La registrazione di caratteri in Windows è sempre stata cosa assai semplice. Un clic destro sul file interessato e uno su Installa, nulla più. Ma se ti dovesse capitare di essere collegato a una macchina con un utente limitato (standard user) e l’impossibilità di fare un semplice “Cambia utente” o “Disconnetti“? Il Run-as è la strada più rapida, e la PowerShell può aiutare a completare più rapidamente l’operazione.

PowerShell: registrazione di font in Windows

Un articolo che puoi archiviare tra quelli che servono giusto a fornirti lo snippet da utilizzare, uno di quelli che un domani potrebbe tornarti utile e forse ti ricordi di passare a trovarmi. Due le righe di codice (corte pure, quasi non le vedi):

$fonts = (New-Object -ComObject Shell.Application).Namespace(0x14)
dir *.ttf | %{ $fonts.CopyHere($_.fullname) }

Non serve salvarle su un file ps1 apposito (a meno di volerlo tenere da parte per futuro utilizzo). Ti basta aprire un prompt PowerShell con diritti elevati, navigare in una cartella contenente i font che vuoi installare e lanciare entrambe le righe, a quel punto ti partiranno a video le richieste di conferma registrazione dei tipi di font trovati. Comodo, rapido, perfetto per lo scopo.

Cheers!

basato su: windowsitpro.com/scripting/trick-installing-fonts-vbscript-or-powershell-script

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