Archives For Command

È un problema che ho affrontato qualche tempo fa e che inizialmente mi ha dato un po’ di grattacapi, salvo poi trovare casi molti simili che mi hanno aiutato a risolvere l’anomalia. Il disco di un PC si satura e la colpa è della cartella C:\Windows\Temp, invasa da file senza estensione, dal nome che comincia sempre per cab_. Perché accade? Il problema viene generato da una installazione di alcuni aggiornamenti (da Windows Update) evidentemente non andata a buon fine, non del tutto almeno, nonostante la schermata preposta di Microsoft dica che tutto va bene.

Windows: l'invasione dei CBSPersist e dei cab_ (C:WindowsTemp)

Facendo un po’ più di attenzione, si scopre che in realtà di cartella che occupa spazio ce n’è un’altra. Teoricamente dovresti trovare anomala anche la C:\Windows\Logs\CBS, all’interno della quale dovresti trovare dei file CAB veri, e un file di log dalla dimensione decisamente robusta (CBS.log). L’anomalia parte proprio da qui. Partiamo con le opportune presentazioni (recuperate con una semplice ricerca):

CBS stands for “Component-Based Servicing” and it basically is the way components get installed and uninstalled during updates. It is the reason you see “Stage 1”, “Stage 2”, and “Stage 3” during the Service Pack 1 install (for example). “Stage 2” and “Stage 3” exists for the registry keys and files that are normally locked during regular operation.

Tutto chiaro? Un log in cui ogni aggiornamento di Microsoft va a scrivere e tiene traccia di ogni movimento. Un log destinato –per forza– a crescere, e che per un comportamento assolutamente standard va a ruotare, sospendendo la scrittura, finendo in un CAB che ne riduce (di parecchio) la dimensione, e infine ne prepara uno nuovo in cui tornare a scrivere, per poi ricominciare il giro ancora e ancora.

Se per qualsivoglia motivo questo procedimento non fila liscio, il CBS.log diventa più grande del previsto, ingestibile e –soprattutto– impossibile da mettere in un CAB nei tempi previsti. Il risultato? Cartella Temp di Windows piena di tentativi falliti di comprimere quel log, cartella CBS che si ingigantisce.

Diverse le fonti dove ho trovati informazioni in merito e persone capitate nello stesso vortice, ne ho selezionate tre che mi hanno aiutato:

Riepilogando, tutto questo può accadere in qualsiasi momento e -in base alla capacità del disco e lo spazio libero da poter sfruttare- potresti accorgertene a mesi (o forse anni) di distanza. Io ho scoperto di essere soggetto al problema solo perché un utente ha lamentato poco spazio libero e mi ha fatto scoprire l’anomalia. Le operazioni da affrontare per resettare il procedimento di scrittura e archiviazione del CBS.log è questo:

  • Fermare il servizio Windows Update.
  • Rinominare la cartella della Software Distribution (C:\Windows\SoftwareDistribution).
  • Cancellare ogni file in C:\Windows\Temp (ovviamente ignorando quelli in uso e che faranno comparire il classico errore a video di impossibilità di cancellazione, nda).
  • Riavviare il servizio di Windows Update.
  • Cancellare ora la cartella SoftwareDistribution precedentemente rinominata, non serve più, Windows Update provvederà a crearne una nuova in totale autonomia (dovrebbe già averlo fatto in fase di avvio del servizio, come da passaggio precedente).
  • Fermare il servizio Trusted Installer.
  • Cancellare ogni file in C:\Windows\Logs\CBS.
  • Riavviare il servizio Trusted Installer.
  • Forzare una ricerca aggiornamenti di Windows Update (direttamente via prompt).

Visto che questa cosa potrebbe capitare ad altri client in futuro, ho pensato di tradurla in codice batch, da dare in pasto anche al Kace di Dell (tanto per fare un esempio). Il tutto intervallando alcuni secondi di pausa prima di poter eseguire l’operazione successiva (dando così modo al client di non saltare alcun passaggio fondamentale):

sc stop wuauserv
ping 127.0.0.1 -n 7 > NUL
cd \Windows\
move SoftwareDistribution SoftwareDistribution_old
del /S C:\Windows\Temp\* /Q
FOR /D %%p IN ("C:\Windows\Temp\*.*") DO rmdir "%%p" /s /q
sc start wuauserv
rd /S /Q C:\Windows\SoftwareDistribution_old
sc stop TrustedInstaller
ping 127.0.0.1 -n 7 > NUL
del /S C:\Windows\Logs\CBS* /Q
sc start TrustedInstaller
ping 127.0.0.1 -n 5 > NUL
wuauclt.exe /detectnow

