Buongiorno e buon inizio settimana a tutti (che non fa mai male augurarlo, ndr). Articolo rapido e indolore, dedicato a coloro che hanno bisogno di rimuovere un servizio ancora installato e attivo su macchine aziendali da remoto, senza la necessità di collegarsi via VNC o simili.
Se possedete macchine Windows 7 (anche XP va bene in realtà) potete fare affidamento al comando “sc“, supportato da Windows stesso: microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/sc.mspx?mfr=true.
Per capirci: sc vi permette di fare qualsiasi tipo di operazione su tutti i servizi di sistema visibili da pannello (lo richiamate tramite un semplice “services.msc” in Start / Esegui), anche se la macchina non è la vostra, poiché è possibile specificare la destinazione come con il psexec di SysInternals. La situazione “tipo” è quella del sysadmin che può collegarsi e operare sulla macchina desiderata come amministratore di dominio.
Ecco quindi un breve script che vi permette di fermare e cancellare un servizio da voi scelto (nel mio caso ne ho trovato uno vecchio di Sophos non più utilizzato che se rilevato al logon mi viene segnalato a mezzo mail per l’eliminazione), chiedendo solo ed esclusivamente ip o hostname della macchina di destinazione:
set WshShell = CreateObject("WScript.Shell") pc=InputBox("Destination Hostname:", "Stop, Disable and Remove SAVService") d=WshShell.Run ("sc \\" & pc & " stop SAVService", 1, true) d=WshShell.Run ("sc \\" & pc & " delete SAVService", 1, true) msgbox("Done, please verify")
Se invece le macchine dovessero essere ben più di una potrete fare affidamento al sempre funzionante MS-DOS e ad un batch, che legge una lista di hostname o IP (uno per ciascuna riga) da un file di testo contenuto nella stessa cartella dello script (client.txt, ndr), lanciando poi le operazioni a ripetizione:
@echo off cls echo SAVService Remover echo GSolone 26112012 rev4 echo; REM Inizio ciclo di rimozione if exist savservice_remove.txt del savservice_remove.txt echo Activity start on %TODAY% >> savservice_remove.txt for /f %%X in (client.txt) do ( REM Preparazione data e ora set GIORNO=%DATE:~0,2% set MESE=%DATE:~3,2% set ANNO=%DATE:~6,4% set ORA=%TIME: =0% set ORA=%ORA:~0,2% set MINUTI=%TIME:~3,2% set SECONDI=%TIME:~6,2% set TODAY=%GIORNO%/%MESE%/%ANNO% %ORA%:%MINUTI%:%SECONDI% echo %TODAY% - Connecting to %%X ... echo %TODAY% - Remove SAVService on %%X ... >> savservice_remove.txt sc \\%%X stop SAVService >> savservice_remove.txt sc \\%%X delete SAVService >> savservice_remove.txt ) echo %TODAY% - Esecuzione terminata, premere un qualsiasi tasto per chiudere la finestra e visualizzare il log. pause > NUL start "Visualizza log" /B savservice_remove.txt
Per quest’ultimo codice ho scelto un maggiore dettaglio che verrà salvato in un log chiamato “savservice_remove.txt“.
Molto più comodo che passare su ciascuna macchina o ripetere manualmente le operazioni tramite pannello di “Gestione computer” ;-)
Spero possa tornarvi utile!
Grazie alla giusta osservazione di FOLBlog ho modificato il posizionamento della variabile TODAY per un corretto ricalcolo dei minuti e secondi di esecuzione comandi nel ciclo FOR.
L'articolo potrebbe non essere aggiornato
Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)