Unattend.xml… i wszystko jasne

Wdrażanie systemu na wielu maszynach nawet przy użyciu gotowego obrazu wraz z usługą Windows Delployment Services może okazać się nieco uciążliwe. Głownie to z powodu, iż na każdej z maszyn przed i po instalacji trzeba podać podstawowe informacje dotyczące konfiguracji systemu jak np. ustawienia regionalne, parametry partycji itp… By jednak nie było to takie uciążliwe jest możliwość skorzystania z tzw. plików odpowiedzi oraz instalacji nienadzorowanej.
Aby stworzyć taki plik odpowiedzi wystarczy nam sam notatnik, niemniej jednak nie mając doświadczenia oraz nie znając struktury tych plików jest to mało przyjemne zajęcie. Do tego celu właśnie zostało stworzone narzędzie Windows System Image Manager wchodzące w skład pakietu WAIK 2.0.

  1. windowsPE – przebieg stosowany podczas ładowania windowsPE oraz instalacji systemu.
  2. offlineServicing – przebieg używany do instalacji sterowników, dodatkowych pakietów czy aktualizacji.
  3. generalize – przebieg przygotowujący obraz do instalacji na wielu maszynach (sysprep).
  4. specialize – przebieg dostosowuje instalacje do konkretnego komputera.
  5. auditSystem – tryb kontroli systemu, pozwala na przetestowanie instalacji przed dostarczeniem do użytkownika końcowego.
  6. auditUser – tryb kontroli użytkownika.
  7. oobeSystem – przebieg konfigurujący ustawienia podczas pierwszego uruchomienia (tzw. Windows Welcome), używane np. przy wykonaniu sysprep’a.

Przed rozpoczęciem tworzenia pliku odpowiedzi konieczne jest załadowanie obrazu do którego ma się tyczyć owy plik. Aby go załadować wybieramy z menu „Nowy plik odpowiedzi”. Zostaniemy poproszeni o wskazanie pliku z obrazem wim:

W przypadku gdy jest to niestandardowy obraz (inny niż obraz z płyty instalacyjnej), musimy wygenerować dla niego odpowiedni plik wykazu clg (do tego są wymagane uprawnienia Administratora):

Tutaj zaczynają się drobne schody, mianowicie gdy posiadamy WAIK’a w wersji x86 możemy wygenerować plik wykazu dla obrazu systemów zarówno x86 jak i x64. Niestety w przypadku wersji x64 oraz ia64 można generować pliki wykazu tylko do obrazów odpowiednich do danej architektury. W przeciwnym wypadku zobaczymy stosowny komunikat:

Rozwiązanie: Zainstalować WAIK na maszynie wirtualnej lub innej maszynie fizycznej o wymaganej architekturze (najlepiej x86). Wygenerować plik wykazu i po prostu go skopiować.

W części pierwszej zaprezentuje jak przygotować podstawowy plik odpowiedzi używany podczas stosowania sysprep’a.
Na liście komponentów szukamy odpowiedniej pozycji. Klikamy na niej PPM, wstawiamy go do odpowiedniego przebiegu i ustawiamy interesujące nas właściwości. Poniżej została przedstawiona tabela z zestawieniem podstawowych parametrów i ich wartości:

Komponent Przebieg Parametry
Microsoft-Windows-International-Core oobeSystem InputLocale – układ klawiatury, ustawiamy na pl-PL (polski programisty jest jako domyślny)
SystemLocale – domyślny język dla programów nie obsługujących Unicode, ustawiamy na pl-PL
UILanguage – określa język instalacji, ustawiamy na pl-PL
UserLocale – ustawienia regionalne użytkownika, format daty, liczb, waluty… ustawiamy na pl-PL
SkipMachineOOBE – pominięcie ekranu powitalnego podczas pierwszego logowania. Zostaną pominięte np. tworzenie konta użytkownika, język i ustawienia strefy czasowej.
Microsoft-Windows-Shell-Setup | OOBE oobeSystem HideEULAPage – akceptacja postanowień licencji – ustawiamy na true
ProtectYourPC – poziom zabezpieczeń – rekomendowany 1.
NetworkLocation – ustawienie lokalizacji sieci (Home|Work|Other)
HideWirelessSetupInOOBE – ukrycie strony połączenia z siecią bezprzewodową
Microsoft-Windows-Shell-Setup | UserAccounts | AdministratorPassword oobeSystem Value – hasło dla administrator, np. P@ssw0rd
PlainText – czy hasło ma być jawnie zapisane w pliku odpowiedzi – false
Microsoft-Windows-Shell-Setup | UserAccounts | LocalAccounts oobeSystem Description – opis kont, np. Konto Michała G.
DisplayName – nazwa wyświetlana – Michał Gajda
Group – grupaw jakiej będzie się znajdował – Użytkownicy
Name – login – mg
Password – hasło – P@ssw0rd
Microsoft-Windows-Shell-Setup oobeSystem TimeZone – strefa czasowa, dla Polski Central European Standard Time