Così facendo ho risolto il problema e liberato spazio sul disco. Ho fatto queste modifiche al sistema mesi fa e il problema non si è più presentato (a me, ma anche ad altri utenti che nel frattempo ho rilevato nella nostra rete).

Facile (soprattutto se si ha un aiuto nella software distribution) fare un’analisi all’interno della rete aziendale e cercare le macchine che soffrono la stessa anomalia ma che ancora non hanno saturato il disco, basterà cercare nella cartella C:\Windows\Temp una forte presenza di cab_, così da portarsi avanti ed evitare che il problema si presenti agli occhi dell’utente.

Estote parati (cit.).

G

Update

Ho aggiunto il passaggio relativo alla cancellazione della cartella SoftwareDistribution rinominata (nella lista delle operazioni manuali da compiere), come da commento di GDB, che ringrazio per avermelo fatto notare.

Condividi l'articolo con i tuoi contatti:

Uno di quei problemi che, a lanciare una ricerca nei forum di Microsoft, escono quasi più risultati di una equivalente azione mirata a conoscere le misure di una showgirl. In seguito all’aggiornamento a Office 2016 (anche se non immediato), in ufficio abbiamo iniziato a notare una quantità di richieste di login superiore al dovuto.

Ora, che ogni tanto scada l’accesso al proprio account Office 365, ci può assolutamente stare. Che questo diventi però un’abitudine a ciascuna chiusura e riapertura programma (anche a distanza di pochi secondi) non è normale.

Office 2016: prima di partire e primi passi con ...

Ho provato a fare un reset dell’installazione, ho provato a cambiare profilo, ho cercato riferimenti in merito, nulla di fatto. Nei forum Technet c’è molta confusione, troppe informazioni spesso sbagliate. Sono arrivato a qualcosa di concreto, ho trovato finalmente un articolo che riproduce l’errore e lo risolve (questo: meyermed.com/2014/02/fixing-the-error-onenote-needs-a-password-to-sync-this-notebook-click-here-to-enter-your-password) e ho risolto l’anomalia sulla mia postazione, memorizzando le credenziali di Outlook ancora una volta e lasciando che OneNote tenesse la cache dell’autenticazione nel Gestore Credenziali di Windows.

Office 365: continue richieste di login da OneNote (e non solo) 1

Per poter replicare rapidamente la soluzione su più postazioni, ho scritto qualche riga di batch così da poterla dare in pasto al Kace di Dell e lanciarla agilmente ogni volta che ne ho bisogno. Funziona su Windows 7, 8.1 e anche 10:

cmdkey.exe /list > "%TEMP%\CredMan.txt"
findstr.exe MS.Outlook* "%TEMP%\CredMan.txt" > "%TEMP%\CredMan_Tokens.txt"
findstr.exe MicrosoftOffice15_* "%TEMP%\CredMan.txt" >> "%TEMP%\CredMan_Tokens.txt"
findstr.exe MicrosoftOffice16_* "%TEMP%\CredMan.txt" >> "%TEMP%\CredMan_Tokens.txt"
FOR /F "tokens=1,2 delims= " %%G IN (%TEMP%\CredMan_Tokens.txt) DO cmdkey.exe /delete:%%H
del "%TEMP%\CredMan.txt" /s /f /q
del "%TEMP%\CredMan_Tokens.txt" /s /f /q

Traducendolo in soldoni, il batch esporta le credenziali attualmente presenti nel Gestore Credenziali di sistema, ricerca tutto ciò che riguarda Office 2013 (15), 2016 (16) e Outlook. Per ciascuna corrispondenza andrà a rimuovere quel riferimento in Windows. Al termine –ovviamente– cancellerà l’esportazione precedentemente eseguita.

Ho creato un pacchetto eseguibile del batch sopra riportato e l’ho caricato sul mio spazio Box, nel caso tu voglia scaricarlo direttamente: app.box.com/s/siespaz9aqi3vzowetsjnovnw15z5eoi.

Dopo aver eseguito la pulizia, come già detto, dovrai autenticarti nuovamente su Outlook ma anche su OneNote se fai uso di Notebooks salvati su OneDrive personale o business (non servirà farlo su Excel o Word, hai già attivato la suite Office, non serve fare altro). Salvo errori, se l’autenticazione andrà a buon fine, ricompariranno le voci relative alle credenziali Office 16 nel gestore Windows, queste possono (e devono) essere lasciate lì.

