Solved

Modifying an expert's script

Posted on 2009-06-29
6
266 Views
Last Modified: 2012-05-07
Hi guys,
This code was written by one of you gurus (rejoinder).
It presents all services on a local system and is brilliant.
Id like to modify the below code so that:

1) It allows you to input a computer name to check services against.
2) Does not present all services, but only the following:
a) Alerter
b) Workstation
c) Server

So basically, the hta as it is, Id like left unchanged, but instead of all services returned, only the 3 mentioned above, plus the ability to inputer a computer name to run this against.
Any help would be greatly appreciated.
<head>

<title>Server Services</title>

<HTA:APPLICATION 

     APPLICATIONNAME="Server Services"

     BORDER="thin"

     SCROLL="yes"

     SINGLEINSTANCE="yes"

     ID="oHTA"

>

<APPLICATION:HTA>

</head>

 

<script language="VBScript">

 

Sub Window_OnLoad

    

    Set objlst_groupnames = document.getElementById( "list_servicenames" )

    If objlst_groupnames Is Nothing Then

        MsgBox "A problem was encountered while creating the listview." & vbCRLF & "Please see your 
 

administrator."

    Else

        With objlst_groupnames

            .View              = 3

            .Width             = 800

            .Height            = 600

            .SortKey           = 0

            .Arrange           = 0

            .LabelEdit         = 1

            .SortOrder         = 0

            .Sorted            = 1

            .MultiSelect       = 0

            .LabelWrap         = -1

            .HideSelection     = -1

            .HideColumnHeaders = 0

            .OLEDragMode       = 0

            .OLEDropMode       = 0

            .Checkboxes        = 1

            .FlatScrollBar     = 0

            .FullRowSelect     = 1

            .GridLines         = 0

            .HotTracking       = 0

            .HoverSelection    = 0

            .PictureAlignment  = 0

            .TextBackground    = 0

            .ForeColor         = -2147483640

            .BackColor         = -2147483643

            .BorderStyle       = 1

            .Appearance        = 1

            .MousePointer      = 0

            .Enabled           = 1

            .ColumnHeaders.Clear

            .ColumnHeaders.Add , , "Caption", 150

            .ColumnHeaders.Add , , "State", 150

            .ColumnHeaders.Add , , "Name", 150

            .ColumnHeaders.Add , , "Description", 150

            .ColumnHeaders.Add , , "Start Mode", 150

            .ListItems.Clear

        End With

    End If

    ListServices(".")

End Sub

 

Sub ListServices(sComputer)

    ON ERROR RESUME NEXT

    Set objList = document.getElementById( "list_servicenames" )

    objList.ListItems.Clear

    

    set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & sComputer & 
 

"\root\cimv2")

    Set colItems = objWMIService.ExecQuery("Select * from Win32_Service")

    For Each objItem in colItems

        Set objListItem  = objList.ListItems.Add

        objListItem.Text = objItem.Caption

        objListItem.ListSubItems.Add.Text = objItem.State

        objListItem.ListSubItems.Add.Text = objItem.Name

        objListItem.ListSubItems.Add.Text = objItem.Description

        objListItem.ListSubItems.Add.Text = objItem.StartMode

    Next

End Sub

 

Sub btn_start_onClick()

    strComputer = "."

    for n = 1 to list_servicenames.ListItems.Count

        if list_servicenames.ListItems(n).checked = True then

            strService = list_servicenames.ListItems(n).ListSubItems(2).Text

            Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & 
 

"\root\cimv2")

            Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where Name='" & 
 

strService & "'")

            For each objService in colServiceList

                errReturn = objService.StartService()

            Next

        end if

    next

    ListServices(strComputer)

End Sub

 

Sub btn_stop_onClick()

    strComputer = "."

    for n = 1 to list_servicenames.ListItems.Count

        if list_servicenames.ListItems(n).checked = True then

            strService = list_servicenames.ListItems(n).ListSubItems(2).Text

            Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & 
 

"\root\cimv2")

            Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where Name='" & 
 

strService & "'")

            For each objService in colServiceList

                errReturn = objService.StopService()

            Next

        end if

    next

    ListServices(strComputer)

End Sub

 

