Sub Main
Dim strInputFile, strOutputFile, strInputDelim, strOutputDelim
Dim lngSkip, lngToken, lngLineNo
Dim objInputTS, objOutputTS, strComputer, objSystems, objSystem
? BEGIN CALLOUT A
With WScript.Arguments
? BEGIN COMMENT
? Если в командной строке указан ключ /? или количество аргументов меньше 2,
? показать сообщение об использовании сценария.
? END COMMENT
If.Named.Exists(«?») Then Usage
If.Unnamed.Count < 2 Then Usage
? BEGIN COMMENT
? Имена входного и выходного файлов являются двумя первыми неименованными
? аргументами командной строки.
? END COMMENT
strInputFile =.Unnamed(0)
strOutputFile =.Unnamed(1)
? BEGIN COMMENT
? если указаны ключи /I и/или /O, первый символ используется в качестве разделителя.
? END COMMENT
strInputDelim = Left(.Named(«I»), 1)
If strInputDelim = «» Then strInputDelim = vbTab
strOutputDelim = Left(.Named(«O»), 1)
If strOutputDelim = «» Then strOutputDelim = vbTab
? BEGIN COMMENT
? Если ключ /S указывает нормальное число, используем его, иначе 0.
? END COMMENT
lngSkip = GetNumber(.Named(«S»))
? BEGIN COMMENT
? Если ключ /T указывает нормальное число, используем его, иначе 0.
? END COMMENT
lngToken = GetNumber(.Named(«T»))
If lngToken = 0 Then lngToken = 1
End With
? END CALLOUT A
Set g_objFSO = CreateObject(«Scripting.FileSystemObject»)
On Error Resume Next
? BEGIN COMMENT
? Создание объекта TextStrean для чтения входного файла. В случае
? возникновения ошибки завершить исполнение сценария.
? END COMMENT
Set objInputTS = g_objFSO.OpenTextFile(strInputFile, FOR_READING)
If Err Then Die «Error opening input file: « _
& Err.Description & « (0x» & Hex(Err) & «)», Err
? BEGIN COMMENT
? Если выходной файл уже существует, завершение сценария с сообщением об ошибке.
? END COMMENT
If g_objFSO.FileExists(strOutputFile) Then _
Die «Output file already exists (0x» & Hex(ERROR_ALREADY_EXISTS) & «)», _
ERROR_ALREADY_EXISTS
? BEGIN COMMENT
? Создание объекта TextStrean для записи выходного файла. В случае
? возникновения ошибки завершить исполнение сценария.
? END COMMENT
Set objOutputTS = g_objFSO.OpenTextFile(strOutputFile, FOR_WRITING, True)
If Err Then Die «Error opening output file: « _
& Err.Description & « (0x» & Hex(Err) & «)», Err
? BEGIN COMMENT
? Игнорировать первые несколько строк входного файла,
? число пропускаемых строк определено ключом /S
? END COMMENT
For lngLineNo = 1 To lngSkip: objInputTS.SkipLine: Next
? BEGIN COMMENT
? Если указан ключ /N, не записываем заголовок в файл результата.
? END COMMENT
If Not WScript.Arguments.Named.Exists(«N») Then _
objOutputTS.WriteLine «Name» & strOutputDelim & «Description» _
& strOutputDelim & «OS» & strOutputDelim & «ServicePack» _
& strOutputDelim & «Error»
Do While Not objInputTS.AtEndOfStream
? BEGIN CALLOUT B
strComputer = GetToken(objInputTS.ReadLine, strInputDelim, lngToken)
? END CALLOUT B
If Len(strComputer) > 0 Then
? BEGIN COMMENT
? Опрос удаленного компьютера командой Ping.
? END COMMENT
? BEGIN CALLOUT C
If Not Alive(strComputer) Then
? END CALLOUT C
objOutputTS.WriteLine strComputer & String(4, strOutputDelim) & «1»
Else
Set objSystems = GetObject(«WinMgmts:{impersonationlevel=impersonate}!//» _
& strComputer & «/root/CIMV2»).InstancesOf(«Win32_OperatingSystem»)
If Err Then
? BEGIN COMMENT
? Выдать имя компьютера и код ошибки.
? END COMMENT
objOutputTS.WriteLine strComputer & String(4, strOutputDelim) & Hex(Err)
Else
For Each objSystem In objSystems
objOutputTS.WriteLine objSystem.CSName & strOutputDelim _
& objSystem.Description & strOutputDelim _
& objSystem.Caption & strOutputDelim _
& CStr(objSystem.ServicePackMajorVersion) & strOutputDelim _
& Hex(Err)
Next
End If
Err.Clear
End If
End If
Loop
? BEGIN COMMENT
? Закрыть файлы.
? END COMMENT
objInputTS.Close
objOutputTS.Close
End Sub