Иллюстрированный самоучитель по автоматической установке Windows

Сценарий FinalSetup.vbs

Если Вы предпочитаете работать с командными файлами, то останетесь довольны и технологией сервера сценариев Windows (WSH). WSH – это обработчик сценариев (интерпретатор), являющийся составной частью операционных систем Windows 2000 и Windows 98. При необходимости, можно установить его на ОС Windows NT 4.0 и Windows 95. Интерпретатор WSH поддерживает команды WSH, а также языки сценариев VBScript и JScript (версию языка JavaScript компании Майкрософт).

Сценарии WSH используются для работы с файловой системой, автоматизации настольных приложений, управления системой Microsoft SQL Server и для многих других целей. Изучение этой технологии не составит большого труда, ведь все, что Вам потребуется, это текстовый редактор и установленный интерпретатор WSH. Кроме этого, посетите веб-узел компании Майкрософт, посвященный технологиям сценариев в среде Windows http://msdn.microsoft.com/scripting (EN), где Вы найдете массу полезной информации, доступной для загрузки. Также ознакомьтесь со статьями, предложенными в разделе "Связанные ресурсы" этой статьи.

Листинг 1 демонстрирует сценарий FinalSetup.vbs, для написания которого я использовал технологии WSH и VBScript. Вы наверняка заметите, что мне нравится "украшать" код многочисленными пробелами и добавлять достаточно комментариев. К слову сказать, комментарии упрощают чтение сценария и помогут вспомнить назначение той или иной строки, если открыть сценарий спустя месяцы после его написания. Во многих случаях я оставляю закомментированным даже отладочный код, который добавляю в процессе написания и проверки сценария.

Листинг 1 – Сценарий FinalSetup.vbs

'**********************************************************************
' НАЗВАНИЕ: FinalSetup.VBS Ver 2.0
' НАЗНАЧЕНИЕ: для добавления глобальных групп домена к локальным группам
' после подключения компьютера к домену (образ WIN 2000).
'**********************************************************************
OPTION EXPLICIT 'Убедимся, что все переменные объявлены.
ON ERROR RESUME NEXT 'Сценарий продолжит работу в случае внутренней ошибки.
'***************************************************
'Объявляем переменные.
'***************************************************
Dim oGroup 'Объект ADSI созданный с помощью функции GetObject()
Dim oWshShell 'Объект Shell для запуска исполняемого файла (smsman.exe)
Dim sInDomain 'Используется для проверки членства в домене
Dim sCompName 'Имя локального компьютера
Dim oWshNet 'Объект WshNetwork
Dim sUser 'Имя пользователя для проверки на ошибки
Dim sMember 'Для проверки членства в группе (0 или 1)
'********************************************************
'Объявляем константы.
'********************************************************
Const GLOBAL_GROUP = "WEBDEV" 'Глобальная группа, добавляемая к локальной группе
Const LOCAL_GROUP = "Administrators" 'Имя локальной группы
Const DOMAIN = "GONDOR" 'Имя домена
'********************************************************
'Создаем объекты.
'********************************************************
'Создаем объект network.
Set oWshNet = Wscript.CreateObject("Wscript.Network")
'Создаем объект shell.
Set oWshShell = Wscript.CreateObject("Wscript.Shell")
'***************************************************
'Получаем локальную информацию.
'***************************************************
sUser = oWshNet.Username 'Получаем имя входа текущего пользователя.
SCompName = oWshNet.Computername 'Получаем имя компьютера.
'***************************************************
'Убедимся, что вошедший пользователь является Администратором, если это не так, завершаем работу сценария.
'***************************************************
IF UCASE(sUser) <> "ADMINISTRATOR" THEN
Wscript.Echo "You must be logged in as ""ADMINISTRATOR"" to run this " & _
"script! " & vbCRLF & vbCRLF & "Log off and login as " & _
"""ADMINISTRATOR"" to the local machine " & "(" & sCompName & ")." & _
vbCRLF & vbCRLF & "After logging in as ADMINISTRATOR, run the " & _
"C:\WINNT\SYSTEM32\FinalSetup.vbs script again" & _
" to finish the installation."
Wscript.Quit
END IF
'***************************************************
'Убедимся, что машина была добавлена к домену;
'в противном случае завершаем работу и выводим сообщение.
'***************************************************
'Получаем значение ключа из реестра.
sInDomain = oWshShell.RegRead("HKLM\SOFTWARE\" & _
"Microsoft\Windows NT\CurrentVersion\Winlogon\DomainCache\GONDOR")
IF sInDomain = "" THEN
Wscript.Echo "The Computer does not belong to " & DOMAIN & " domain!"
Wscript.quit
END IF
IF ERR.NUMBER = -2147024894 THEN
Wscript.Echo "The Computer does not belong to " & DOMAIN & " domain!"
Wscript.quit
END IF
'********************************************************
'Обновляем членство в группе.
'********************************************************
Set oGroup = GetObject("WinNT://" & sCompName & "/" & LOCAL_GROUP & ",group")
sMember = oGroup.IsMember("WinNT://" & DOMAIN & "/" & GLOBAL_GROUP)
'если является членом, то sMember будет -1, иначе 0.
IF sMember = 0 THEN
oGroup.add("WinNT://" & DOMAIN & "/" & GLOBAL_GROUP)
sMember = oGroup.IsMember("WinNT://" & DOMAIN & "/" & GLOBAL_GROUP)
'Если является членом, то sMember будет -1, иначе 0.
IF sMember = -1 THEN
oWshShell.Popup "The " & GLOBAL_GROUP & " global group has been " & _
"successfully added to the " & LOCAL_GROUP & " local group.", _
5, "Local Group Modified", 064
End IF
ELSE
oWshShell.Popup "The " & GLOBAL_GROUP & " global group is already" & _
" a member of the " & LOCAL_GROUP & " local group.", 5, _
"Global Group Exists" ,064
End IF
'********************************************************
'Запускаем smsman.exe для установки SMS 2.0.
'********************************************************
oWshShell.Popup "SMS 2.0 will now be installed. Please wait while" & _
" program is loading..." & vbCRLF & vbCRLF & "The SMS Client" & _
" Installation will take approximately 5 minutes to complete" _
, 10, "SMS 2.0 Installation", 064
oWshNet.MapNetworkDrive "N:", "\\SMSCPS1\SMSLOGON", , "guest", ""
oWshShell.Run "N:\x86.bin\00000409\SMSMAN.EXE", ,TRUE
oWshNet.RemoveNetworkDrive "N:"
'********************************************************
'Выводим сообщение об окончании сценария и завершаем работу.
'********************************************************
MsgBox "This portion of the setup has been completed. " & _
"Logoff and login as the user and setup the printers."
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.