Sub btn_restart_onClick()

    strComputer = "."

    'Stop services

    for n = 1 to list_servicenames.ListItems.Count

        if list_servicenames.ListItems(n).checked = True then

            strService = list_servicenames.ListItems(n).ListSubItems(2).Text

            Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & 
 

"\root\cimv2")

            Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where Name='" & 
 

strService & "'")

            For each objService in colServiceList

                errReturn = objService.StopService()

            Next

        end if

    next

    'Start services

    for n = 1 to list_servicenames.ListItems.Count

        if list_servicenames.ListItems(n).checked = True then

            strService = list_servicenames.ListItems(n).ListSubItems(2).Text

            Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & 
 

"\root\cimv2")

            Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where Name='" & 
 

strService & "'")

            For each objService in colServiceList

                errReturn = objService.StartService()

            Next

        end if

    next

    ListServices(strComputer)

End Sub

 

Sub btn_Refresh_onClick()

    ListServices(".")

End Sub

 

Sub btn_exit_onClick()

    Window.Close

End Sub

 

function list_servicenames_ColumnClick(colheader)

    list_servicenames.SortKey = colheader.index-1

end function

 

</script>

 

<body>

 

<OBJECT id="list_servicenames" name="list_servicenames" 
 

classid="clsid:BDD1F04B-858B-11D1-B16A-00C0F0283628"></OBJECT>

<br />

<input type="button" value="Refresh" name="btn_Refresh" id="btn_Refresh" title="Click to refresh the 
 

services list"> &nbsp;

<input type="button" value="Start"   name="btn_start"   id="btn_start"   title="Click to Start the 
 

Services"> &nbsp;

<input type="button" value="Stop"    name="btn_stop"    id="btn_stop"    title="Click to Stop the 
 

Service"> &nbsp;

<input type="button" value="Restart" name="btn_restart" id="btn_restart" title="Click to Restart the 
 

Services"> &nbsp;

<input type="button" value="Exit"    name="btn_exit"    id="btn_exit"    title="Click to Exit Form ">

 

</body>

Open in new window

0
Comment
Question by:Simon336697
  • 3
  • 3
6 Comments
 
LVL 14

Expert Comment

by:rejoinder
ID: 24740661
This should do as you ask.
<head>

<title>Server Services</title>

<HTA:APPLICATION 

     APPLICATIONNAME="Server Services"

     BORDER="thin"

     SCROLL="yes"

     SINGLEINSTANCE="yes"

     ID="oHTA"

>

<APPLICATION:HTA>

</head>

 

<script language="VBScript">

 

Sub Window_OnLoad

    Set objlst_groupnames = document.getElementById( "list_servicenames" )

    If objlst_groupnames Is Nothing Then

        MsgBox "A problem was encountered while creating the listview." & vbCRLF & "Please see your administrator."

    Else

        With objlst_groupnames

            .View              = 3

            .Width             = 800

            .Height            = 600

            .SortKey           = 0

            .Arrange           = 0

            .LabelEdit         = 1

            .SortOrder         = 0

            .Sorted            = 1

            .MultiSelect       = 0

            .LabelWrap         = -1

            .HideSelection     = -1

            .HideColumnHeaders = 0

            .OLEDragMode       = 0

            .OLEDropMode       = 0

            .Checkboxes        = 1

            .FlatScrollBar     = 0

            .FullRowSelect     = 1

            .GridLines         = 0

            .HotTracking       = 0

            .HoverSelection    = 0

            .PictureAlignment  = 0

            .TextBackground    = 0

            .ForeColor         = -2147483640

            .BackColor         = -2147483643

            .BorderStyle       = 1

            .Appearance        = 1

            .MousePointer      = 0

            .Enabled           = 1

            .ColumnHeaders.Clear

            .ColumnHeaders.Add , , "Caption", 150

            .ColumnHeaders.Add , , "State", 150

            .ColumnHeaders.Add , , "Name", 150

            .ColumnHeaders.Add , , "Description", 150

            .ColumnHeaders.Add , , "Start Mode", 150

            .ListItems.Clear

        End With

    End If

End SUb
 

Sub btn_Poll_onClick()

    ListServices(txt_computername.value)

End Sub

 

