Gestire i servizi di Windows con il comando sc.exe

Per la gestione dei servizi di Windows possiamo utilizzare la console MMC dalla quale visualizzare i servizi della macchina locale oppure connettersi ad un computer remoto. In reti di grosse dimensioni dove il numero dei PC è elevato può essere utile realizzare degli script per il controllo e la gestione dei servizi ed in questo ambito ci aiuta il comando sc.exe (Service Control) tramite il quale possiamo creare, avviare, fermare, cancellare e interrogare lo stato di qualsiasi servizio di Windows sia del PC locale che di un PC remoto.
Vediamo alcuni esempi di utilizzo del comando (per la lista completa delle opzioni digitare il comando sc dal prompt dei comandi e viene visualizzato l’help relativo).

Per visualizzare l’elenco dei servizi del PC locale e il relativo stato si utilizza l’opzione query (a solo scopo di esempio viene visualizzato l’output del servizio “Windows Update”)

c:\> sc query
[...]
NOME_SERVIZIO    : wuauserv
NOME_VISUALIZZATO: Servizio Windows Update
        TIPO                   : 10  WIN32_OWN_PROCESS
        STATO                  : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
        CODICE_USCITA_WIN32    : 0  (0x0)
        CODICE_USCITA_SERVIZIO : 0  (0x0)
        PUNTO_CONTROLLO        : 0x0
        INDICAZIONE_ATTESA     : 0x0
[...]

Lo stesso comando può essere utilizzato per l’elenco dei servizi di un PC remoto

c:\> sc \\"NomeMacchina" query
[...]
NOME_SERVIZIO    : wuauserv
NOME_VISUALIZZATO: Servizio Windows Update
        TIPO                   : 10  WIN32_OWN_PROCESS
        STATO                  : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
        CODICE_USCITA_WIN32    : 0  (0x0)
        CODICE_USCITA_SERVIZIO : 0  (0x0)
        PUNTO_CONTROLLO        : 0x0
        INDICAZIONE_ATTESA     : 0x0
[...]

Utilizzando l’opzione “query” abbiamo la lista dei servizi con il relativo nome servizio che va utilizzato per la gestione di uno specifico servizio. Pertanto, supponendo di voler vedere lo stato del servizio “Windows Update” su un PC remoto possiamo utilizzare il seguente comando:

C:\> sc \\"NomeMacchina" query wuauserv
NOME_SERVIZIO: wuauserv
        TIPO                   : 20  WIN32_SHARE_PROCESS
        STATO                  : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
        CODICE_USCITA_WIN32    : 0  (0x0)
        CODICE_USCITA_SERVIZIO : 0  (0x0)
        PUNTO_CONTROLLO          : 0x0
        INDICAZIONE_ATTESA     : 0x0

E quindi eseguire comandi di modifica sullo stato del servizio.

Stop del servizio

C:\> sc \\"NomeMacchina" stop wuauserv
NOME_SERVIZIO: wuauserv
        TIPO                   : 20  WIN32_SHARE_PROCESS
        STATO                  : 3  STOP_PENDING
                                (NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
        CODICE_USCITA_WIN32    : 0  (0x0)
        CODICE_USCITA_SERVIZIO : 0  (0x0)
        PUNTO_CONTROLLO          : 0x2
        INDICAZIONE_ATTESA     : 0x7530

Start del servizio

C:\> sc \\"NomeMacchina" start wuauserv
NOME_SERVIZIO: wuauserv
        TIPO                   : 20  WIN32_SHARE_PROCESS
        STATO                  : 2  START_PENDING
                                (NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
        CODICE_USCITA_WIN32    : 0  (0x0)
        CODICE_USCITA_SERVIZIO : 0  (0x0)
        PUNTO_CONTROLLO          : 0x0
        INDICAZIONE_ATTESA     : 0x7d0
        PID                    : 3316
        FLAG                   :

Modifica della configurazione di avvio impostando a “manuale”

C:> sc \"NomeMacchina" config wuauserv start= demand
[SC] ChangeServiceConfig OPERAZIONI RIUSCITE

L'opzione start può avere i seguenti valori:
demand        --> Manuale
auto          --> Automatico
disabled      --> Disabilitato
delayed-auto  --> Automatico con avvio ritardato

Nota: “start= demand” va digitato con lo spazio dopo il segno “=”

Gli utilizzi di questo comando sono molteplici e può essere utilizzato all’interno di script dove, ad esempio, viene passato l’elenco delle macchine presenti sulla rete e tramite il comando sc eseguita una modifica massiva su tutte. Oppure creare uno script con l’elenco di tutti i servizi di Windows e fare in modo che tutte le macchine siano configurate allo stesso modo e non ultimo un metodo molto spartano per il monitoraggio delle impostazione dei vari servizi.