Cheers.

Condividi l'articolo con i tuoi contatti:

sourcecode-vbscriptSai già come funziona, di tanto in tanto apro il cassetto degli attrezzi, utilizzo uno script e poi penso che potrebbe essere interessante per qualcun altro sul web, quindi decido di condividerlo con te che sei dall’altra parte del monitor e che stai forse svolgendo un mestiere simile al mio.

Qualche tempo fa ho rimaneggiato un po’ di codice per realizzare un piccolo VBScript che fosse in grado di ritoccare la descrizione di un PC da remoto, senza che l’utente si accorga di nulla, collegandomi in maniera amministrativa grazie alla rete di dominio.

Da un’idea e realizzazione originale di Rob Dunn (il suo sito web non esiste più, nda), il codice qui di seguito mostra un popup a video che legge l’attuale descrizione di un PC (raggiunto tramite hostname o IP) e permette contestualmente di modificarla.

' PC Description Changer per Windows Xp+
' GSolone 2015 v 0.3
' Basato su script originale di Rob.Dunn (www.theitoolbox.com)
' Ultima modifica 17122015
'
' - accetta da prompt dei comandi il nome macchina (o IP) da raggiungere (es. PCDescription.vbs 127.0.0.1)
' - Windows XP e 2003 richiedono un riavvio macchina per poter mostrare poi la description corretta.
' - il servizio di remote registry deve essere attivo e occorre anche avere le permission WMI)
' - lo script tronca oltre i 48 caratteri forniti come testo della descrizione PC
'
' LO SCRIPT VA ESEGUITO COME AMMINISTRATORE MACCHINA O DI DOMINIO!

Dim strDescription, strComputer, reg, objRegistry
Dim ret, msg, ValueName 

Const HKLM = &H80000002

if WScript.Arguments.Count = 0 then
    'Richiesta IP o hostname macchina da modificare
    strComputer = InputBox("PC Description Changer (Win Xp +)" & vbCR & vbCR & "VA ESEGUITO COME ADMIN LOCALI O DI DOMINIO!" & vbCR & vbCR & "Inserisci il nome macchina o indirizzo IP da raggiungere (vuoto o clic su Annulla per uscire dallo script)" & vbCR, "PC Description Changer", "W7-TEST")
else
    'Se l'indirizzo IP / Hostname mi è stato passato da riga di comando, posso procedere direttamente
    strComputer = Wscript.Arguments(0)
end if

if strComputer = "" then wscript.quit

on error resume next

Set reg = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")

if err.number <> 0 then 
  msgbox "Problemi di connessione al database WMI di " & strComputer & ".  Verifica che il PC sia acceso e che tu abbia tutti i permessi per poter effettuare l'operazione",16,"Errore di connessione a '" & strComputer & "'" 
  wscript.quit  
end if

on error goto 0 

Set objRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2").ExecQuery("Select Description FROM Win32_OperatingSystem")


For Each object In objRegistry
    strDescription = object.Description 
Next 

value = inputbox("Inserisci una nuova descrizione per '" & strComputer & "' (o fai clic su Annulla per terminare lo script):","PC Description Changer",strDescription)

If value = strDescription then wscript.quit

key = "SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters"
ValueName = "srvcomment"

If Len(Value) > 48 Then Value = Left(Value, 48)
ret = reg.SetStringValue(HKLM, key, ValueName, value)

if ret <> 0 then msgbox "Aggiornamento remoto fallito."

All’interno del codice c’è anche qualche rapida istruzione (in parte riproposta a video) per guidarti all’uso o a capire cosa può andare storto. Ricorda che il servizio di Remote Registry deve essere attivo sulla macchina di destinazione (e l’account che lancia lo script deve avere i permessi per amministrarla, vale quindi lanciarlo da un prompt dei comandi elevato), altrimenti si incorre in popup di errore come questo:

VBS: cambiare la descrizione di un PC da remoto

Tutti i test sono stati condotti su Windows 7, 8.1 e 10. In passato l’ho usato anche per macchine XP senza battere ciglio, spero però per te che tu non abbia più quel SO in giro ;-)

Per dubbi o chiarimenti, citofonare nell’area commenti.

Cheers.

Condividi l'articolo con i tuoi contatti:

