Managing Services and Hardware in Server Core

As people start using Server Core, I have been finding that over time their questions tend to shift from how to perform a task remotely in the GUI to how perform the task from the command line. The impression I get is that there are two underlying reasons for this, 1 – they are getting more comfortable with the command line, and 2 – they want to create scripts for some of their more common tasks to make it easier to manage from the command line. Of course, I could be complete wrong here, so I’d be happy to hear any comments from those using the local or TS command line more.

 

Now that my random thought for the week is out of the way, I’ll talk about how to actually do something.

 

SC.exe is a very powerful command line tool that has been around for awhile but doesn’t seem to be widely known about. When managing services from the command line, net start and net stop are widely used, however SC provides a lot more functionality. SC is in fact a command line equivalent plus more functionality then the Services MMC. Some of the terminology is a little different between the two, for example in the Services MMC you pause and resume services while with SC you pause and continue services.

 

To perform the equivalent the Properties dialog box in the Services MMC, take a look at the options available with “SC config”. You can use SC sdhow and sdset to view and set the permissions for a service.

 

SC can also be used to find out what hardware you have drivers installed for on your Server Core box by running:

            Sc query type= driver

You can then look through the list and find your network card drivers, video drivers, etc. For example on my Server Core box I have the following for network and video:

 

SERVICE_NAME: E1G60

DISPLAY_NAME: Intel(R) PRO/1000 NDIS 6 Adapter Driver

        TYPE               : 1  KERNEL_DRIVER 

        STATE              : 4  RUNNING

                                (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)

        WIN32_EXIT_CODE    : 0  (0x0)

        SERVICE_EXIT_CODE  : 0  (0x0)

        CHECKPOINT         : 0x0

        WAIT_HINT          : 0x0

 

SERVICE_NAME: vga

DISPLAY_NAME: vga

        TYPE               : 1  KERNEL_DRIVER

        STATE              : 4  RUNNING

                                (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)

        WIN32_EXIT_CODE    : 0  (0x0)

        SERVICE_EXIT_CODE  : 0  (0x0)

        CHECKPOINT         : 0x0

        WAIT_HINT          : 0x0

 

If I then want to know what the driver file is for my nic so I can check the version, I can run:

D:\Windows\System32\drivers>sc qc e1g60

[SC] QueryServiceConfig SUCCESS

 

SERVICE_NAME: e1g60

        TYPE               : 1  KERNEL_DRIVER

        START_TYPE         : 3   DEMAND_START

        ERROR_CONTROL      : 1   NORMAL

        BINARY_PATH_NAME   : system32\DRIVERS\E1G60I32.sys

        LOAD_ORDER_GROUP   : NDIS

        TAG                : 13

        DISPLAY_NAME       : Intel(R) PRO/1000 NDIS 6 Adapter Driver

        DEPENDENCIES       :

        SERVICE_START_NAME :

 

SC treats drivers like services, so if I have multiple NICs and am troubleshooting a network issue and want to disable a NIC, I can use SC to do that. Using the NIC in my box as an example, I can run: sc stop e1g60. Or, I could use SC to set the startup type to disabled and restart the box.

 

Andrew