HEX
Server: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/8.4.25
System: Windows NT DESKTOP-4TAV2RJ 10.0 build 19045 (Windows 10) AMD64
User: fred (0)
PHP: 8.4.25
Disabled: NONE
Upload Files
File: C:/Windows/System32/Printing_Admin_Scripts/zh-TW/prnport.vbs
��'----------------------------------------------------------------------

'

' Copyright (c) Microsoft Corporation. All rights reserved.

'

' Abstract:

' prnport.vbs - Port script for WMI on Windows 

'     used to add, delete and list ports

'     also for getting and setting the port configuration

'

' Usage:

' prnport [-adlgt?] [-r port] [-s server] [-u user name] [-w password]

'                   [-o raw|lpr] [-h host address] [-q queue] [-n number]

'                   [-me | -md ] [-i SNMP index] [-y community] [-2e | -2d]"

'

' Examples

' prnport -a -s server -r IP_1.2.3.4 -e 1.2.3.4 -o raw -n 9100

' prnport -d -s server -r c:\temp\foo.prn

' prnport -l -s server

' prnport -g -s server -r IP_1.2.3.4

' prnport -t -s server -r IP_1.2.3.4 -me -y public -i 1 -n 9100

'

'----------------------------------------------------------------------



option explicit



'

' Debugging trace flags, to enable debug output trace message

' change gDebugFlag to true.

'

dim   gDebugFlag

const kDebugTrace = 1

const kDebugError = 2



gDebugFlag = false



'

' Operation action values.

'

const kActionAdd          = 0

const kActionDelete       = 1

const kActionList         = 2

const kActionUnknown      = 3

const kActionGet          = 4

const kActionSet          = 5



const kErrorSuccess       = 0

const KErrorFailure       = 1



const kFlagCreateOrUpdate = 0



const kNameSpace          = "root\cimv2"





'

' Constants for the parameter dictionary

'

const kServerName      = 1

const kPortName        = 2

const kDoubleSpool     = 3

const kPortNumber      = 4

const kPortType        = 5

const kHostAddress     = 6

const kSNMPDeviceIndex = 7

const kCommunityName   = 8

const kSNMP            = 9

const kQueueName       = 10

const kUserName        = 11

const kPassword        = 12



'

' Generic strings

'

const L_Empty_Text                 = ""

const L_Space_Text                 = " "

const L_Colon_Text                 = ":"

const L_LPR_Queue                  = "LPR"

const L_Error_Text                 = "/���"

const L_Success_Text               = "b�R"

const L_Failed_Text                = "1YWe"

const L_Hex_Text                   = "0x"

const L_Printer_Text               = "pSh�_j"

const L_Operation_Text             = "�d\O"

const L_Provider_Text              = "�c�O�"

const L_Description_Text           = "�c�"

const L_Debug_Text                 = "uP/�:"



'

' General usage messages

'

const L_Help_Help_General01_Text   = "O(u�e�l: prnport [-adlgt?] [-r port][-s server][-u user name][-w password]"

const L_Help_Help_General02_Text   = "               [-o raw|lpr][-h host address][-q queue][-n number]"

const L_Help_Help_General03_Text   = "               [-me | -md ][-i SNMP index][-y community][-2e | -2d]"

const L_Help_Help_General04_Text   = "_xe:"

const L_Help_Help_General05_Text   = "-a     - �e�X#��c�W"

const L_Help_Help_General06_Text   = "-d     - *Rd�c�[�v#��c�W"

const L_Help_Help_General07_Text   = "-g     - �S�_ TCP #��c�W�vD}Ka-��["

const L_Help_Help_General08_Text   = "-h     - ݈n�v IP MO@W"