Da quando esiste Microsoft Office, esiste anche la possibilità di rimuoverlo dalla macchina in maniera più efficace, forzata, nel caso in cui i file necessari a una disinstallazione regolare da Pannello di Controllo vengano a mancare o risultino danneggiati per qualsivoglia motivo. Sai dove mettere mano o come muoverti in caso di emergenza? No? Poco male, posso suggerirti che tool scaricare, senza la necessità di prodotti di terze parti, perché Microsoft mette già a disposizione di amministratori di sistemi e semplici utenti casalinghi script sempre aggiornati e che difficilmente falliscono anche nelle situazioni peggiori.

Disinstallazione Office 365 (2016): OffScrub16 e OffScrubc2r

Per evitare errori, Microsoft propone da tempo delle soluzioni eseguibili che, una volta avviate, lanciano autonomamente operazioni ben precise sulla macchina, consegnando poi il risultato finale a video, così che tu possa verificarlo e accertarti che tutto sia andato liscio. Quegli eseguibili in realtà, nascondono dei file VBScript molto complessi che possono essere facilmente recuperati. Ancora oggi il metodo è perfettamente funzionante e ho imparato a capire come muovermi semplicemente leggendo qualche articolo online, uno tra tanti (ben realizzato) è ancora disponibile all’indirizzo blogs.technet.microsoft.com/odsupport/2011/04/08/how-to-obtain-and-use-offscrub-to-automate-the-uninstallation-of-office-products.

Sulla base di questo, è facile crearsi una piccola cartella da tenere su chiave USB (o altrove) per recuperare al momento opportuno ciò che più ti è utile. Ho caricato ogni VBS online, così che tu possa scaricarli facilmente, li trovi (aggiornati alle release Click2Run e Office 2016 anche con abbonamento 365) all’indirizzo app.box.com/s/lufdy9nqb7ebr8j53asbn9rkdrbd9smr. Utilizzarli è semplice, puoi fare riferimento al primo blog Technet che ti ho riportato qualche riga fa, gli script permettono di lavorare su Office dalla sua versione 2003 alla più recente 2016 (come già detto).

Se sei solo curioso e non vuoi scaricare alcunché, puoi trovare una copia di OffScrub16.vbs su Gist. Sempre lì trovi anche una copia di OffScrubc2r.vbs, per la pulizia dei prodotti Click2Run (più generico, in grado di spazzare via anche le ultime versioni dei prodotti Microsoft per l’ufficio, compresi Project o Visio, tanto per dire).

Vecchia scuola

Se vuoi provare a disinstallare un prodotto in maniera regolare (o manualmente), devi sapere che Microsoft propone un documento estremamente chiaro all’indirizzo support.office.com/en-us/article/Uninstall-Office-2013-Office-2016-or-Office-365-from-a-PC-9dd49b83-264a-477a-8fcc-2fdf5dbf61d8, all’interno del quale potrai specificare il sistema operativo utilizzato (così da ottenere le istruzioni da seguire passo-passo), e in alternativa scaricare quello che viene chiamato “Easy Fix Tool” che andrà a effettuare in maniera completamente autonoma le operazioni sulla tua macchina, così da permetterti di pulire ogni file, ogni chiave di registro, preparando così il sistema a ricevere da zero una nuova installazione di Office. Ti stai chiedendo se si tratta del VBS più recente di cui ho parlato poco fa? Si, è lui, semplicemente conservato all’interno dell’eseguibile e depositato in maniera temporanea nella cartella C:\Users\administrator\AppData\Local\Temp\msdtadmin\_1AD76E40-C8F2-4381-82D3-781C693A6746_\cabpkg, a meno di diversa versione da te scaricata. Cambia poco in realtà (può variare la stringa esadecimale, il resto rimane generalmente invariato).

Se neanche il tool può nulla, ricordati che hai la possibilità di intervenire manualmente su Office 2016 o Office 2013, tanto per citare i due più recenti.

Integrazione

Manco a dirlo, gli script VBS di Microsoft sono perfetti per essere integrati all’interno di script più complessi o batch che possano richiamarli in caso di necessità. Ovviamente anche Dell Kace ne può fare uso in base a ciò che trova sul sistema. Uno script utilizzato per lavoro prevede il rilevamento delle versioni antecedenti all’ultima 2016 con conseguente pulizia eseguita lanciando il VBS adatto, per capirci:

:findoffice
set ofc2k3=No
set ofc2k7=No
set ofc2k10=No
set ofc2k13=No
set visio2k13=No
set prj2k13=No

