VBS / Batch: rimozione di un servizio di Windows da remoto

| |

VBS / Batch: rimozione di un servizio di Windows da remoto 1Buongiorno 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!

Aggiornamento
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.

Correzioni, suggerimenti? Lascia un commento nell'apposita area qui di seguito o contattami privatamente.
Ti è piaciuto l'articolo? Offrimi un caffè! ☕ :-)

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! :-)

Condividi l'articolo con i tuoi contatti:
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

2 Commenti
Oldest
Newest Most Voted
Inline Feedbacks
View all comments