Sub ListServices(sComputer)

    ON ERROR RESUME NEXT

    

    set objDic = CreateObject("Scripting.Dictionary")

    objDic.Add "Alerter","Alerter"

    objDic.Add "lanmanworkstation","Workstation"

    objDic.Add "lanmanserver","Server"

    

    Set objList = document.getElementById( "list_servicenames" )

    objList.ListItems.Clear

    

    set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & sComputer & "\root\cimv2")

    Set colItems = objWMIService.ExecQuery("Select * from Win32_Service")

    For Each objItem in colItems

        if objDic.Exists(objItem.Name) then

            Set objListItem  = objList.ListItems.Add

            objListItem.Text = objItem.Caption

            objListItem.ListSubItems.Add.Text = objItem.State

            objListItem.ListSubItems.Add.Text = objItem.Name

            objListItem.ListSubItems.Add.Text = objItem.Description

            objListItem.ListSubItems.Add.Text = objItem.StartMode

        end if

    Next

End Sub

 

Sub btn_start_onClick()

    strComputer = txt_computername.value

    for n = 1 to list_servicenames.ListItems.Count

        if list_servicenames.ListItems(n).checked = True then

            strService = list_servicenames.ListItems(n).ListSubItems(2).Text

            Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

            Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where Name='" & strService & "'")

            For each objService in colServiceList

                errReturn = objService.StartService()

            Next

        end if

    next

    ListServices(strComputer)

End Sub

 

Sub btn_stop_onClick()

    strComputer = txt_computername.value

    for n = 1 to list_servicenames.ListItems.Count

        if list_servicenames.ListItems(n).checked = True then

            strService = list_servicenames.ListItems(n).ListSubItems(2).Text

            Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

            Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where Name='" & strService & "'")

            For each objService in colServiceList

                errReturn = objService.StopService()

            Next

        end if

    next

    ListServices(strComputer)

End Sub

 

Sub btn_restart_onClick()

    strComputer = txt_computername.value

    'Stop services

    for n = 1 to list_servicenames.ListItems.Count

        if list_servicenames.ListItems(n).checked = True then

            strService = list_servicenames.ListItems(n).ListSubItems(2).Text

            Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

            Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where Name='" & strService & "'")

            For each objService in colServiceList

                errReturn = objService.StopService()

            Next

        end if

    next

    'Start services

    for n = 1 to list_servicenames.ListItems.Count

        if list_servicenames.ListItems(n).checked = True then

            strService = list_servicenames.ListItems(n).ListSubItems(2).Text

            Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

            Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where Name='" & strService & "'")

            For each objService in colServiceList

                errReturn = objService.StartService()

            Next

        end if

    next

    ListServices(strComputer)

End Sub

 

Sub btn_Refresh_onClick()

    ListServices(txt_computername.value)

End Sub

 

Sub btn_exit_onClick()

    Window.Close

End Sub

 

function list_servicenames_ColumnClick(colheader)

    list_servicenames.SortKey = colheader.index-1

end function

 

</script>

 

<body>

Computer Name <INPUT TYPE="text" ID="txt_computername" NAME="txt_computername" SIZE="40" MAXLENGTH="255"><input type="submit" value="Poll Computer" name="btn_Poll" id="btn_Poll" title="Click to poll the computer"><br />

<OBJECT id="list_servicenames" name="list_servicenames" 

 

classid="clsid:BDD1F04B-858B-11D1-B16A-00C0F0283628"></OBJECT>

<br />

<input type="button" value="Refresh" name="btn_Refresh" id="btn_Refresh" title="Click to refresh the services list"> &nbsp;

<input type="button" value="Start"   name="btn_start"   id="btn_start"   title="Click to Start the Services"> &nbsp;

<input type="button" value="Stop"    name="btn_stop"    id="btn_stop"    title="Click to Stop the Service"> &nbsp;

<input type="button" value="Restart" name="btn_restart" id="btn_restart" title="Click to Restart the Services"> &nbsp;

<input type="button" value="Exit"    name="btn_exit"    id="btn_exit"    title="Click to Exit Form ">

 

</body>

Open in new window

0
 
LVL 1

Author Comment

by:Simon336697
ID: 24740985
rejoinder,
Youre a gun.
Can I please just ask one more thing of your kind self?
Is there a way to first check if the machine is pingable, and:
a) if not ---> output "System down"
b) if up, do as normal.
0
 