if "%processor_architecture%" == "AMD64" GOTO AMD64
if "%PROCESSOR_ARCHITEW6432%" == "AMD64" GOTO AMD64
if "%processor_architecture%" == "x86" GOTO x86
GOTO exitcleaner

:AMD64
echo Sistema a 64 bit
if exist "%ProgramFiles%\Microsoft Office\Office11\WINWORD.exe" set ofc2k3="Si (Versione x64)"
if exist "%ProgramFiles(x86)%\Microsoft Office\Office11\WINWORD.exe" set ofc2k3="Si (Versione x86)"
if exist "%ProgramFiles%\Microsoft Office\Office12\WINWORD.exe" set ofc2k7="Si (Versione x64)"
if exist "%ProgramFiles(x86)%\Microsoft Office\Office12\WINWORD.exe" set ofc2k7="Si (Versione x86)"
if exist "%ProgramFiles%\Microsoft Office\Office14\WINWORD.exe" set ofc2k10="Si (Versione x64)"
if exist "%ProgramFiles(x86)%\Microsoft Office\Office14\WINWORD.exe" set ofc2k10="Si (Versione x86)"
if exist "%ProgramFiles%\Microsoft Office 15\root\office15\WINWORD.exe" set ofc2k13="Si (Versione O365 x64)"
if exist "%ProgramFiles(x86)%\Microsoft Office 15\root\office15\WINWORD.exe" set ofc2k13="Si (Versione O365 x86)"
if exist "%ProgramFiles%\Microsoft Office\Office15\VISIO.exe" set visio2k13="Si (Versione O365 x64)"
if exist "%ProgramFiles(x86)%\Microsoft Office 15\root\office15\WINWORD.exe" set visio2k13="Si (Versione O365 x86)"
if exist "%ProgramFiles%\Microsoft Office\Office15\WINPROJ.exe" set prj2k13="Si (Versione O365 x64)"
if exist "%ProgramFiles(x86)%\Microsoft Office 15\root\office15\WINPROJ.exe" set prj2k13="Si (Versione O365 x86)"
GOTO execute

:x86
echo Sistema a 32 bit
if exist "%ProgramFiles%\Microsoft Office\Office11\WINWORD.exe" set ofc2k3="Si (Versione x86)"
if exist "%ProgramFiles%\Microsoft Office\Office12\WINWORD.exe" set ofc2k7="Si (Versione x86)"
if exist "%ProgramFiles%\Microsoft Office\Office14\WINWORD.exe" set ofc2k10="Si (Versione x86)"
if exist "%ProgramFiles%\Microsoft Office 15\root\office15\WINWORD.exe" set ofc2k13="Si (Versione O365 x86)"
if exist "%ProgramFiles%\Microsoft Office\Office15\VISIO.exe" set visio2k13="Si (Versione O365 x86)"
if exist "%ProgramFiles%\Microsoft Office\Office15\WINPROJ.exe" set prj2k13="Si (Versione O365 x86)"
GOTO execute

:execute
cscript //nologo \\TUOSERVERKACE\cleanofc\ofc_start.vbs %ofc2k3% %ofc2k7% %ofc2k10% %ofc2k13% %visio2k13% %prj2k13%

:ofc2003
if %ofc2k3%=="Si (Versione x86)" cscript \\TUOSERVERKACE\cleanofc\OffScrub03.vbs ALL /Q /NoCancel /BYPASS 1
if %ofc2k3%=="Si (Versione x64)" cscript \\TUOSERVERKACE\cleanofc\OffScrub03.vbs ALL /Q /NoCancel /BYPASS 1
:ofc2007
if %ofc2k7%=="Si (Versione x86)" cscript \\TUOSERVERKACE\cleanofc\OffScrub07.vbs ALL /Q /NoCancel /BYPASS 1
if %ofc2k7%=="Si (Versione x64)" cscript \\TUOSERVERKACE\cleanofc\OffScrub07.vbs ALL /Q /NoCancel /BYPASS 1
:ofc2010
if %ofc2k10%=="Si (Versione x86)" cscript \\TUOSERVERKACE\cleanofc\OffScrub10.vbs ALL /Q /NoCancel /BYPASS 1
if %ofc2k10%=="Si (Versione x64)" cscript \\TUOSERVERKACE\cleanofc\OffScrub10.vbs ALL /Q /NoCancel /BYPASS 1
:ofc2013
REM Utilizzo lo stesso script per rimuovere anche Visio e Project 2013 (sempre in versione C2R 365)
if %ofc2k13%=="Si (Versione O365 x86)" cscript \\TUOSERVERKACE\cleanofc\OffScrub13.vbs ALL /Q /NoCancel /BYPASS 1
if %ofc2k13%=="Si (Versione O365 x64)" cscript \\TUOSERVERKACE\cleanofc\OffScrub13.vbs ALL /Q /NoCancel /BYPASS 1
if %visio2k13%=="Si (Versione O365 x86)" cscript \\TUOSERVERKACE\cleanofc\OffScrub13.vbs ALL /Q /NoCancel /BYPASS 1
if %visio2k13%=="Si (Versione O365 x64)" cscript \\TUOSERVERKACE\cleanofc\OffScrub13.vbs ALL /Q /NoCancel /BYPASS 1
if %prj2k13%=="Si (Versione O365 x86)" cscript \\TUOSERVERKACE\cleanofc\OffScrub13.vbs ALL /Q /NoCancel /BYPASS 1
if %prj2k13%=="Si (Versione O365 x64)" cscript \\TUOSERVERKACE\cleanofc\OffScrub13.vbs ALL /Q /NoCancel /BYPASS 1

