Il Windows Management Instrumentation Command-Line (WMIC) è un potente tool di Windows spesso sottovalutato o sottoutilizzato principalmente per la scarsa documentazione sul suo utilizzo.
Due risorse ufficiali rese disponibli direttamente da Microsoft si trovano a questi indirizzi: Microsoft TechNet e Windows XP Professional Product Documentation.
Un esempio di utilizzo efficiente di questo strumento è la possibilità di accedere al prompt dei comandi di un pc e da qui lanciare la rimozione di software presenti su altri pc.
Accedere al prompt dei comandi con opportune credenziali
Benché attraverso i comandi WMIC sia possibile far transitare password amministrative, diciamo che non è mai bello far transitare password sulla rete, per cui è più sicuro accedere al prompt del DOS con credenziali amministrative usando un comando come:
il che farà uscire la richiesta di password di amministratore di dominio.
Se la password è corretta, apparirà un prompt dei comandi con diritti di amministratore di dominio.
Entriamo in WMIC
Una delle cose belle del WMIC è che può essere eseguito su qualsiasi macchina.
Dal prompt dei comandi è sufficiente digitare WMIC e poi premere il tasto invio.
Per essere sicuri di poter rimuovere il software in remoto è opportuno fare qualche esperimento di verifica per accertarsi che tutto funzioni a dovere.
Proviamo allora a verificare l'elenco dei software installati su un determinato pc:
Questo commando chiede a WMI di presentare una lista di software che includa il Nome, la Versione e il Produttore (di software compatibili con WMIC).
Se si desidera filtrare in base a uno specifico produttore, per esempio Apple, ecco che il comando diventa:
è ampiamente supportato.
Partiamo con la disinstallazione
Ora che abbiamo preso dimestichezza con lo strumento, si può passare a eseguire i comandi per la rimozione remota del software.
Se volessimo rimuovere il software "Bonjour", basterebbe digitare il comando:
e il sistema proporrebbe una conferma (sempre a riga di comando) prima della rimozione:
Se il software che si sta rimuovendo è WMI compliant allora l’utente non vedrà nulla e non saranno necessarie altre conferme o altre operazioni.
Rimozione di massa
E se dobbiamo rimuovere un software da 10, 20 o addirittura 50 macchine?
Nulla di più semplice. Basta avere a disposizione un file di testo con i nomi delle macchine dalle quali occorre rimuovere il software.
Per comodità diciamo che i nomi delle macchine sono memorizzati nel file c:nomipc.txt.
Basterà accedere a un prompt dei comandi con opportuni diritti e digitare il commando:
E tu, come rimuovi il software senza fare un controllo remote invasive?
Volevo solo farti i complimenti, c’è sempre da imparare qualcosa in questo mondo di Microsoft e questa proprio mi era sconosciuta. Ciao e grazie
Grazie Massimo,
i complimenti fanno sempre piacere, inutile negarLo.
Ma mi fa ancora più piacere che tu trovi utili i contenuti di questo blog. Infatti questo blog vuole portare valore ai lettori.
Non ci interessa fare il copia e incolla di qualche news trovata sui siti più gettonati.
Vogliamo portare a voi (e con voi) esperienze di informatica vissuta e "meditata".
Continua a seguirci!
Buongiorno,
Premetto che non ho a che fare con alcuna associazione, azienda o altro, sono solo un utente di internet affascinato dalla sua spiegazione.
Il mio nome è Samuel, ho un problema legato alla disinstallazione di un programma (iTunes) detto ciò mi chiedevo se potessi scomodare un professionista come lei per soccorrermi.
Ho cercato di disinstallarlo ma al punto finale, ma WMIC mi dice: nodo non valido (scartato)
Buongiorno Samuel,
qual è il comando esatto che lei digita e qual è il risultato esatto che le viene fuori?
Innanzitutto complimenti per l’articolo! ho però una domanda: come inserisco i nomi delle macchine nel file di testo? mi spiego meglio, li devo separare con la "," con il ";" o semplicemente con uno spazio o un "a capo"?
Grazie mille in anticipo per la risposta.
Mark
Ciao Mark,
se non ricordo male dovrebbero essere separati da una virgola, ma vai una verifica semplice prima di compilare un file di migliaia di macchine.
Non vorrei che da una versione all’altra dei sistemi operativi cambiasse la sintassi.
Sulla riga di comando se scrivi /NODE: pc1, pc2… ci va sicuramente la virgola.
Salve, complimenti per le ottime informazioni, volevo chiedere una delucidazione per quanto riguarda la disinstallazione massima. Inomi macchina presenti nel file txt devono essere separati da caratteri tipo virgole, punti o altro ??
Grazie
Massimo
E’ un po’ che non uso quel comando, mi sembra che ci volesse la virgola.
ciao, ho la necessità di rimuovere tutte le toolbar varie che installano gli utente ( nn li posso limitare ) è possibile farlo in un solo colpo " name like"*toolbar*"" o è meglio fare uno script x ognuna di esso? Inoltre è necessario l’elenco dei pc? se uso i caratteri jolly?? ciao e grazie 🙂
Ciao Gejser,
io consiglierei uno script per ogni applicativo da rimuovere.
L’elenco dei pc serve solo per dire su quali pc deve girare il tuo script di rimozione.
Fra l’altro se ti trovi spesso a dover fare questo tipo di operazioni io ti consiglio di dotarti di uno strumento di automatzione IT, come per esempio Kaseya (http://www.achab.it/kaseya) .
Potrebbe risparmiarti un po’ di ore di lavoro.
A riecchime qui… sono di nuovo a stressare ma c’è qualcosa che mi sfugge… ho seguito le tue indicazioni ma continuo ad avere il msg "the RPC server is unavable", lancio la seguente stringa di comando (che non è altro che la tua con 2 modifiche ) —> /failfast:on /node:@"c:ElencoPc.txt" product where “name like ‘Bonjour’”" call uninstall /nointeractive, ora faccio il tutto dal mio server antivirus con su W2008 R2 e loggando con lo user ADMINISTRATOR… che cavolo sbaglio? cosa mi sta sfuggendo? ho seguito il tuo consiglio e ho creato n script a seconda di quanto devo togliere… poi altra cosa… questa cosa è schedulabile? magari in un file batch… grazie 1000 x il tuo supporto 🙂
Ciao,
se ottieni "the RPC server is unavaible" significa che "dall’altra parte non risponde nessuno".
Ti segnalo un link dove trovare puoi davvero tante informazioni sul troubleshooting per problemi legati a RPC:
http://social.technet.microsoft.com/wiki/contents/articles/4494.troubleshooting-the-rpc-server-is-unavailable.aspx
Diciamo che al volo mi vengono in mente queste cose da verificare:
1) il sistema remoto ha le porte aperte per RPC?
2) C’è un firewall in mezzo?
3) c’è un antivirus che potrebbe bloccare le richieste RPC?
ucci ucci ucci sento odore di firewallucci… a cui non ho accesso in quanto gestito dalla ns casa madre… crucca… very thx 4 u help 🙂
Albanese Armando
Complimenti veri per la sua spiegazione molto valida ma sopratutto come dice lei piuttosto sconosciuta
ma adesso che lo letta ne ho già tratto vantaggio
ho solo qualche problemaq nell’eliminare un programma con questa stringa
/node:ITW1zx7y4j PRODUCT WHERE NAME="Winrar archivier" call uninstall
non capisco continua a dirmi non ci sono istanze disponibili
@Armando: difficile cosi’ su due piedi dire a cosa potrebbe essere legato.
Sto eseguendo il prompt del DOS come amministratore di rete?
Non ci sono firewall locali o antivirus che potenzialmente bloccano l’esecuzione dei comandi.
Salve Sig. Claudio
Ho controllato prima di lanciare il comando ed effettivamente non ci sono restrizioni di sorta
successivamente ho provato lo stesso comando sempre per disinstallare una applicazione ma stesso errore ora faro un pò di prove, Grazie comunque per la risposta
Sig . Claudio
Scoperto l’arcano, utilizzando una sessione a x64 le applicazioni a 32bit non li considera proprio c’e qualche possibilità per farglieli vedere .. GRazie mille
Complimenti per il troubleshooting, almeno ha scoperto il problema.
Lungi dall’essere una soluzione, forse puo’ trovare qualche indizio interessante per cercare quello che le serve: http://blogs.msdn.com/b/dsadsi/archive/2009/09/18/accessing-a-64-bit-wmi-provider-from-a-32-bit-application-running-on-a-64-bit-client.aspx
sono riuscito ad arrivare al product name vendor ma nella lista non mi trova teamviewer e nemmeno ultravnc che vorrei disinstallare
come faccio?
grazie
Fare troubleshooting su uno script è quanto mai difficile, sopratutto non avendo accesso ai sistemi.
Il collega Furio (grande esperto di PowerShell) suggerisce di provare a usare il comando Get-WmiObject -Class Win32_Product
ma se il programma da disinstallare richiede una password di disinstallazione? (solo password)…. posso aggiungere il parametro /password?
@Francesco: dipende dal tipo di software che stai rimuovendo, se l’uninstaller supporta o meno quel parametro.