LVL 14

Accepted Solution

by:
rejoinder earned 500 total points
ID: 24741035
This provides the prompt plus the ability to retry just in case the ping didn't make it back and you know the computer is on.
<head>

<title>Server Services</title>

<HTA:APPLICATION 

     APPLICATIONNAME="Server Services"

     BORDER="thin"

     SCROLL="yes"

     SINGLEINSTANCE="yes"

     ID="oHTA"

>

<APPLICATION:HTA>

</head>

 

<script language="VBScript">

 

Sub Window_OnLoad

    Set objlst_groupnames = document.getElementById( "list_servicenames" )

    If objlst_groupnames Is Nothing Then

        MsgBox "A problem was encountered while creating the listview." & vbCRLF & "Please see your administrator."

    Else

        With objlst_groupnames

            .View              = 3

            .Width             = 800

            .Height            = 600

            .SortKey           = 0

            .Arrange           = 0

            .LabelEdit         = 1

            .SortOrder         = 0

            .Sorted            = 1

            .MultiSelect       = 0

            .LabelWrap         = -1

            .HideSelection     = -1

            .HideColumnHeaders = 0

            .OLEDragMode       = 0

            .OLEDropMode       = 0

            .Checkboxes        = 1

            .FlatScrollBar     = 0

            .FullRowSelect     = 1

            .GridLines         = 0

            .HotTracking       = 0

            .HoverSelection    = 0

            .PictureAlignment  = 0

            .TextBackground    = 0

            .ForeColor         = -2147483640

            .BackColor         = -2147483643

            .BorderStyle       = 1

            .Appearance        = 1

            .MousePointer      = 0

            .Enabled           = 1

            .ColumnHeaders.Clear

            .ColumnHeaders.Add , , "Caption", 150

            .ColumnHeaders.Add , , "State", 150

            .ColumnHeaders.Add , , "Name", 150

            .ColumnHeaders.Add , , "Description", 150

            .ColumnHeaders.Add , , "Start Mode", 150

            .ListItems.Clear

        End With

    End If

End SUb
 

Sub btn_Poll_onClick()

    ListServices(txt_computername.value)

End Sub

 

Sub ListServices(sComputer)

    ON ERROR RESUME NEXT

    

    if NOT IsComputerOn(sComputer) then

        response = msgbox("Machine unavailable." & vbCRLF & "Do you wish to retry or cancel?",21,"ERROR!")

        if response = vbRetry then

            ListServices(sComputer)

        else

            Exit Sub

        end if

    end if

    

    set objDic = CreateObject("Scripting.Dictionary")

    objDic.Add "Alerter","Alerter"

    objDic.Add "lanmanworkstation","Workstation"

    objDic.Add "lanmanserver","Server"

    

    Set objList = document.getElementById( "list_servicenames" )

    objList.ListItems.Clear

    

    set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & sComputer & "\root\cimv2")

    Set colItems = objWMIService.ExecQuery("Select * from Win32_Service")

    For Each objItem in colItems

        if objDic.Exists(objItem.Name) then

            Set objListItem  = objList.ListItems.Add

            objListItem.Text = objItem.Caption

            objListItem.ListSubItems.Add.Text = objItem.State

            objListItem.ListSubItems.Add.Text = objItem.Name

            objListItem.ListSubItems.Add.Text = objItem.Description

            objListItem.ListSubItems.Add.Text = objItem.StartMode

        end if

    Next

End Sub

 

Sub btn_start_onClick()

    strComputer = txt_computername.value

    for n = 1 to list_servicenames.ListItems.Count

        if list_servicenames.ListItems(n).checked = True then

            strService = list_servicenames.ListItems(n).ListSubItems(2).Text

            Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

            Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where Name='" & strService & "'")

            For each objService in colServiceList

                errReturn = objService.StartService()

            Next

        end if

    next

    ListServices(strComputer)

End Sub

 

Sub btn_stop_onClick()

    strComputer = txt_computername.value

    for n = 1 to list_servicenames.ListItems.Count

        if list_servicenames.ListItems(n).checked = True then

            strService = list_servicenames.ListItems(n).ListSubItems(2).Text

            Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

            Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where Name='" & strService & "'")

            For each objService in colServiceList

                errReturn = objService.StopService()

            Next

        end if

    next

    ListServices(strComputer)