Poniżej został przedstawiony przykładowy plik odpowiedzi w postaci xml:

<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
  <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">
      <OOBE>
        <HideEULAPage>true</HideEULAPage>
        <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
        <NetworkLocation>Work</NetworkLocation>
        <ProtectYourPC>1</ProtectYourPC>
        <SkipMachineOOBE>true</SkipMachineOOBE>
        <SkipUserOOBE>true</SkipUserOOBE>
      </OOBE>
      <TimeZone>Central European Standard Time</TimeZone>
      <UserAccounts>
        <AdministratorPassword>
          <Value>UABAAHMAcwB3ADAAcgBkAEEAZABtAGkAbgBpAHMAdAByAGEAdABvAHIAUABhAHMAcwB3AG8AcgBkAA==</Value>
          <PlainText>false</PlainText>
        </AdministratorPassword>
        <LocalAccounts>
          <LocalAccount wcm:action="add">
            <Password>
              <Value>UABAAHMAcwB3ADAAcgBkAFAAYQBzAHMAdwBvAHIAZAA=</Value>
              <PlainText>false</PlainText>
            </Password>
            <Description>Konto Michała G.</Description>
            <DisplayName>Michał Gajda</DisplayName>
            <Group>Użytkownicy</Group>
            <Name>mg</Name>
          </LocalAccount>
        </LocalAccounts>
      </UserAccounts>
      <RegisteredOrganization>MyCompany</RegisteredOrganization>
    </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>pl-PL</InputLocale>
      <SystemLocale>pl-PL</SystemLocale>
      <UILanguage>pl-PL</UILanguage>
      <UILanguageFallback></UILanguageFallback>
      <UserLocale>pl-PL</UserLocale>
    </component>
  </settings>
  <cpi:offlineImage cpi:source="wim:c:/obraz.wim#Obraz C" xmlns:cpi="urn:schemas-microsoft-com:cpi" />
</unattend>

Wywołanie sysprepa z użyciem pliku odpowiedzi wygląda następująco:

sysprep /oobe /generalize /unattend:<lokalizacja pliku odpowiedzi>
sysprep /oobe /generalize /unattend:c:\unattend.xml

Drugą część przeznaczę na opisanie pliku odpowiedzi dla serwera WDS w celu zautomatyzowania instalacji w rozproszonym środowisku.