const L_Help_Help_General09_Text   = "-i     - SNMP "}_��Y�g_U(u�N SNMP"

const L_Help_Help_General10_Text   = "-l     - R�Q@b	g TCP #��c�W"

const L_Help_Help_General11_Text   = "-m     - SNMP ^��W0[e] _U(u�[d] \P(u"

const L_Help_Help_General12_Text   = "-n     - #��c�W_��x�WY(u0R TCP RAW #��c�W"

const L_Help_Help_General13_Text   = "-o     - #��c�W^��W�raw b lpr"

const L_Help_Help_General14_Text   = "-q     - GOR
T1z��SWY(u0R TCP LPR #��c�W"

const L_Help_Help_General15_Text   = "-r     - #��c�W
T1z"

const L_Help_Help_General16_Text   = "-s     - :O
ghV
T1z"

const L_Help_Help_General17_Text   = "-t     - -��[ TCP #��c�W�vD}Ka-��["

const L_Help_Help_General18_Text   = "-u     - O(u�
T1z"

const L_Help_Help_General19_Text   = "-w     - �[�x"

const L_Help_Help_General20_Text   = "-y     - �Ԛ
T1z��Y�g_U(u�N SNMP"

const L_Help_Help_General21_Text   = "-2     - ٖ͑Y�]�}]��WY(u0R TCP LPR #��c�W0[e] h�:y_U(u�[d] h�:y\P(u"

const L_Help_Help_General22_Text   = "-?     - o�:y}T�NO(u�e�l"

const L_Help_Help_General23_Text   = "�{�O:"

const L_Help_Help_General24_Text   = "prnport -l -s server"

const L_Help_Help_General25_Text   = "prnport -d -s server -r IP_1.2.3.4"

const L_Help_Help_General26_Text   = "prnport -a -s server -r IP_1.2.3.4 -h 1.2.3.4 -o raw -n 9100"

const L_Help_Help_General27_Text   = "prnport -t -s server -r IP_1.2.3.4 -me -y public -i 1 -n 9100"

const L_Help_Help_General28_Text   = "prnport -g -s server -r IP_1.2.3.4"

const L_Help_Help_General29_Text   = "prnport -a -r IP_1.2.3.4 -h 1.2.3.4"

const L_Help_Help_General30_Text   = "�P;�:"

const L_Help_Help_General31_Text   = "
NNP�{�O\Vf�(Wc�[�v IP MO@W�S�_݈n-��[<P0"

const L_Help_Help_General32_Text   = "�Y�guP,n0R݈n�TCP #��c�W�݈n�vca(u-��[<P\TBf�e�X0"



'

' Messages to be displayed if the scripting host is not cscript

'

const L_Help_Help_Host01_Text      = "�Pc�N�x�ar�O(u CSCRIPT.EXE�(W}T�N�c:yW[CQ-N�WL�0"

const L_Help_Help_Host02_Text      = "�O�Y: CScript script.vbs arguments"

const L_Help_Help_Host03_Text      = ""

const L_Help_Help_Host04_Text      = "傁�\ CScript -��[�p�WL� .VBS �jHh�v�-��a(uz_�ˊ�WL�NR}T�N:"

const L_Help_Help_Host05_Text      = "     CScript //H:CScript //S"

const L_Help_Help_Host06_Text      = "�`�Bf�S�N(WMRb��l	g CScript �v�`b_N�WL� ""script.vbs arguments""0"



'

' General error messages

'

const L_Text_Error_General01_Text  = "!q�lzl�[ scripting host0"

const L_Text_Error_General02_Text  = "!q�lR�g}T�NR0"

const L_Text_Error_General03_Text  = "Win32 /����x"



'

' Miscellaneous messages

'

const L_Text_Msg_General01_Text    = "�]�e�X�v#��c�W"

const L_Text_Msg_General02_Text    = "!q�l*Rd�#��c�W"

const L_Text_Msg_General03_Text    = "!q�l�S�_#��c�W"

const L_Text_Msg_General04_Text    = "�]�^�z�v/�f�e�v#��c�W"

const L_Text_Msg_General05_Text    = "!q�l�^�z/�f�e#��c�W"

const L_Text_Msg_General06_Text    = "!q�lR	�#��c�W"

const L_Text_Msg_General07_Text    = "�]R	��v#��c�Wxe�v"

const L_Text_Msg_General08_Text    = "�]*Rd��v#��c�W"

const L_Text_Msg_General09_Text    = "!q�l�S�_ SWbemLocator ir�N"

const L_Text_Msg_General10_Text    = "!q�l#��}0R WMI 
g�R"





'

' Port properties

'

const L_Text_Msg_Port01_Text       = ":O
ghV
T1z"

const L_Text_Msg_Port02_Text       = "#��c�W
T1z"

const L_Text_Msg_Port03_Text       = ";N_jMO@W"

const L_Text_Msg_Port04_Text       = "�
�TS�[ RAW"

const L_Text_Msg_Port05_Text       = "�
�TS�[ LPR"

const L_Text_Msg_Port06_Text       = "#��c�W_��x"

const L_Text_Msg_Port07_Text       = "GOR"

const L_Text_Msg_Port08_Text       = "�]_U(uMOCQD}�xe"

const L_Text_Msg_Port09_Text       = "�]\P(uMOCQD}�xe"

const L_Text_Msg_Port10_Text       = "�]_U(u SNMP"

const L_Text_Msg_Port11_Text       = "�]\P(u SNMP"

const L_Text_Msg_Port12_Text       = "�Ԛ"

const L_Text_Msg_Port13_Text       = "݈n"}_"



'

' Debug messages

'

const L_Text_Dbg_Msg01_Text        = "�e�Qxe DelPort"

const L_Text_Dbg_Msg02_Text        = "�e�Qxe CreateOrSetPort"

const L_Text_Dbg_Msg03_Text        = "�e�Qxe ListPorts"

const L_Text_Dbg_Msg04_Text        = "�e�Qxe GetPort"

const L_Text_Dbg_Msg05_Text        = "�e�Qxe ParseCommandLine"



main



'

' Main execution starts here

'

sub main



    on error resume next



    dim iAction

    dim iRetval

    dim oParamDict



    '

    ' Abort if the host is not cscript

    '

    if not IsHostCscript() then



        call wscript.echo(L_Help_Help_Host01_Text & vbCRLF & L_Help_Help_Host02_Text & vbCRLF & _

                          L_Help_Help_Host03_Text & vbCRLF & L_Help_Help_Host04_Text & vbCRLF & _

                          L_Help_Help_Host05_Text & vbCRLF & L_Help_Help_Host06_Text & vbCRLF)



        wscript.quit



    end if



    set oParamDict = CreateObject("Scripting.Dictionary")



    iRetval = ParseCommandLine(iAction, oParamDict)



    if iRetval = 0 then



        select case iAction



            case kActionAdd

                iRetval = CreateOrSetPort(oParamDict)



            case kActionDelete

                iRetval = DelPort(oParamDict)



            case kActionList

                iRetval = ListPorts(oParamDict)



            case kActionGet

                iRetVal = GetPort(oParamDict)



            case kActionSet

                iRetVal = CreateOrSetPort(oParamDict)



            case else

                Usage(true)

                exit sub



        end select



    end if



end sub



'

' Delete a port

'

function DelPort(oParamDict)



    on error resume next



    DebugPrint kDebugTrace, L_Text_Dbg_Msg01_Text

    DebugPrint kDebugTrace, L_Text_Msg_Port01_Text & L_Space_Text & oParamDict(kServerName)

    DebugPrint kDebugTrace, L_Text_Msg_Port02_Text & L_Space_Text & oParamDict(kPortName)



    dim oService

    dim oPort

    dim iResult

    dim strServer

    dim strPort

    dim strUser

    dim strPassword



    iResult = kErrorFailure



    strServer   = oParamDict(kServerName)

    strPort     = oParamDict(kPortName)

    strUser     = oParamDict(kUserName)

    strPassword = oParamDict(kPassword)



    if WmiConnect(strServer, kNameSpace, strUser, strPassword, oService) then



        set oPort = oService.Get("Win32_TCPIPPrinterPort='" & strPort & "'")



    else



        DelPort = kErrorFailure



        exit function



    end if



    '

    ' Check if Get succeeded

    '

    if Err.Number = kErrorSuccess then



        '

        ' Try deleting the instance

        '

        oPort.Delete_



        if Err.Number = kErrorSuccess then



            wscript.echo L_Text_Msg_General08_Text & L_Space_Text & strPort



        else



            wscript.echo L_Text_Msg_General02_Text & L_Space_Text & L_Error_Text & L_Space_Text _

                         & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description



            '

            ' Try getting extended error information

            '

            call LastError()



        end if



    else



        wscript.echo L_Text_Msg_General02_Text & L_Space_Text & L_Error_Text & L_Space_Text _

                     & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description



        '

        ' Try getting extended error information

        '

        call LastError()



    end if



    DelPort = iResult



end function



'

' Add or update a port

'

function CreateOrSetPort(oParamDict)



    on error resume next



    dim oPort

    dim oService

    dim iResult

    dim PortType

    dim strServer

    dim strPort

    dim strUser

    dim strPassword



    DebugPrint kDebugTrace, L_Text_Dbg_Msg02_Text

    DebugPrint kDebugTrace, L_Text_Msg_Port01_Text & L_Space_Text & oParamDict.Item(kServerName)

    DebugPrint kDebugTrace, L_Text_Msg_Port02_Text & L_Space_Text & oParamDict.Item(kPortName)

    DebugPrint kDebugTrace, L_Text_Msg_Port06_Text & L_Space_Text & oParamDict.Item(kPortNumber)

    DebugPrint kDebugTrace, L_Text_Msg_Port07_Text & L_Space_Text & oParamDict.Item(kQueueName)

    DebugPrint kDebugTrace, L_Text_Msg_Port13_Text & L_Space_Text & oParamDict.Item(kSNMPDeviceIndex)

    DebugPrint kDebugTrace, L_Text_Msg_Port12_Text & L_Space_Text & oParamDict.Item(kCommunityName)

    DebugPrint kDebugTrace, L_Text_Msg_Port03_Text & L_Space_Text & oParamDict.Item(kHostAddress)



    strServer   = oParamDict(kServerName)

    strPort     = oParamDict(kPortName)

    strUser     = oParamDict(kUserName)

    strPassword = oParamDict(kPassword)



    '

    ' If the port exists, then get the settings. Later PutInstance will do an update

    '

    if WmiConnect(strServer, kNameSpace, strUser, strPassword, oService) then



        set oPort = oService.Get("Win32_TCPIPPrinterPort.Name='" & strPort & "'")



        '

        ' If get was unsuccessful then spawn a new port instance. Later PutInstance will do a create

        '

        if Err.Number <> kErrorSuccess then



            '

            ' Clear the previous error

            '

            Err.Clear



            set oPort = oService.Get("Win32_TCPIPPrinterPort").SpawnInstance_



        end if



    else



        CreateOrSetPort = kErrorFailure



        exit function



    end if



    if Err.Number <> kErrorSuccess then



        wscript.echo L_Text_Msg_General03_Text & L_Space_Text & L_Error_Text & L_Space_Text _

                     & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description



        CreateOrSetPort = kErrorFailure



        exit function



    end if



    oPort.Name          = oParamDict.Item(kPortName)

    oPort.HostAddress   = oParamDict.Item(kHostAddress)

    oPort.PortNumber    = oParamDict.Item(kPortNumber)

    oPort.SNMPEnabled   = oParamDict.Item(kSNMP)

    oPort.SNMPDevIndex  = oParamDict.Item(kSNMPDeviceIndex)

    oPort.SNMPCommunity = oParamDict.Item(kCommunityName)

    oPort.Queue         = oParamDict.Item(kQueueName)

    oPort.ByteCount     = oParamDict.Item(kDoubleSpool)



    PortType     = oParamDict.Item(kPortType)



    '

    ' Update the port object with the settings corresponding

    ' to the port type of the port to be added

    '

    select case lcase(PortType)



            case "raw"



                 oPort.Protocol      = 1



                 if Not IsNull(oPort.Queue) then



                     wscript.echo L_Error_Text & L_Colon_Text & L_Space_Text _

                     & L_Help_Help_General14_Text



                     CreateOrSetPort = kErrorFailure



                     exit function



                 end if



            case "lpr"



                 oPort.Protocol      = 2



                 if IsNull(oPort.Queue) then



                     oPort.Queue = L_LPR_Queue



                 end if



            case else



                 '

                 ' PutInstance will attempt to get the configuration of

                 ' the device based on its IP address. Those settings

                 ' will be used to add a new port

                 '

    end select



    '

    ' Try creating or updating the port

    '

    oPort.Put_(kFlagCreateOrUpdate)



    if Err.Number = kErrorSuccess then



        wscript.echo L_Text_Msg_General04_Text & L_Space_Text & oPort.Name



        iResult = kErrorSuccess



    else



        wscript.echo L_Text_Msg_General05_Text & L_Space_Text & oPort.Name & L_Space_Text _

                     & L_Error_Text & L_Space_Text & L_Hex_Text & hex(Err.Number) _

                     & L_Space_Text & Err.Description



        '

        ' Try getting extended error information

        '

        call LastError()



        iResult = kErrorFailure



    end if



    CreateOrSetPort = iResult



end function



'

' List ports on a machine.

'

function ListPorts(oParamDict)



    on error resume next



    DebugPrint kDebugTrace, L_Text_Dbg_Msg03_Text



    dim Ports

    dim oPort

    dim oService

    dim iRetval

    dim iTotal

    dim strServer

    dim strUser

    dim strPassword



    iResult = kErrorFailure



    strServer   = oParamDict(kServerName)

    strUser     = oParamDict(kUserName)

    strPassword = oParamDict(kPassword)



    if WmiConnect(strServer, kNameSpace, strUser, strPassword, oService) then



        set Ports = oService.InstancesOf("Win32_TCPIPPrinterPort")



    else



        ListPorts = kErrorFailure



        exit function



    end if



    if Err.Number <> kErrorSuccess then



        wscript.echo L_Text_Msg_General06_Text & L_Space_Text & L_Error_Text & L_Space_Text _

                     & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description



        ListPrinters = kErrorFailure



        exit function



    end if



    iTotal = 0



    for each oPort in Ports



        iTotal = iTotal + 1



        wscript.echo L_Empty_Text

        wscript.echo L_Text_Msg_Port01_Text & L_Space_Text & strServer

        wscript.echo L_Text_Msg_Port02_Text & L_Space_Text & oPort.Name

        wscript.echo L_Text_Msg_Port03_Text & L_Space_Text & oPort.HostAddress



        if oPort.Protocol = 1 then



            wscript.echo L_Text_Msg_Port04_Text

            wscript.echo L_Text_Msg_Port06_Text & L_Space_Text & oPort.PortNumber



        else



            wscript.echo L_Text_Msg_Port05_Text

            wscript.echo L_Text_Msg_Port07_Text & L_Space_Text & oPort.Queue



            if oPort.ByteCount then



                wscript.echo L_Text_Msg_Port08_Text



            else



                wscript.echo L_Text_Msg_Port09_Text



            end if



        end if



        if oPort.SNMPEnabled then



            wscript.echo L_Text_Msg_Port10_Text

            wscript.echo L_Text_Msg_Port12_Text & L_Space_Text & oPort.SNMPCommunity

            wscript.echo L_Text_Msg_Port13_Text & L_Space_Text & oPort.SNMPDevIndex



        else



            wscript.echo L_Text_Msg_Port11_Text



        end if



        Err.Clear



    next



    wscript.echo L_Empty_Text

    wscript.echo L_Text_Msg_General07_Text & L_Space_Text & iTotal



    ListPorts = kErrorSuccess



end function



'

' Gets the configuration of a port

'

function GetPort(oParamDict)



    on error resume next



    DebugPrint kDebugTrace, L_Text_Dbg_Msg04_Text

    DebugPrint kDebugTrace, L_Text_Msg_Port01_Text & L_Space_Text & oParamDict(kServerName)

    DebugPrint kDebugTrace, L_Text_Msg_Port02_Text & L_Space_Text & oParamDict(kPortName)



    dim oService

    dim oPort

    dim iResult

    dim strServer

    dim strPort

    dim strUser

    dim strPassword



    iResult = kErrorFailure



    strServer   = oParamDict(kServerName)

    strPort     = oParamDict(kPortName)

    strUser     = oParamDict(kUserName)

    strPassword = oParamDict(kPassword)



    if WmiConnect(strServer, kNameSpace, strUser, strPassword, oService) then



        set oPort = oService.Get("Win32_TCPIPPrinterPort.Name='" & strPort & "'")



    else



        GetPort = kErrorFailure



        exit function



    end if



    if Err.Number = kErrorSuccess then



        wscript.echo L_Empty_Text

        wscript.echo L_Text_Msg_Port01_Text & L_Space_Text & strServer

        wscript.echo L_Text_Msg_Port02_Text & L_Space_Text & oPort.Name

        wscript.echo L_Text_Msg_Port03_Text & L_Space_Text & oPort.HostAddress



        if oPort.Protocol = 1 then



            wscript.echo L_Text_Msg_Port04_Text

            wscript.echo L_Text_Msg_Port06_Text & L_Space_Text & oPort.PortNumber



        else



            wscript.echo L_Text_Msg_Port05_Text

            wscript.echo L_Text_Msg_Port07_Text & L_Space_Text & oPort.Queue



            if oPort.ByteCount then



                wscript.echo L_Text_Msg_Port08_Text



            else



                wscript.echo L_Text_Msg_Port09_Text



            end if



        end if



        if oPort.SNMPEnabled then



            wscript.echo L_Text_Msg_Port10_Text

            wscript.echo L_Text_Msg_Port12_Text & L_Space_Text & oPort.SNMPCommunity

            wscript.echo L_Text_Msg_Port13_Text & L_Space_Text & oPort.SNMPDevIndex



        else



            wscript.echo L_Text_Msg_Port11_Text



        end if



        iResult = kErrorSuccess



    else



        wscript.echo L_Text_Msg_General03_Text & L_Space_Text & L_Error_Text & L_Space_Text _

                     & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description



        '

        ' Try getting extended error information

        '

        call LastError()



    end if



    GetPort = iResult



end function



'

' Debug display helper function

'

sub DebugPrint(uFlags, strString)



    if gDebugFlag = true then



        if uFlags = kDebugTrace then



            wscript.echo L_Debug_Text & L_Space_Text & strString



        end if



        if uFlags = kDebugError then



            if Err <> 0 then



                wscript.echo L_Debug_Text & L_Space_Text & strString & L_Space_Text _

                             & L_Error_Text & L_Space_Text & L_Hex_Text & hex(Err.Number) _

                             & L_Space_Text & Err.Description



            end if



        end if



    end if



end sub



'

' Parse the command line into its components

'

function ParseCommandLine(iAction, oParamDict)



    on error resume next



    DebugPrint kDebugTrace, L_Text_Dbg_Msg05_Text



    dim oArgs

    dim iIndex



    iAction = kActionUnknown



    set oArgs = Wscript.Arguments



    while iIndex < oArgs.Count



        select case oArgs(iIndex)



            case "-g"

                iAction = kActionGet



            case "-t"

                iAction = kActionSet



            case "-a"

                iAction = kActionAdd



            case "-d"

                iAction = kActionDelete



            case "-l"

                iAction = kActionList



            case "-2e"

                oParamDict.Add kDoubleSpool, true



            case "-2d"

                oParamDict.Add kDoubleSpool, false



            case "-s"

                iIndex = iIndex + 1

                oParamDict.Add kServerName, RemoveBackslashes(oArgs(iIndex))



            case "-u"

                iIndex = iIndex + 1

                oParamDict.Add kUserName, oArgs(iIndex)



            case "-w"

                iIndex = iIndex + 1

                oParamDict.Add kPassword, oArgs(iIndex)



            case "-n"

                iIndex = iIndex + 1

                oParamDict.Add kPortNumber, oArgs(iIndex)



            case "-r"

                iIndex = iIndex + 1

                oParamDict.Add kPortName, oArgs(iIndex)



            case "-o"

                iIndex = iIndex + 1

                oParamDict.Add kPortType, oArgs(iIndex)



            case "-h"

                iIndex = iIndex + 1

                oParamDict.Add kHostAddress, oArgs(iIndex)



            case "-q"

                iIndex = iIndex + 1

                oParamDict.Add kQueueName, oArgs(iIndex)



            case "-i"

                iIndex = iIndex + 1

                oParamDict.Add kSNMPDeviceIndex, oArgs(iIndex)



            case "-y"

                iIndex = iIndex + 1

                oParamDict.Add kCommunityName, oArgs(iIndex)



            case "-me"

                oParamDict.Add kSNMP, true



            case "-md"

                oParamDict.Add kSNMP, false



            case "-?"

                Usage(True)

                exit function



            case else

                Usage(True)

                exit function



        end select



        iIndex = iIndex + 1



    wend



    if Err = kErrorSuccess then



        ParseCommandLine = kErrorSuccess



    else



        wscript.echo L_Text_Error_General02_Text & L_Space_Text & L_Error_Text & L_Space_Text _

                     & L_Hex_Text & hex(Err.Number) & L_Space_text & Err.Description





        ParseCommandLine = kErrorFailure



    end if



end  function



'

' Display command usage.

'

sub Usage(bExit)



    wscript.echo L_Help_Help_General01_Text

    wscript.echo L_Help_Help_General02_Text

    wscript.echo L_Help_Help_General03_Text

    wscript.echo L_Help_Help_General04_Text

    wscript.echo L_Help_Help_General05_Text

    wscript.echo L_Help_Help_General06_Text

    wscript.echo L_Help_Help_General07_Text

    wscript.echo L_Help_Help_General08_Text

    wscript.echo L_Help_Help_General09_Text

    wscript.echo L_Help_Help_General10_Text

    wscript.echo L_Help_Help_General11_Text

    wscript.echo L_Help_Help_General12_Text

    wscript.echo L_Help_Help_General13_Text

    wscript.echo L_Help_Help_General14_Text

    wscript.echo L_Help_Help_General15_Text

    wscript.echo L_Help_Help_General16_Text

    wscript.echo L_Help_Help_General17_Text

    wscript.echo L_Help_Help_General18_Text

    wscript.echo L_Help_Help_General19_Text

    wscript.echo L_Help_Help_General20_Text

    wscript.echo L_Help_Help_General21_Text

    wscript.echo L_Help_Help_General22_Text

    wscript.echo L_Empty_Text

    wscript.echo L_Help_Help_General23_Text

    wscript.echo L_Help_Help_General24_Text

    wscript.echo L_Help_Help_General25_Text

    wscript.echo L_Help_Help_General26_Text

    wscript.echo L_Help_Help_General27_Text

    wscript.echo L_Help_Help_General28_Text

    wscript.echo L_Help_Help_General29_Text

    wscript.echo L_Empty_Text

    wscript.echo L_Help_Help_General30_Text

    wscript.echo L_Help_Help_General31_Text

    wscript.echo L_Help_Help_General32_Text



    if bExit then



        wscript.quit(1)



    end if



end sub



'

' Determines which program is being used to run this script.

' Returns true if the script host is cscript.exe

'

function IsHostCscript()



    on error resume next



    dim strFullName

    dim strCommand

    dim i, j

    dim bReturn



    bReturn = false



    strFullName = WScript.FullName



    i = InStr(1, strFullName, ".exe", 1)



    if i <> 0 then



        j = InStrRev(strFullName, "\", i, 1)



        if j <> 0 then



            strCommand = Mid(strFullName, j+1, i-j-1)



            if LCase(strCommand) = "cscript" then



                bReturn = true



            end if



        end if



    end if



    if Err <> 0 then



        wscript.echo L_Text_Error_General01_Text & L_Space_Text & L_Error_Text & L_Space_Text _

                     & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description



    end if



    IsHostCscript = bReturn



end function



'

' Retrieves extended information about the last error that occurred

' during a WBEM operation. The methods that set an SWbemLastError

' object are GetObject, PutInstance, DeleteInstance

'

sub LastError()



    on error resume next



    dim oError



    set oError = CreateObject("WbemScripting.SWbemLastError")



    if Err = kErrorSuccess then



        wscript.echo L_Operation_Text            & L_Space_Text & oError.Operation

        wscript.echo L_Provider_Text             & L_Space_Text & oError.ProviderName

        wscript.echo L_Description_Text          & L_Space_Text & oError.Description

        wscript.echo L_Text_Error_General04_Text & L_Space_Text & oError.StatusCode



    end if



end sub



'

' Connects to the WMI service on a server. oService is returned as a service

' object (SWbemServices)

'

function WmiConnect(strServer, strNameSpace, strUser, strPassword, oService)



   on error resume next



   dim oLocator

   dim bResult



   oService = null



   bResult  = false



   set oLocator = CreateObject("WbemScripting.SWbemLocator")



   if Err = kErrorSuccess then



      set oService = oLocator.ConnectServer(strServer, strNameSpace, strUser, strPassword)



      if Err = kErrorSuccess then



          bResult = true



          oService.Security_.impersonationlevel = 3



          '

          ' Required to perform administrative tasks on the spooler service

          '

          oService.Security_.Privileges.AddAsString "SeLoadDriverPrivilege"



          Err.Clear



      else



          wscript.echo L_Text_Msg_General10_Text & L_Space_Text & L_Error_Text _

                       & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text _

                       & Err.Description



      end if



   else



       wscript.echo L_Text_Msg_General09_Text & L_Space_Text & L_Error_Text _

                    & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text _

                    & Err.Description



   end if



   WmiConnect = bResult



end function



'

' Remove leading "\\" from server name

'

function RemoveBackslashes(strServer)



    dim strRet



    strRet = strServer



    if Left(strServer, 2) = "\\" and Len(strServer) > 2 then



        strRet = Mid(strServer, 3)



    end if



    RemoveBackslashes = strRet



end function