End Sub

 

Sub btn_restart_onClick()

    strComputer = txt_computername.value

    'Stop services

    for n = 1 to list_servicenames.ListItems.Count

        if list_servicenames.ListItems(n).checked = True then

            strService = list_servicenames.ListItems(n).ListSubItems(2).Text

            Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

            Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where Name='" & strService & "'")

            For each objService in colServiceList

                errReturn = objService.StopService()

            Next

        end if

    next

    'Start services

    for n = 1 to list_servicenames.ListItems.Count

        if list_servicenames.ListItems(n).checked = True then

            strService = list_servicenames.ListItems(n).ListSubItems(2).Text

            Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

            Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where Name='" & strService & "'")

            For each objService in colServiceList

                errReturn = objService.StartService()

            Next

        end if

    next

    ListServices(strComputer)

End Sub

 

Sub btn_Refresh_onClick()

    ListServices(txt_computername.value)

End Sub

 

Sub btn_exit_onClick()

    Window.Close

End Sub

 

function list_servicenames_ColumnClick(colheader)

    list_servicenames.SortKey = colheader.index-1

end function
 

Function IsComputerOn(computer)

    'Ping to see if computer is active

    Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("select * from Win32_PingStatus where address = '" & computer & "'")

    For Each objStatus in objPing

        if IsNull(objStatus.StatusCode) or objStatus.StatusCode <> 0 Then

            boolPingReturned = False

        else

            boolPingReturned = True

        end if 

    next

    IsComputerOn = boolPingReturned

End Function
 

</script>

 

<body>

Computer Name <INPUT TYPE="text" ID="txt_computername" NAME="txt_computername" SIZE="40" MAXLENGTH="255"><input type="submit" value="Poll Computer" name="btn_Poll" id="btn_Poll" title="Click to poll the computer"><br />

<OBJECT id="list_servicenames" name="list_servicenames" 

 

classid="clsid:BDD1F04B-858B-11D1-B16A-00C0F0283628"></OBJECT>

<br />

<input type="button" value="Refresh" name="btn_Refresh" id="btn_Refresh" title="Click to refresh the services list"> &nbsp;

<input type="button" value="Start"   name="btn_start"   id="btn_start"   title="Click to Start the Services"> &nbsp;

<input type="button" value="Stop"    name="btn_stop"    id="btn_stop"    title="Click to Stop the Service"> &nbsp;

<input type="button" value="Restart" name="btn_restart" id="btn_restart" title="Click to Restart the Services"> &nbsp;

<input type="button" value="Exit"    name="btn_exit"    id="btn_exit"    title="Click to Exit Form ">

 

</body>

Open in new window

0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 1

Author Comment

by:Simon336697
ID: 24741081
Champion,
rejoinder,
ive attached a screendump.
I know how to increase the widh of each section (the blue arrows), but not the total width of the box
housing the services output (the red arrow)
width.jpg
0
 
LVL 1

Author Closing Comment

by:Simon336697
ID: 31598127
thanks so much rejoinder
0
 
LVL 14

Expert Comment

by:rejoinder
ID: 24741201
Thanks for the points!

The window size can be set in the "onload" sub.  Something like this could be used...

      intWidth = 800
      intHeight = 900
      Me.ResizeTo intWidth, intHeight
      Me.MoveTo ((Screen.Width / 2) - (intWidth / 2)),((Screen.Height / 2) - (intHeight / 2))

The key is the the "Me.ResizeTo intWidth, intHeight" line
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Hello again, all.  For those of you that have been following along, you'll know that this is my third article on this topic (though it is not Part III).  This article is sort of remedial, and probably the topic with which I should have started the s…
This is pretty cool.  The purpose of this VB Script is to help you document where JAR (Java ARchive) files and specifically java class files are located so that you can address issues seen with a client or that you can speak intelligently with a dev…
Migrating to Microsoft Office 365 is becoming increasingly popular for organizations both large and small. If you have made the leap to Microsoft’s cloud platform, you know that you will need to create a corporate email signature for your Office 365…
Internet Business Fax to Email Made Easy - With  eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, f…

863 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

25 Experts available now in Live!

Get 1:1 Help Now