Komponent Przebieg Parametry
Microsoft-Windows-International-Core-WinPE | SetupUILanguage windowsPE UILanguage – Język używany przez Windows i instalator WDS – ustawiamy na pl-PL
Microsoft-Windows-International-Core-WinPE windowsPE InputLocale – układ klawiatury – ustawiamy na pl-PL (polski programisty jest jako domyślny)
SystemLocale – domyślny język dla programów nie obsługujących Unicode – ustawiamy na pl-PL
UILanguage – określa język instalacji – ustawiamy na pl-PL
UserLocale – ustawienia regionalne użytkownika, format daty, liczb, waluty… – ustawiamy na pl-PL
Microsoft-Windows-Setup | DiskConfiguration | Disk | CreatePartitions | CreatePartition windowsPE Order – kolejność partycji – 1, 2, 3…
Size – rozmiar w MB – np. 100
Type – typ partycji – Primary
Extend – rozszerzony do reszty wolnego miejsca – ostatnia partycja np. na true
Microsoft-Windows-Setup | DiskConfiguration | Disk | ModifyPartitions | ModifyPartition windowsPE Active – czy partycja aktywna – true dla partycji z bootmgr
Format – system plików – NTFS
Order – kolejność – 1, 2, 3…
PartitionID – id utworzonej partycji – 1, 2, 3…
Microsoft-Windows-Setup | DiskConfiguration | Disk windowsPE DiskID – id dysku – 0
WillWipeDisk – czyści dysk przed stworzenie nowych partycji – true
Microsoft-Windows-Setup | UserData | ProductKey windowsPE WillShowUI – pokaz stronę – Never
Key – klucz produktu
Microsoft-Windows-Setup | UserData windowsPE AcceptEula – akceptuj postanowienia licencji – true
FullName – Nazwa użytkownika końcowego
Organization – Organizacja
Microsoft-Windows-Setup | Login | Credentials windowsPE Domain – domena
Password – haslo
Username– nazwa użytkownika
Microsoft-Windows-Setup | ImageSelection | InstallImage windowsPE Filename – plik obrazu – obraz.wim (wg dokumentacji \\network_share\images\install-myimage.wim, niemniej ta opcja nie działała poprawnie w obecnej konfiguracji)
ImageGroup – nazwa grupy obrazów – ImageGroup1
ImageName – nazwa obrazu – Moj Obraz C
Microsoft-Windows-Setup | ImageSelection | InstallTo windowsPE DiskID – id dysku – 0
PartitionID – id partycji – 2
<?xmlversion="1.0"encoding="utf-8"?>
<unattendxmlns="urn:schemas-microsoft-com:unattend">
  <settingspass="windowsPE">
    <componentname="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">
      <DiskConfiguration>
        <Disk wcm:action="add">
          <CreatePartitions>
            <CreatePartition wcm:action="add">
              <Order>1</Order>
              <Size>100</Size>
              <Type>Primary</Type>
            </CreatePartition>
            <CreatePartition wcm:action="add">
              <Order>2</Order>
              <Size>20480</Size>
              <Type>Primary</Type>
            </CreatePartition>
            <CreatePartition wcm:action="add">
              <Extend>true</Extend>
              <Order>3</Order>
              <Type>Primary</Type>
            </CreatePartition>
          </CreatePartitions>
          <ModifyPartitions>
            <ModifyPartition wcm:action="add">
              <Active>true</Active>
              <Extend>false</Extend>
              <Format>NTFS</Format>
              <Order>1</Order>
              <PartitionID>1</PartitionID>
            </ModifyPartition>
            <ModifyPartition wcm:action="add">
              <Extend>false</Extend>
              <Format>NTFS</Format>
              <Label>OS</Label>
              <Letter>C</Letter>
              <Order>2</Order>
              <PartitionID>2</PartitionID>
            </ModifyPartition>
            <ModifyPartition wcm:action="add">
              <Extend>false</Extend>
              <Format>NTFS</Format>
              <Label>Dane</Label>
              <Letter>D</Letter>
              <Order>3</Order>
              <PartitionID>3</PartitionID>
            </ModifyPartition>
          </ModifyPartitions>
          <DiskID>0</DiskID>
          <WillWipeDisk>true</WillWipeDisk>
        </Disk>
        <WillShowUI>Never</WillShowUI>
      </DiskConfiguration>
      <UserData>
        <ProductKey>
          <Key>XXXXX-XXXXX-XXXXX-XXXXX-XXXXX</Key>
          <WillShowUI>Never</WillShowUI>
        </ProductKey>
        <AcceptEula>true</AcceptEula>
        <FullName>MichałGajda</FullName>
        <Organization>MyComapny</Organization>
      </UserData>
      <WindowsDeploymentServices>
        <Login>
          <Credentials>
            <Domain>cds</Domain>
            <Password>P@ssw0rd</Password>
            <Username>Administrator</Username>
          </Credentials>
        </Login>
        <ImageSelection>
          <InstallImage>
            <Filename>obraz.wim</Filename>
            <ImageGroup>ImageGroup1</ImageGroup>
            <ImageName>MojObrazC</ImageName>
          </InstallImage>
          <InstallTo>
            <DiskID>0</DiskID>
            <PartitionID>2</PartitionID>
          </InstallTo>
          <WillShowUI>Never</WillShowUI>
        </ImageSelection>
      </WindowsDeploymentServices>
    </component>
    <componentname="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>pl-PL</UILanguage>
      </SetupUILanguage>
      <InputLocale>pl-PL</InputLocale>
      <SystemLocale>pl-PL</SystemLocale>
      <UILanguage>pl-PL</UILanguage>
      <UserLocale>pl-PL</UserLocale>
    </component>
  </settings>
  <cpi:offlineImage cpi:source="wim:c:/obraz.wim#ObrazC" xmlns:cpi="urn:schemas-microsoft-com:cpi"/>
</unattend>

Ostatecznie plik odpowiedzi kopiujemy do katalogu wdsclientunattend i dołączamy do usługi WDS:

WDSUTIL /Set-Server /WDSUnattend /Policy:enabled /File:<lokalizacja pliku odpowiedzi> /Architecture:{x86|ia64|x64}
WDSUTIL /Set-Server /WDSUnattend /Policy:enabled /File:wdsclientunattend\Unattend.xml /Architecture:x64

Są to bardzo proste rozwiązania, a możliwych scenariuszy do wykorzystania jest multum i nie sposób by wszystkich tutaj opisać, dlatego zainteresowanych zapraszam do dyskusji.

Źródła:
http://technet.microsoft.com/en-us/library/cc766245(WS.10).aspx
http://technet.microsoft.com/pl-pl/library/cc732723(WS.10).aspx
Dokumentacja WAIK dotycząca instalacji nienadzorowanej systemu Windows

Reklamy

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s