Distributing Software Updates via Registry Settings & GPOs

In an environment such as a production or development LAN, you sometimes need to distrubute changes to software throughout all the systems.  I found all these settings I wanted to change were stored in the registry.  So, if I can push out registry updates via Group Policy Objects (GPOs), I can update all the servers from a central location at once.  Last step was to restart the services on each server.

Googling around, I discovered if I created a custom administrative template in the Default Domain Policy I can accomplish the registry updates.  Below is a good template to get the started.

; test.adm
;;;;;;;;;;;;;;;;;;;;;
CLASS MACHINE  ;;;;;;
;;;;;;;;;;;;;;;;;;;;;
 
CATEGORY !!CategoryName
    POLICY !!PolicyName
    KEYNAME "SOFTWARE\Vendor\Package\Group"
        PART !!TestTextName EDITTEXT REQUIRED
            VALUENAME "TestTextName"
            DEFAULT !!TestTextNameDefault   
        END PART
        PART !!TestCheckBox CHECKBOX
            VALUENAME "CheckThis"
            VALUEON NUMERIC 1
            VALUEOFF NUMERIC 0
        END PART
        PART !!TestNumeric NUMERIC REQUIRED
            VALUENAME "TestNumeric"
            DEFAULT 250
            MIN 100
            MAX 1000
        END PART
        PART !!TestDescription01 TEXT END PART
    END POLICY
END CATEGORY

[STRINGS]
CategoryName="Testing Admin Templates"
PolicyName="Test Policy Name"
TestTextName="Test Item Text"
TestTextNameDefault="Default Text Value"
TestCheckBox="Turn On or Off Pattern"
TestNumeric="Testing a Numeric Value 100-1000"
TestDescription01="Here is a description of what we are doing."

Here was my specific example of updating NagEventLog configuration across all my windows servers.

Well, that worked really well for me.  However I realized I had to restart the service across all those hosts now for the updates to take affect.  Restarting one at a time is easy enough from a central location, but I wanted to restart them all at once.  I thought of the "net" command, but that did not offer what I was looking for. 

The "psservice.exe" program offered from sysinternals as part of the PsTools allows for the remote restart of a service from a command line.  Using a batch script I should be able to script something automatic.  So how do we feed the server names into the script?  Well, back to the net command or "net view" to be more specific, which I can use to retrieve the list of server names.  

Here is the more detailed description of using a batch script and psservice.exe to restart a service on all the hosts.