'----------------------------------------------------------------------
'
' Copyright (c) Microsoft Corporation. All rights reserved.
'
' Abstract:
' prnport.vbs - Port script for WMI on Whistler
' 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_Error_Text = "Ошибка"
const L_Success_Text = "Успех"
const L_Failed_Text = "неудачно"
const L_Hex_Text = "0x"
const L_Printer_Text = "Принтер"
const L_Operation_Text = "Операция"
const L_Provider_Text = "Поставщик"
const L_Description_Text = "Описание"
const L_Debug_Text = "Отладка:"
'
' General usage messages
'
const L_Help_Help_General01_Text = "Использование: prnport [-adlgt?] [-r порт][-s сервер][-u имя пользователя][-w пароль]"
const L_Help_Help_General02_Text = " [-o raw|lpr][-h адрес узла][-q очередь][-n номер]"
const L_Help_Help_General03_Text = " [-me | -md ][-i SNMP индекс][-y community][-2e | -2d]"
const L_Help_Help_General04_Text = "Аргументы:"
const L_Help_Help_General05_Text = "-a - добавление порта"
const L_Help_Help_General06_Text = "-d - удаление указанного порта"
const L_Help_Help_General07_Text = "-g - получить настройку TCP -порта"
const L_Help_Help_General08_Text = "-h - IP-адрес устройства"
const L_Help_Help_General09_Text = "-i - SNMP-инднекс, если SNMP запрещен"
const L_Help_Help_General10_Text = "-l - перечисление всех TCP-портов"
const L_Help_Help_General11_Text = "-m - SNMP-тип, [e] разрешен, [d] запрещен"
const L_Help_Help_General12_Text = "-n - номер порта, применяется для TCP RAW-портов"
const L_Help_Help_General13_Text = "-o - тип потра. RAW или LPR"
const L_Help_Help_General14_Text = "-q - имя очереди, применяется для TCP LPR -портов"
const L_Help_Help_General15_Text = "-r - имя порта"
const L_Help_Help_General16_Text = "-s - имя сервера"
const L_Help_Help_General17_Text = "-t - настройка для TCP-портов"
const L_Help_Help_General18_Text = "-u - имя пользователя"
const L_Help_Help_General19_Text = "-w - пароль"
const L_Help_Help_General20_Text = "-y - имя community, если разрешен SNMP"
const L_Help_Help_General21_Text = "-2 - двойная очередь, применима для TCP LPR-портов. [e] разрешена. [d] не разрешен"
const L_Help_Help_General22_Text = "-? - отобразить использование команды"
const L_Help_Help_General23_Text = "Примеры:"
const L_Help_Help_General24_Text = "prnport -l -s сервер"
const L_Help_Help_General25_Text = "prnport -d -s сервер -r IP_1.2.3.4"
const L_Help_Help_General26_Text = "prnport -a -s сервер -r IP_1.2.3.4 -h 1.2.3.4 -o RAW -n 9100"
const L_Help_Help_General27_Text = "prnport -t -s сервер -r IP_1.2.3.4 -мой -y общественный -i 1 -n 9100"
const L_Help_Help_General28_Text = "prnport -g -s сервер -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 = "Примечание:"
const L_Help_Help_General31_Text = "Последний пример будет стараться получить данные о настройке устройства по указанному IP-адресу."
const L_Help_Help_General32_Text = "Если устройство обнаружено, то TCP-порт добавлен к устройству с предпочитаемыми параметрами."
'
' Messages to be displayed if the scripting host is not cscript
'
const L_Help_Help_Host01_Text = "Запустите данный скрипт с использованием CScript."
const L_Help_Help_Host02_Text = "Можно достичь"
const L_Help_Help_Host03_Text = "1. Использование ""CScript script.vbs arguments"" или"
const L_Help_Help_Host04_Text = "2. Замена указанного узла Windows на CScript"
const L_Help_Help_Host05_Text = " использование ""CScript //H:CScript //S"" и запуск скрипта"
const L_Help_Help_Host06_Text = " ""script.vbs arguments""."
'
' General error messages
'
const L_Text_Error_General01_Text = "Не удалось определить указанный узел."
const L_Text_Error_General02_Text = "Не удается обработать командную строку."
const L_Text_Error_General03_Text = "код ошибки Win32"
'
' Miscellaneous messages
'
const L_Text_Msg_General01_Text = "Добавленный порт"
const L_Text_Msg_General02_Text = "Не удается удалить порт"
const L_Text_Msg_General03_Text = "Не удается получить порт"
const L_Text_Msg_General04_Text = "Созданный или обновленный порт"
const L_Text_Msg_General05_Text = "Не удается создать или обновить порт"
const L_Text_Msg_General06_Text = "Не удается пронумеровать порт"
const L_Text_Msg_General07_Text = "Число пронумерованных портов"
const L_Text_Msg_General08_Text = "Удалить порт"
const L_Text_Msg_General09_Text = "Не удается получить объект SWbemLocator"
const L_Text_Msg_General10_Text = "Не удалось подключиться к WMI-службе"
'
' Port properties
'
const L_Text_Msg_Port01_Text = "Имя сервера"
const L_Text_Msg_Port02_Text = "Имя порта"
const L_Text_Msg_Port03_Text = "Адрес узла"
const L_Text_Msg_Port04_Text = "Протокол RAW"
const L_Text_Msg_Port05_Text = "Протокол LPR"
const L_Text_Msg_Port06_Text = "Порт"
const L_Text_Msg_Port07_Text = "Очередь"
const L_Text_Msg_Port08_Text = "Разрешен подсчет байт"
const L_Text_Msg_Port09_Text = "Не разрешен подсчет байт"
const L_Text_Msg_Port10_Text = "SNMP разрешен"
const L_Text_Msg_Port11_Text = "SNMP запрещен"
const L_Text_Msg_Port12_Text = "Сообщество"
const L_Text_Msg_Port13_Text = "Индекс устройства"
'
' Debug messages
'
const L_Text_Dbg_Msg01_Text = "Выполняется DelPort"
const L_Text_Dbg_Msg02_Text = "Выполняется CreateOrSetPort"
const L_Text_Dbg_Msg03_Text = "Выполняется ListPorts"
const L_Text_Dbg_Msg04_Text = "Выполняется GetPort"
const L_Text_Dbg_Msg05_Text = "В действии 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 spwan 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)
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
case "lpr"
oPort.Protocol = 2
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
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)
'
' 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_Port08_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 occured
' 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