:exitcleaner

Dove ofc_start.vbs viene utilizzato per mostrare un popup all’utente (indicando quali prodotti sono stati rilevati sulla macchina) e chiedendo se può procedere o meno con la rimozione. Se dovesse servirti, posso metterlo a disposizione, chiedilo pure nell’area commenti. Lo script poco sopra è chiaramente modificabile secondo tue esigenze, il mio è un esempio (comunque utilizzato in produzione) per farti capire come sia possibile utilizzare l’ottimo lavoro svolto da Microsoft all’interno del proprio ambiente di lavoro.

Al termine dell’operazione non è necessario effettuare il riavvio della macchina, puoi integrare un ulteriore VBS (o equivalente) per notificare li termine del lavoro.

Ho dimenticato nulla? :-)

Condividi l'articolo con i tuoi contatti:

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

PowerShell: risultati delle query troncati? Come risolvere il problemaCi avevi mai pensato? In un prompt dei comandi, lanciare un findstr (con i giusti parametri) equivale a cercare un particolare che ti interessa, escludendo tutto il resto. Mi viene in mente un esempio lampo: di una lista di servizi che girano sul sistema (sc query) potrebbe interessarmi sapere se c’è o meno TeamViewer. Tradurlo in un comando di prompt vorrebbe significare qualcosa di molto simile a:

sc query | findstr /I teamviewer
NOME_SERVIZIO    : TeamViewer
NOME_VISUALIZZATO: TeamViewer 11

Ma su PowerShell? Lanciare un findstr mentre si lavora sulla propria sessione di Exchange in cloud non è proprio la stessa cosa, di certo non produce i risultati sperati. Fortunatamente esiste un’alternativa che puoi utilizzare in coda a qualsivoglia comando. Io ho riprodotto un caso specifico che mi ha permesso di individuare un utente in particolare all’interno di una lista più nutrita ottenuta esportando tutte le utenze che hanno un particolare dominio di posta come PrimarySMTPAddress.

Provo a semplificarla: di tutti quelli che hanno l’indirizzo “@dominio1.tld” io voglio sapere se tra di loro si nasconde qualcuno che abbia “Mario” all’interno del suo Alias di Exchange. Questo il risultato per step su PowerShell:

Get-Mailbox -ResultSize Unlimited | where {$_.PrimarySmtpAddress -like "*@dominio1.tld"}

Produce una lista riepilogativa di tutti coloro che hanno l’indirizzo di posta primario con il dominio da me specificato. A questo punto, per filtrare esclusivamente chi fa match con “Mario” all’interno del suo alias, ti basterà filtrare i risultati con il classico pipe in coda:

Get-Mailbox -ResultSize Unlimited | where {$_.PrimarySmtpAddress -like "*@dominio1.tld"} | ? {$_.Alias -match "mario"}

Quel | ? {$_.Alias -match "mario"} si traduce con qualsiasi cosa contenga “mario” all’interno dell’alias, serve quindi a individuare anche un utente che nell’alias potrebbe avere mario.pippo o mariopippo o qualsiasi altra combinazione. Se la query lanciata restituirà un risultato maggiore di zero (e troverà almeno un Mario tra gli alias) otterrai a video il risultato voluto.

Buon lavoro! :-)

Condividi l'articolo con i tuoi contatti: