Войти

Показать полную графическую версию : WDS discover image + автоматическая установка


aldar
05-07-2013, 06:34
Здравствуйте!

пролог: по этой (http://forum.oszone.net/thread-132301.html) статье сделал эталонный образ системы. По циклам этих (http://www.oszone.net/8662/) статей сделал файл ответов и интеграцию драйверов. Вроде всё хорошо но возникла потребность включать комьютеры в домен. Для этого развернул WDSServer и сразу натолкнулся на проблему: - клиентский компьютер и WDSServer в разных DHCP подсетях. Нашел решение использовать discover image WDSServer'a. То есть создал boot.wim, который находит WDSServer, запихал его в стандартный образ windows в папку sources вместо стандартного boot.wim.

Проблема: не знаю как использовать <?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
<settings pass="windowsPE">
<component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SetupUILanguage>
<UILanguage>en-US</UILanguage>
</SetupUILanguage>
<InputLocale>en-US</InputLocale>
<SystemLocale>en-US</SystemLocale>
<UILanguage>en-US</UILanguage>
<UserLocale>en-US</UserLocale>
</component>
<component name="Microsoft-Windows-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ImageInstall>
<OSImage>
<InstallFrom>
<MetaData wcm:action="add">
<Key>/IMAGE/INDEX</Key>
<Value>1</Value>
</MetaData>
</InstallFrom>
</OSImage>
</ImageInstall>
<UserData>
<ProductKey>
<Key>*********************</Key>
<WillShowUI>OnError</WillShowUI>
</ProductKey>
<AcceptEula>true</AcceptEula>
<FullName></FullName>
<Organization>имя организации</Organization>
</UserData>
</component>
</settings>
<settings pass="specialize">
<component name="Microsoft-Windows-Security-Licensing-SLC-UX" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SkipAutoActivation>true</SkipAutoActivation>
</component>
<component name="Microsoft-Windows-UnattendedJoin" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Identification>
<Credentials>
<Domain>имя домена</Domain>
<Password>%USERPASSWORD%</Password>
<Username>%USERNAME%</Username>
</Credentials>
<JoinDomain>имя домена</JoinDomain>
<UnsecureJoin>true</UnsecureJoin>
</Identification>
</component>
</settings>
<settings pass="oobeSystem">
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<AutoLogon>
<Enabled>true</Enabled>
<Username>Administrator</Username>
<LogonCount>2</LogonCount>
</AutoLogon>
<OOBE>
<SkipUserOOBE>true</SkipUserOOBE>
<SkipMachineOOBE>true</SkipMachineOOBE>
<ProtectYourPC>1</ProtectYourPC>
<NetworkLocation>Work</NetworkLocation>
<HideEULAPage>true</HideEULAPage>
<HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
</OOBE>
<UserAccounts>
<DomainAccounts>
<DomainAccountList wcm:action="add">
<Domain>имя домена</Domain>
<DomainAccount wcm:action="add">
<Group>Administrators;Users</Group>
<Name>Domain Admins</Name>
</DomainAccount>
</DomainAccountList>
</DomainAccounts>
</UserAccounts>
</component>
<component name="Microsoft-Windows-International-Core" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<InputLocale>EN-US</InputLocale>
<SystemLocale>EN-US</SystemLocale>
<UILanguage>EN-US</UILanguage>
<UserLocale>EN-US</UserLocale>
</component>
</settings>
<cpi:offlineImage cpi:source="wim:c:/7work/dvd/sources/install.wim#Windows 7 ULTIMATE" xmlns:cpi="urn:schemas-microsoft-com:cpi" />
</unattend>
По идее их должно быть два: один для boot.wim, второй для install.wim. Не знаю как его правильней разделить, и после деления куда их засовывать? Есть варианты:
в корне диска
в диске -> папка sources http://winitpro.ru/wp-content/uploads/2011/04/image102.pngt http://winitpro.ru/wp-content/uploads/2011/04/image108.png
Правильно ли я ввожу в домен?

aldar
13-08-2013, 06:59
На самом деле для ввода в домен не обязательно иметь WDS сервер.
Нужно просто в файл ответов добавить вот такой код:<component name="Microsoft-Windows-UnattendedJoin" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Identification>
<Credentials>
<Domain>имя домена</Domain>
<Password>пароль пользователя</Password>
<Username>имя пользователя</Username>
</Credentials>
<JoinDomain>имя домена.com</JoinDomain>
<UnsecureJoin>false</UnsecureJoin>
<DebugJoin>true</DebugJoin>
</Identification>
</component> Где имя и пароль пользователя должны быть администраторской учетки или иметь права добавления компьютера в домен.

Но вот появился другой вопрос, как сделать так чтобы программа установки запрашивала имя компьютера. Пытался сделать по этой статье (http://technet.microsoft.com/ru-ru/library/cc732572%28v=ws.10%29.aspx). То есть я загрузил файлы Winpeshi.ini и domainOU.vbs добавил в нужные папки в boot.wim. Но при установке ничего не спрашивает. Как сделать чтобы спрашивало? Можете дать какой-нибудь альтернативный вариант или более подробную статью. И если спросит, то на каком этапе установке будет српашивать?

sattva
24-08-2013, 22:49
Пытался сделать по этой статье.

Как всегда Microsoft - напортачил...
вот правильный синтаксис domainOU.vbs


Option Explicit
Dim computerName, OU, unattendFile, WshShell, result, fso, unattendFileObject, strContents
'----------------------------------------------------------------------
unattendFile = "C:\Windows\Panther\unattend.xml"

' параметры, заданные пользователем '----------------------------------------------------------------------

Set WshShell = WScript.CreateObject("WScript.Shell")

dim answer
do while answer <> vbYes
computerName = InputBox("Введите имя компьютера", "Имя компьютера")
OU = InputBox("Введите различающееся имя нужного подразделения", "Подразделение")
answer = MsgBox("Все ли правильно?" & vbCrLf & vbCrLF & "Name: " & computerName & vbCrLF & "OU: " & OU, vbYesNo, "Сведения об учетной записи компьютера")
loop

WshShell.Run "%SYSTEMDRIVE%\sources\setup.exe /wds /noreboot", 0, true

Set fso = CreateObject("Scripting.FileSystemObject")

if fso.FileExists(unattendFile) = false then
wscript.echo "Не удается найти файл автоматической установки"
else 'Чтение файла автоматической установки и замена соответствующих переменных

Set unattendFileObject = fso.OpenTextFile(unattendFile, 1)

strContents = unattendFileObject.ReadAll

strContents = Replace(strContents, "%OU%", OU)
strContents = Replace(strContents, "%COMPUTERNAME%", computerName)
unattendFileObject.Close

'Запись обновленного содержимого в файл автоматической установки
Set unattendFileObject = fso.OpenTextFile(unattendFile, 2)
unattendFileObject.Write(strContents)
unattendFileObject.Close

End If

sattva
25-08-2013, 01:44
Мой вариант:


Option Explicit
Dim answer, answer2, answer3, answer4, answer5, answer6, computerName, domainAdminPass, domainName, domainAdminUsername, RegisteredOrganization, OU, unattendFile, WshShell, fso, unattendFileObject, strContents

unattendFile = "C:\Windows\Panther\unattend.xml"

Set WshShell = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")

Do While answer <> vbYes
computerName = InputBox("Введите имя компьютера :", "Computer Name")
answer = MsgBox("correct?" & vbCrLf & "Computer Name: " & computerName, vbYesNo, "Name")
Loop

Do While answer6 <> vbYes
OU = InputBox("Введите различающееся имя нужного подразделения(OU=MyOU,DC=Domain,DC=com) :", "Подразделение")
answer6 = MsgBox("correct?" & vbCrLf & "различающееся имя нужного подразделения(OU=MyOU,DC=Domain,DC=com): " & OU, vbYesNo, "OU")
Loop

Do While answer4 <> vbYes
domainName = InputBox("Введите имя домена :", "Domain")
answer4 = MsgBox("correct?" & vbCrLf & "Domaine : " & domainName, vbYesNo, "Domain")
Loop

Do While answer3 <> vbYes
domainAdminUsername = InputBox("Пользоваель to join domain :", "User Name")
answer3 = MsgBox("correct?" & vbCrLf & "user : " & domainAdminUsername, vbYesNo, "username")
Loop

Do While answer2 <> vbYes
domainAdminPass = InputBox("Пароль to join domain :", "Domain Admin Password")
answer2 = MsgBox("correct?" & vbCrLf & "Domain Admin Password: " & domainAdminPass, vbYesNo, "Password")
Loop

Do While answer5 <> vbYes
RegisteredOrganization = InputBox("Организация :", "Название организации")
answer5 = MsgBox("correct?" & vbCrLf & "Название организации: " & RegisteredOrganization, vbYesNo, "RegisteredOrganization")
Loop

WshShell.Run "%SYSTEMDRIVE%\sources\setup.exe /noreboot", 0, true

If fso.FileExists(unattendFile) = False Then
wscript.echo "Не удается найти файл автоматической установки"
Else
'Чтение файла автоматической установки и замена соответствующих переменных
Set unattendFileObject = fso.OpenTextFile(unattendFile, 1)
strContents = unattendFileObject.ReadAll
strContents = Replace(strContents, "ReplaceMe1", computerName)
strContents = Replace(strContents, "ReplaceMe6", OU)
strContents = Replace(strContents, "ReplaceMe2", domainAdminPass)
strContents = Replace(strContents, "ReplaceMe3", domainAdminUsername & "@" & domainName)
strContents = Replace(strContents, "ReplaceMe4", domainName)
strContents = Replace(strContents, "ReplaceMe5", RegisteredOrganization)
unattendFileObject.Close

'Запись обновленного содержимого в файл автоматической установки
Set unattendFileObject = fso.OpenTextFile(unattendFile, 2)
unattendFileObject.Write(strContents)
unattendFileObject.Close
End If

' Launch setup (will use the modified unattend.xml)
'WScript.Sleep 5000
'WshShell.Run "%WINDIR%\System32\oobe\windeploy.exe", 0, True

AUTOUNATTEND.xml

<?xml version='1.0' encoding='utf-8'?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
<settings pass="windowsPE">
<component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SetupUILanguage>
<UILanguage>ru-RU</UILanguage>
</SetupUILanguage>
<InputLocale>en-US; ru-RU</InputLocale>
<SystemLocale>ru-RU</SystemLocale>
<UILanguage>ru-RU</UILanguage>
<UserLocale>uk-UA</UserLocale>
<UILanguageFallback>ru-RU</UILanguageFallback>
</component>
<component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ImageInstall>
<OSImage>
<InstallFrom>
<MetaData wcm:action="add">
<Key>/IMAGE/INDEX</Key>
<Value>1</Value>
</MetaData>
</InstallFrom>
<WillShowUI>OnError</WillShowUI>
</OSImage>
</ImageInstall>
<UserData>
<AcceptEula>true</AcceptEula>
<FullName>User</FullName>
<Organization>ReplaceMe5</Organization>
</UserData>
</component>
</settings>
<settings pass="specialize">
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ComputerName>ReplaceMe1</ComputerName>
<RegisteredOrganization>ReplaceMe5</RegisteredOrganization>
<TimeZone>FLE Standard Time</TimeZone>
</component>
<component name="Microsoft-Windows-UnattendedJoin" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Identification>
<Credentials>
<Domain>ReplaceMe4</Domain>
<Password>ReplaceMe2</Password>
<Username>ReplaceMe3</Username>
</Credentials>
<JoinDomain>ReplaceMe4</JoinDomain>
<DebugJoin>true</DebugJoin>
<MachineObjectOU>ReplaceMe6</MachineObjectOU>
</Identification>
</component>
</settings>
<settings pass="oobeSystem">
<component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<InputLocale>en-US; ru-RU</InputLocale>
<SystemLocale>ru-RU</SystemLocale>
<UILanguage>ru-RU</UILanguage>
<UserLocale>ru-RU</UserLocale>
</component>
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<TimeZone>FLE Standard Time</TimeZone>
<OEMInformation>
<SupportPhone></SupportPhone>
<Manufacturer>Sattva</Manufacturer>
<Model>Unattended Windows 8 </Model>
<SupportURL></SupportURL>
</OEMInformation>
<OOBE>
<NetworkLocation>Work</NetworkLocation>
<HideEULAPage>true</HideEULAPage>
<HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
<HideLocalAccountScreen>true</HideLocalAccountScreen>
<ProtectYourPC>1</ProtectYourPC>
<SkipMachineOOBE>true</SkipMachineOOBE>
</OOBE>
<WindowsFeatures>
<ShowInternetExplorer>true</ShowInternetExplorer>
<ShowWindowsMediaPlayer>true</ShowWindowsMediaPlayer>
</WindowsFeatures>
<UserAccounts>
<LocalAccounts>
<LocalAccount wcm:action="add">
<Password>
<Value>YQBkAG0AaQBuADEANAAwADMAMQA5ADgANgBQAGEAcwBzAHcAbwByAGQA</Value>
<PlainText>false</PlainText>
</Password>
<Name>Администратор</Name>
<Group>Administrators</Group>
</LocalAccount>
</LocalAccounts>
</UserAccounts>
<AutoLogon>
<Password>
<Value>YQBkAG0AaQBuADEANAAwADMAMQA5ADgANgBQAGEAcwBzAHcAbwByAGQA</Value>
<PlainText>false</PlainText>
</Password>
<Enabled>true</Enabled>
<LogonCount>2</LogonCount>
<Domain></Domain>
<Username>Администратор</Username>
</AutoLogon>
<RegisteredOrganization></RegisteredOrganization>
</component>
</settings>
<cpi:offlineImage cpi:source="wim:f:/unattended/windows_8/multiboot_usb_8gb-16gb_flash_v7.0/sources/install.wim#Windows 8 Enterprise (64-bit)" xmlns:cpi="urn:schemas-microsoft-com:cpi"></cpi:offlineImage>
</unattend>

aldar
27-08-2013, 07:19
Sattva, спасибо за отклик.
Только у меня все равно ничего не вылазит((
Правильно ли я делаю?
Монтирую второй образ boot.wim с помощью dism,Dism /Mount-Wim /WimFile:c:\7Work\DVD\sources\boot.wim /index:2 /MountDir:c:\7Work\mountДалее копирую winpeshi.ini в c:\7work\mount\windows\wystem32 и domainOU.vbs в c:\7work\mount\sources
Сохраняю образ Dism /unmount-Wim /MountDir:c:\7Work\mount /CommitМожет надо файлы в install.wim интегрировать?

И еще у меня пару вопросов возникло, я тут пытался сделать по одной статье, а точнее по указу одного чела. Он написал вот такой гайд:


1. Create C:\Sysprep.xml with strings to replace:
EXAMPLE:
<settings pass="specialize">
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ComputerName>_COMPUTERNAME_REPLACE_</ComputerName>
<RegisteredOwner>SomePerson</RegisteredOwner>
<RegisteredOrganization>SomeOrg</RegisteredOrganization>
<TimeZone>Pacific Standard Time</TimeZone>
</component>
</settings>

2. Create a VBScript to:
a. prompt the user for the values you want to specify (such as ComputerName)
b. perform a string replace with those values in the C:\Windows\Panther\unattend.xml file (NOTE: not in C:\Sysprep.xml)
c. launch windeploy.exe to start the setup process

' ----- Begin sample: C:\Scripts\EditUnattend.vbs -----
Option Explicit
Dim answer, computerName, unattendFile, WshShell, fso, unattendFileObject, strContents

unattendFile = "C:\Windows\Panther\unattend.xml"

Set WshShell = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")

Do While answer <> vbYes
computerName = InputBox("Enter the desired Computer Name:", "Computer Name")
answer = MsgBox("Is this correct?" & vbCrLf & "Computer Name: " & computerName, vbYesNo, "Verify Name")
Loop

If fso.FileExists(unattendFile) = False Then
wscript.echo "ERROR: Could not find the unattend file"
Else
'Read the unattend file in and replace apprpriate variables
Set unattendFileObject = fso.OpenTextFile(unattendFile, 1)
strContents = unattendFileObject.ReadAll
strContents = Replace(strContents, "_COMPUTERNAME_REPLACE_", computerName)
unattendFileObject.Close

'Write the updated contents back to the unattend file
Set unattendFileObject = fso.OpenTextFile(unattendFile, 2)
unattendFileObject.Write(strContents)
unattendFileObject.Close
End If

' Launch setup (will use the modified unattend.xml)
WScript.Sleep 5000
WshShell.Run "%WINDIR%\System32\oobe\windeploy.exe", 0, True

' ----- End sample: C:\Scripts\EditUnattend.vbs -----

3. Run sysprep, but do not shutdown yet (in an elevated cmd.exe)
sysprep.exe /oobe /generalize /unattend:C:\Sysprep.xml /quit

4. Modify the HKLM\System\Setup 'CmdLine' registry value to launch C:\Scripts\EditUnattend.vbs
reg add HKLM\System\Setup /v CmdLine /t REG_SZ /d "cmd /c cscript //nologo C:\Scripts\EditUnattend.vbs" /f

5. Shutdown the system and capture the image using whatever imaging software you use

Когда я прочел это я вообще запутлся, так как я до этого знал только autounattend.xml который лежит в корне диска. А тут появился еще и Sysprep.xml (который сиспрепят) и c:\windows\panther\unattend.xml. В чем отличия этих файлов? Как и когда какой файл вызывается?

aldar
04-09-2013, 07:33
После нескольких попыток всё-таки добился того, что теперь вылазит окошко с текстбоксом, правда не понял каким образом.
Но вот возникла следующая проблема. VBS скрипт не применяется к файлу ответов. Мне кажется, что система не находит файла unattend.xml. При этом не выдает ошибки, что файла не удаётся найти.

Я пробовал и так и этак. Иногда вылазило уведомление о том, что файла unattend нет, а иногда не вылазило. Пробовал и скриптами sattva, и микрософтовсими - не получается. Виндовс не входит в домен и replaceme1 присваивается к имени компьютера.

Один раз во время установки, а точнее после копирования диструбутива install.wim я успел нажать shift+f10. Включил дискпарт и обнаружил что диску куда был скопирован дистрибутив, присваивается букв E: , в то время как CD-rom берет букву D: , а system reserved взял C:. А в VBS скрипте явно указывается "C:\Windows\Panther\unattend.xml". Пробовал в скрипте менять букву диска на E: и на D: - всё так же ReplaceMe1 вместо имени компьютера.

Если путь не проблема, то какие могут быть еще причины не присваивания файла значиний с vbs скрипта к файлу ответов?

sattva
28-10-2013, 23:34
Один раз во время установки, а точнее после копирования диструбутива install.wim я успел нажать shift+f10. Включил дискпарт и обнаружил что диску куда был скопирован дистрибутив, присваивается букв E: , в то время как CD-rom берет букву D: , а system reserved взял C:. А в VBS скрипте явно указывается "C:\Windows\Panther\unattend.xml". Пробовал в скрипте менять букву диска на E: и на D: - всё так же ReplaceMe1 вместо имени компьютера. »

попробуй так: %windir%\Panther\unattend.xml

у меня стояла зада полностью автоматизировать процесс разворачивания подготовленного образа, но все уперлось в имя компьютера... Поэтому делаю пока так: создаю в админке WDS - подготовленный ПК - присваиваю ему имя, а в файле ответов использую переменную %MACHINENAME%




© OSzone.net 2001-2012