Windows Vista/7/8+ batch telepítés MDT-vel WDS nélkül UDPCast-tal

[bepötyögött, de nem átolvasott verzió]

Remélhetőleg még nem végzett mindenki a szokásos nyári újratelepítésekkel iskolákban és hasonló "gépterem-stílusú" helyeken és valakinek hasznos lesz: hogyan deployoljunk Windows-okat (leginkább Vistától felfelé, de XP is), párhuzamosan akárhány gépre, egységes image-ből, Microsoft-os rendszerrel és kis opensource rásegítéssel.

Először is, mi is az az MDT? A Microsoft Deployment Toolkit [<- tudom, hogy feltűnően dobálom be a keresőkifejezéseket, ígyjárás] egy telepítés automatizáló eszközkészlet, gyakorlatilag egy raklap VBScript [úristen...], egy Deployment Workbench nevű management console alkalmazás [nincs kedvem Windows bootolni a hivatalos megnevezés megkeresésére], természetesen szépen összekötve minden Microsoft szoftverrel (szerencsére opcionálisan) az SQL Server-től kezdve az SCCM-en át a Windows Deployment Services-ig, amivel ha van Windows Server 2008-unk, akár multicastolni is tudunk. Anélkül bukó, és szépen egy megosztáson csücsülő ún. Deployment Share-ről olvasgatja be az image-t. Ami géptermek telepítésekor nem hatékony. Viszont önmagában egy tényleg jó rendszer, sok mindent elvégez (driverek, updatek, alkalmazások éstöbbi telepítése, a rendszerrel együtt vagy attól függetlenül, összekattintgatható Task Sequence-ek alapján). Úgyhogy egy kicsit tegyük még jobbá, OpenSource to the rescue...

Mire jó:
* A UDPCast miatt nem gépenként külön-külön, hanem egy példányban szórja az image-t, amelyik gép lemarad róla, az így járt (majd tölti egyesével SMB-n)
* 29 gépes gépterem gigabites hálón 59 perc (és ez a legrosszabb idő volt, az a gép, ami 10 percet várt, hogy elindítsam az udpcast-ot) alatt kulcsrakész Windows-zal, úgy, hogy azokat az alkalamzásokat, amik változhatnak a következő telepítésig (böngészők, flash, java, víruskergető, ilyesmik, amikből lesz új verzió - pl. az új Firefox megjelenése előtti nap lőttem az image-t, mégis mindenhova a legfrissebb került) utólag a deployment share-ből SMB-n telepítik, a terített wim fájl pedig 9+ giga.
* 29 gépes gépterem gigabites hálón, ahol az egyik gépben bekapcsolt az intel hálócsipekbe épített SmartSpeed vagy hasonló "feature" (ez az a rettenet, ami ha bármi gondot észlel a fizikai rétegben, ahelyett, hogy simán ledobná a francba a hálózatot vagy elkezdene frameket eldobálni, nekiáll lekapcsolgatni a sebességet - és afaik kikapcsolhatatlan), és levitte 10 megabit/sec-re a saját sebességét - ezzel megfogva az összes többi gépet is [sajnos túl későn jöttem rá, hogy egyszerűbb lett volna simán kihúzni a gépet a hálóból és azt külön samba-ról telepíteni a debugolás után]. Mivel ebben a teremben volt egy másik gép is, amit az udpcast válasz híján egyszerűen kidobott a küldésből [és a franc akarta samba-ról telepíteni, bár automatikusan elkezdte], ill. kettő gépen rossz volt a MAC cím - konfiguráció megfeleltetés, így ezeket külön körben is telepítettük, hogy csak hárman futottak ~45 perc alatt végeztek. (egy gép sambán - ahonnan közvetlenül tudja apply-olni az image-t - 30-35 perc alatt végez)
* A két gépteremben generációs különbséggel (Core2/első generációs i3) levő gépek vannak, ugyanabból az image-ből telepítve működnek (~8 évet lefedő, eltérő hardveren telepítettem ezt az image-t ill. korábbi verziókat ugyanerről a referencia VBox gépről készült imaggel, btw., eddig mindenen működött), a WinPE-s "megnézem a hw-t is és kicsit segítek a Windows-nak"-típusú telepítés valamivel hw-barátabb, mint a lemez imagelgetés.

Összetevők:
* kell egy samba (vagy Windows-os fájlmegosztás, de sok klienshez szerver Windows kellene, ha meg van, akkor inkább használjuk a beépített eszközöket) megosztás, legyen mondjuk \\foo.bar.baz\deploy$ a neve. Kell majd egy user, aminek van jogosultsága olvasni ezt a share-t és lehetőleg más nagyon semmi (egy iso-ban plaintextben ki kell majd tennünk az adatait), ill. ha van domainünk és be akarunk léptetni, akkor egy user, akinek van erre joga, de másra lehetőleg nem nagyon, mert plaintext-ben egy megosztásra fel kell tennünk a nevét (amit mondjuk az ACL-el megoldhatunk, hogy ne legyen elérhető, de...). Tartomány nélkül is megoldható az egész, gyakorlatilag a nevek változnak, a tartományi beléptetésről (JoinDomain, DomainAdminDomain, DomainAdmin, DomainAdminPassword) lásd a részletes és csak egy-két helyen pontatlan súgót
* kell egy admin gép, amin telepítve van a Microsoft Deployment Toolkit 2012 Update 1 [vagy 2013/2013U1, csak a kód nem biztos, hogy teljesen ez lesz, a bing a 2012U1-et dobta ki, amikor rákerestem, azért lett ez] - FONTOS: ha XP-ről akarunk migrálni a User State Migration Tool-al, akkor MINDENKÉPP az 2012U1-et használjuk, a 2013 és utána következőkben levő USMT meg se mozdul XP-n. Így XP-ről max. 8.0-ig tudunk ugrani, ugyanis a 2012U1 a 8.1-et még nem támogatja.
* kell egy windows-os build az udpcast nevű programból (ez ugyanaz, mint amit a Clonezilla Server is használ), szerencsére van készen a projekt oldalán (https://www.udpcast.linux.lu/exe.html). Ha küldésre Linux-os gépet használnánk (én spec ugyanazt a gépet használtam, amin a Deployment Share is van), akkor ott csomagból lehet telepíteni (https://www.udpcast.linux.lu/downloads.html).
* ha a gépek tudnak PXE-ről bootolni, akkor már gond nem lehet. Nem árt majd egy iPXE+PXELinux (nálunk ezzel megy) vagy gPXE (elvileg ezzel is mennie kéne), ezekhez természetesen egy tftp szerver, illetve egy webserver (vagy nfs, iscsi, bármi csak lebegtesse a kecskéd) ahonnan egy WinPE-s boot.iso-t be tudnak húzni a gépek [170 mega, nem vészes, de tftp-n öntökönszúrás kivárni]
* egy lehetőleg virtuális gép, vagy olyan gép, amin a target rendszernek nem kell az alapokon kívül plusz driver [ne szemeteljük tele az image-t], a virtuális gép külön hasznos, mivel így az image (így: sysprep) előtt tudunk egy snapshotot csinálni, aztán visszatérni rá.
* sok szabadidő, mire a referencia-gépet felpatcheljük a kívánt szintre :)

----

Első lépés: ismerkedés az MDT-vel és a Standard Client Task Sequence-el. A "többi" extra nélkül az MDT egy scriptelhető telepítő, amihez egy MMC-stílusú grafikus felületet kapunk, amin elég részletesen be lehet állítani, hogy mit akarunk csinálni. Megnyitva (és miután megvitattuk vele, hogy jó, persze, telepítse a WAIK-ot [Information Center - Components] és sikerül is csinálnunk egy Deployment Share-t, látjuk, hogy miket kezel: Alkalmazások (Applications), Operációs rendszerek (Operating Systems), Dobozbólki driverek (Out-of-box drivers), Packages (Frissítő és egyéb csomagok, önlábonlövésre egy próbát megér egy RTM Windows-t telepíteni úgy, hogy a packages-be importáljuk a hozzá tartozó legújabb Service Pack-ot és minden frissítést, valszeg nagyon szépen el fog halni az unattend.xml alkalmazásánál) és a Task Sequence-k. Ha már erre járunk, az Advanced Options-ben bökjünk rá a Monitoring-ra, ami egy darabig sakkozni fog, majd közli, hogy nincs monitoring szerver beállítva, és akarjuk-é ezt a gépet beállítani (akarjuk, gondolom). Később bármikor átírható a graf felületen/CustomSettings.ini-ben (EventService), és eltávolítható a szolgáltatás (MDT Monitor azt hiszem) a monitorozó gépről - viszont hasznos, mert lehet követni, hogy melyik lépésnél tart melyik gép és mennyi ideje fut.

Az alkalmazásoknál két féle alkalmazást tudunk felvinni: alkalmazást forrásfájlokkal és alkalmazás-gyűjteményt (application bundle). Minden alkalmazásnak lehetnek függőségei, a forrásfájlosok ezen kívül forrásfájlokkal is rendelkeznek és egy valamilyen paranccsal, amivel elvileg települ (nagyon szépeket lehet taknyolni "Alkalmazások" címszó alatt, ha van bármi, amit a telepítés folyamán rendszergazda jogkörrel indítani akarunk, megtehetjük). Az egyik leghasznosabb feature-je ezeknek, hogy meg lehet adni, hogy a Registry-be az Uninstall (HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall) milyen kulcs alá írja be magát a progit (azok a programok, amik ezt nem teszik, mondjanak le, a fejlesztőik meg szégyelljék magukat) - a telepítőfolyamat automatikusan kihagyja őket. Itt emlékezzünk meg a Mozzila alapítványról, amelyik a legkulturáltabb nem-msi telepítőt gyártja, szépen kitakarítja az esetleges korábbi verziókat és a kulcs nevében benne van a verziószám, nem csak valamelyik értékben (utóbbi szívás, ha frissíteni is akarunk, de körbescriptelhető). Ha az unattended/silent switchekben elakadnánk, az Unattended oldalán telepítőtípusokhoz elég szép gyűjtemény van: http://unattended.sourceforge.net/installers.php

Az operációs rendszereknél beimportálhatjuk az eredeti telepítőmédiát, egy elkészített wim image-t vagy ha lenne WDS-ünk (és akkor ezt minek olvasnánk) onnan is importálhatunk OS-eket. A "gyári" Standard Client Task Sequence-el (lásd később) önmagában meg tudnánk azt csinálni, hogy már a referenciagépet is a deployment share-be importált médiáról telepítjük, de minek. A wim-eknél fontos, hogy előfordul, hogy végigfut hiba nélkül az importálás, mégsem jelenik meg a listában: ez csak annyi jelent, hogy az imagex nem talált benne (egész pontosan a legkisebb indexű képen) olyan Windows rendszert, amit felismert volna - Win7-nél ebbe belefuthatunk, ha a fél gigás partíció is ott van a gépen, a Capture folyamathoz ilyenkor be kell állítani a CaptureDrive=D: opciót a CustomSettings.ini-ben (lásd később), mert a PE környezetben a boot partíció lesz a C:.

Az utolsó, amiről elsőkézből származó tapasztalat alapján nyilatkozhatok az az out-of-the-box drivers: ha megvan az inf telepítő (egy-egy drivercsomagból külön élmény kiszedni, amikor nem dokumentált, a súgóban nem elérhető, csak a telepítés után egy jelöletlen txt-ből kiderülő parancssori opcióval lehet kitömöríteni a telepítő exe tartalmát...), akkor az Import drivers varázslót ráeresztve a megfelelő könyvtárra, meg kellene, hogy találja. A telepítés közben - alapbeállításon, máshogy is rendelkezhetünk - az Inject Drivers szakasznál végignézni a PnP eszközöket, és megnézi, van-e valamelyikhez a Deployment share-ben driver, ha igen, akkor bemásolja a telepített oprendszer driverstore-jába. Így pl. ha van nVidia kártyás gépünk és nem szeretjük a Windows update-telepítette nvidia drivert, ami ennek ellenére megcsinálja az nvupdateus vagy hasonló user-t és telepít magának egy driver frissítés kereső szolgáltatást (seriously, egyre inkább igazat adok Linusnak :) ), aztán azonnal azzal kezdi, hogy "ja, van frissebb, kattints ide, kattints ide", a legbiztosabb, ha bevágjuk a legfrissebb driver-ből a Display.driver mappát (a többi szemét legalább más mappákban van :) ) és a probléma megoldotta magát [btw., az intel ugyanez pepitában, de az legalább plusz usert nem csinál] - azért túlzásokba nem kell esni, vannak driverek, amik nem egészségesek, ha ott vannak, ha a hardware id nem tűnik elég pontosnak (pl. laptopok nyomógombjai, ACPI cuccok), inkább alkalmazásként telepítsük őket a megfelelő gépet targetálva.

A Task Sequence-ek adják az MDT lényegét: ezek az önállóan indítható lépéssorozatok, amikkel azt csinálunk, amit akarunk :) Az alap sablonok pl. a felhasználó adatok exportálása, a gépről image mentése majd a lemez biztonságos törlése, telepítés utáni visszaállítás [exportált felhasználói adatok visszahozása, programok telepítése, ilyenek], egy standard task sequence, ami attól függően, hogy a Windows-ból vagy CD-ről (PXE-ről) indítottuk frissíti/újratelepíti a rendszert, feldobja az alkalmazásokat, megcsinálja a sysprep-et és készít egy deployolható image-t, egy ami "csak" deployolható image-t készít és a többi, amit nem teszteltem. A géptermi telepítéshez ezekből nagyjából három elég lesz (a háromból kettőt meg is csinálhatunk): az image készítés (Sysprep and Capture sablon[1], nálam CAPTURE azonosítóval fut), az utólagos telepítés (Post OS Install Task Sequence, nálam APPINSTALL azonosítóval fut) és az - operációsrendszer-függő - oprendszer telepítősdi (Standard Client Task Sequence, nálam mindig WIN[dátum] néven fut). Sajnos a task sequence-ket oprendszerhez köti (már amelyiket, sablon-függő), így minden importált oprendszerhez új task sequence-t kell generálnunk, de az a két lépéses varázsló nem vészes, az ebédszünetes katalógus-generálás (amikor az unattend.xml-hez elkészíti a katalógust, amihez elég sokáig nézi az image-t, valahol jogosan, a benne levő komponensektől függő beállításokat kell kikeresnie) már inkább. Patch-keddenként kibírható.

Ha meg van a két állandó task sequence-ünk (capture, install), haladhatunk tovább.

-----

Ha már így kiörömködtük magunkat, hogy tudunk kattintgatni, gyorsan intézzünk el két dolgot: a Bootstrap.ini-be (a deployment share Control könyvtárában, vagy a Workbench-ben a deployment share-n jobb klikk - Properties - Rules és alul az Edit bootstrap.ini) vigyük fel a share-ünk eléréséhez szükséges adatokat: [ez az a fájl, amit bele fog tenni a boot iso-ban, így bele kell tenni, hogy hol éri el a Deployment share-t]


[Settings]
Priority=Default

[Default]
DeployRoot=\\foo.bar.baz\deploy$
; a gép NETBIOS neve is jó neki, ha nincs tartomány
UserDomain=foo.baz
; az a user, ami olvasni tudja a deployment share-t, de máshoz nem nagyon van joga
UserID=deploy-user
; a fenti user jelszava
UserPassword=loremipsum
; welcome ablak eltüntetése
SkipBDDWelcome=TRUE

Mert miért ne alapon a Default szakaszban levőket bevághatjuk a CustomSettings.ini-be is [ezt a fájlt már share-ről olvassa mindig újra, így változtathatjuk a boot iso újragenerálása nélkül is].

Ezzel már olyan iso-t kapunk, ami tud is csatlakozni a Deployment share-hez. Ha már erre járunk, a C:\Program Files\Windows AIK\Tools\PETools\x86\boot mappában üssük át a bootfix.bin-t mondjuk _bootfix.bin-re, majd hasonlóan az amd64 mappában is[2]. Ezzel kinyírtuk a "Press any key to boot from CD/DVD..." prompt-ot az újonnan készülő bakancs izzókból. Meg ha már a környéken vagyunk, a C:\Program Files\Microsoft Deployment Toolkit\Templates\Distribution\Tools\x86 mappába dobjuk be az udp-receiver.exe -t (majd az amd64-be is [2]).

A Deployment workbenchben nyissuk meg a DS tulajdonságait, és a Windows PE fülön kapcsoljuk be a "Generate a Lite Touch bootable ISO image" opciót. Ha gyorsan akarunk haladni, még most hányjuk be az összes hálózati drivert azokhoz a hálókártyákhoz, amiket a Win7/Win8 [MDT2012/MDT2013, respectively] alapból nem ismer. Ezután deployment share-n toljunk egy Jobb klikk -> Update deployment share -t, a varázslóban válasszuk a completely regenerate boot images opciót és menjünk inni egy kávét. Ha nem másolta volna be a deployment share Tools\x86 mappába az udp-receiver.exe-t, akkor vagy másoljuk be kézzel, vagy nyissunk egy új deployment share-t, nem oszt nem szoroz.

------

Ahhoz, hogy MAC cím szerinti konfigurációt használjunk, nyissuk meg a CustomSettings.ini-t (vagy használjuk a Deployment share properties ablak Rules fülét), és a [Settings] résznél a Priority-t írjuk át MACAddress, Default-ra. Ezután a telepítő a Default szakaszban megadott konfiguráció beolvasása után a gép MAC címéről elnevezett szakaszt (pl.: [00:11:AA:BB:0E:0F] - plusz pontért az ipconfig kimenetéhez képest kötőjel helyett kettősponttal kell írni, konzisztencia FTW, rohaggyá'meg kopipeszt) is betölti, ha egyező kulcs van, utóbbi felülírja az előbbiben levő értékeket. Ha a korábban emlegetett fél gigás boot partíciónk ott van a referencia gépen, vadásszuk le a MAC címét, és a CustomSettings.ini-be vágjuk be:


[RE:FG:EP:MA:CI:ME]
; Eljen a magyar ragozas, hogy ez így kijött
BackupDrive=D:

------

Ha és amennyiben megvan az alap imageünk (a kommentek közt lehet sírni, hogy mekkora szar a Win, hogy napokig kell updatelni, én megértem), lőjünk róla egy image-t: ehhez kell egy a UserID által írható (de akár másik gépen levő) megosztás. Ha tudunk a gépről snapshotot csinálni, MOST csináljunk. Csatoljuk fel a futó rendszerben egy ELEVATED command promptból a UserID nevében (!) a deploy share-t, lépjünk be a scripts mappába és indítsuk el a LiteTouch.vbs vagy LiteTouch.wbf fájlt. Mivel (még :) ) nem tiltottuk le a CustomSettings.ini-ben, megkapjuk a varázslót, ahol végig lehet pötyögni, hogy mit akarunk csinálni (Task Sequence), hova mentse az image-t és milyen rendszergazda jelszót állítson be a mentés után (tök mindegy, mert snapshotoltunk, ugyebár). Egy pár next-next-finish után kapunk egy összefoglalót, ott nézzük meg a részleteket, ha a referencia gép mac címéhez kötjük az ott levő konfigurációt [3] később nem kell a varázslót végigléptetnünk. A vinyón levő fájloktól (nem csak méret, tömöríthetőség és ismétlődések száma is lényeges, mert deduplikált és maximumon tömörített wim-et csinál ha nem piszkálunk bele az LTIBackup.wsf-be) függő idő múlva (ez a 9 gigás kimeneti image-el [valamivel több, mint 50% tömörítési arány, ha jól emlékszem] gigabites hálón [amit messze nem hajtott ki a tömörítés/deduplikálás miatt] kb. 1 óra) lesz egy szép-új imageünk és egy gépünk, amit állítsunk vissza miután a PE után újraindult.

A végleges, erre a gépre konfigunk valami ilyesmi lesz. ezzel azonnal indítja a capture task sequence-t és a megadott share-be / könyvtárnévbe ment:


[RE:FG:EP:MA:CI:ME]
SkipWizard=YES
TaskSequenceID=CAPTURE
DoCapture=YES
ComputerBackupLocation=NETWORK
BackupDrive=D:
BackupShare=\\backup.foo.bar\asd
BackupDir=Image

-------

Ha meg van az első imageünk, importáljuk be (Operating Systems - Jobb klikk - Import Operating System - Custom Image File, aztán léptessünk). Az importálás nem tart sokáig (gyakorlatilag a fájl másolás ideje, plusz/minusz amíg szórakozik kicsit az image-el, hogy kitalálja, mi van benne). Ha megvan, hozzunk neki létre egy Standard Task Sequence-t, majd nyissuk meg az új TS tulajdonságait. Engem kifejezetten irrítál az Apply local GPO pack lépés, azt ki szoktam kapcsolni (a Task Sequence fülön katt a bal listában katt rá [a State Restore részben van], a jobb oldalon az Options fülön "Disable this step"), majd jöhet az OS Info fülön az Edit unattend.xml gomb és az ebédszünet.
Ha frissítettük az Explorer-t (11-esnél már biztosan kell ez a lépés), akkor a specialize lépésnél az IE-InternetExplorer_neutral alatt az IEWelcomeMsg kulcsot egy jobb klikk - Revert change-el üssük ki - az MDT ezt automatikusan bekapcsolja, a leírásban (amit afaik az imageből szed ki) viszont már írja, hogy deprecated. Az eredmény a "Felkészülés a Windows első indítása" feliratnál megjelenő hiba dialógus ablak és egy agyhalott számítógép. Az MDT2013U1 már valszeg ezt nem így csinálja, nem mondom biztosra. Itt még érdemes körülnézni, pl az oobe ágon a Display-nél előszeretettel befixálja 1024x768[32]@60-ra a képernyőbeállításokat, amiket aztán a telepített grafikus driver vagy felülír, vagy nem. Ha fix felbontású az összes gép, amire deployolunk, írjuk be, ha nem, töröljük a kulcsot és reméljük a legjobbakat :) [nálunk fix, úgyhogy ezzel a kérdéskörrel tovább nem foglalkoztam]

Tisztaszoftveres megjegyzés: a Tisztaszoftveres telepítők, amikkel találkoztam, az unattend.xml-ben FirstRunCommand (? valahol az oobe step-nél) állítják a KMS szervert, hosszú távon kényelmesebb alkalmazásként felvinni azt a parancsot (egy üres mappa az alkalmazásnak, telepítő command line-nak meg az slmgr.vbs), így nem kell minden unattend.xml-be beletenni.

-------

Két rövid kitérő:
1) Ha nagyon testreszabtuk a Task Sequence-t, és nem akarjuk ezt minden image-nél újra és újra eljátszani, a Task Sequence leíró xml-jét bemásolhatjuk a C:\Program Files\Microsoft Deployment Toolkit\Templates\ mappába, onnantól kezdve sablonként fog működni [úgy emlékszem, régen volt ilyen utoljára]
2) Fentebb írtam, hogy a Standard Client Task Sequence máshogy működik, ha PE-ből és ha Windows-ból indítjuk (mint a rendes telepítő), egy viszonylag egyszerű módosítással (a Task Sequence-be talán egy új Task, ami egy változót ír felül, csak jó helyen kell és jó változót :) ) megcsinálható, hogy Windowsból indítva is formázza és friss telepítést csináljon [ez pl. akkor hasznos, ha a felhasználói adatokat migrálnánk [4], de egy lépésben akarjuk viszont friss telepítéssel]. Sajnos ez is régen volt, ha valakinek nagyon kell előkerítem az eredeti leírást, valahol van egy bookmark, vagy ha nem találom, megnézek egy így beállított task sequence-t, valahol kellene lennie

--------

PXE-bootról röviden: az http://ipxe.org/howto/dhcpd oldalról kapjuk le az undionly.kpxe-t dobjuk be a tftp mappába a pxelinux.0 mellé, a PXE chainloading résznél levő 4-5 sort dobjuk be a dhcp konfigjába (esetleg nézzünk körül a Speeding up résznél is...) a http címet lecserélve a pxelinux.0-ra, a pxelinux.cfg/default-ba vigyük fel a


LABEL mdt
KERNEL memdisk
APPEND http://webserver.foo.bar/boot.iso iso raw

sorokat és hadd szóljon. Természetesen az MDT-generálta Lite Touch iso-t (a deployment share Boot könyvtárából) másoljuk át a webszerverre.

Itt most akkor készen állunk arra, hogy deployoljunk image-ből, egyelőre SMB-n. Egy random válaszott gépen indítsunk egy PXE boot-ot, kattintgassuk végig a varázslót és jegyezzük fel a beállításokat. (a GUID-okkal ne foglalkozzunk, azokat kiírja az MDT a tulajdonság ablakokban, ráadásul csak az alkalmazásoknál kellenek, bár ott is megadhatók a beszédes nevükkel (Pro-Tip: készítsünk 1-1 application bundle-t az egyes géptípusokra telepítendő alkalmazásokról, így minden gépnél egy Applications1=Lorem Ipsum Bundle sorral elintézhetjük). A beállításnevek viszont nem ártanak. Meg a billentyűzetkiosztás, sok sikert az elsőre sikeres reprodukálásához ;) )

--------

Ha sikeres volt a telepítés, akkor jöhet a teljes unattended telepítés. Ez nem nagy wasistdas, ha megvan a konfigunk, amivel Next-next-next végig tudunk menni a varázslón (vagyis reprodukáltuk a megfelelő beállítások a customsettings-ben), akkor egy SkipWizard=TRUE, FinishAction=RESTART, SkipFinalSummary=TRUE hármassal el is intézhetjük, hogy ne kérdezzen semmit és a telepítés végeztével azonnal indítsa újra magát (nem szerencsés belépett rendszergazda userrel otthagyni a gépet, na :) )

--------

Ha ez is sikerült, itt az idő az UDPCast-olós mókára. (így 80 bekezdés után :) ) Nem lesz bonyolult: nyissuk meg az LTIApply.wsf fájlt a deployment share Script mappájából (és/vagy az MDT templates mappából, ha utána el akarjuk játszani az update deployment share mókát), és keressük meg azt a sort, hogy:


sCmd = " /apply """ & sImagePath & """ " & sImageIndex & " " & sDestinationDrive

és cseréljük le arra, hogy:


		sCmd = " /apply """ & sImagePath & """ " & sImageIndex & " " & sDestinationDrive
		
		' Check if deploying via UDPCast and act accordingly
		If oEnvironment.Item("UseUDPCast") = "TRUE" then
			Dim sLocalFileName
			oLogging.CreateEntry "------  Disabling firewall for UDPCast deployment ------", LogTypeInfo
			oUtility.FindExeAndRunWithLogging "wpeutil.exe", "DisableFirewall"
			oLogging.CreateEntry "------  Loading image using UDPCast ------", LogTypeInfo
			sLocalFileName = oFSO.GetBaseName(sImagePath)
			oLogging.ReportProgress "Fetching image via UDPCast", 20
			oUtility.FindExeAndRunWithLogging "udp-receiver.exe", " -f """ & sDestinationDrive & "\" & sLocalFileName & """ --start-timeout 1200 --nosync --nokbd --no-progress"
			oLogging.CreateEntry "------  Image loading finished ------", LogTypeInfo
			oLogging.CreateEntry "------  Enabling firewall for UDPCast deployment ------", LogTypeInfo
			oUtility.FindExeAndRunWithLogging "wpeutil.exe", "EnableFirewall"
			if oFSO.FileExists(sDestinationDrive & "\" & sLocalFileName) then
				if oFSO.getFile(sDestinationDrive & "\" & sLocalFileName).Size = oFSO.getFile(sImagePath).Size then
					sCmd = " /apply """ & sDestinationDrive & "\" & sLocalFileName & """ " & sImageIndex & " " & sDestinationDrive
				End if
			End if
		End if

A logolást és az UI-n levő szövegeket kivéve már lényegesen rövidebb: ha a UseUDPCast property (mindjárt megcsináljuk, ne tessék aggódni) értéke "TRUE", akkor tiltsa le a tűzfalat, a teljes image útvonalból szedje ki a fájlnevet, keresse meg és indítsa el az udp-receivert a megadott paraméterekkel, utána engedélyezze újra a tűzfalat, majd ha létezik az image fájl és a mérete megegyezik a deployment share-ben levővel, akkor írja át az sCmd-t úgy, hogy a helyi fájlt használja.

Ami az udp-receiver paraméterezését illeti: az sDestinationDrive annak a partíciónak a neve, amelyikre telepíteni készülünk, simán a gyökérbe dobja be az image fájlt. A start-teimout miatt (per pill) 20 percet vár, ha ezalatt nem indul el az image terjesztése (ezt kézzel indítom a szerveren, így biztosan összevárom a klienseket), akkor egyszerűen kilép, és - mivel nem fog létrejönni a fájl - Samba-ról olvassa. A nosync amúgy default beállítás, amikor fájlt ír, de fórumok tanúsága szerint ezt egy-két utóbbi verzióban kihagyták, úgyhogy biztos-ami-biztos ott van, a nokbd és a no-progress pedig csak azért, mert úgyse jelenik meg a konzol. A méret egyezés vizsgálat a második feltételben rém egyszerű okból kell: ha a küldő gép kidobná a multicastból pl. nemválaszolás miatt, akkor egy félkész image-t ne próbáljon telepíteni (és teljesen random, hogy ezt az ágat is sikerült tesztelnem).

Az egyetlen gond ezzel, hogy így a telepítés után ott marad az image, úgyhogy a


		oLogging.CreateEvent 5625, LogTypeInfo, "The image " & sImagePath & " was applied successfully.", Array()

sor után szúrjuk be


		If oEnvironment.Item("UseUDPCast") = "TRUE" then
			If oFSO.FileExists(sDestinationDrive & "\" & oFSO.GetBaseName(sImagePath)) Then
				oFSO.DeleteFile sDestinationDrive & "\" & oFSO.GetBaseName(sImagePath)
			End if
		End if

Megintcsak: ha UDPCast-ot kellett volna használnunk ÉS létezik az image fájl, akkor törölje az image fájlt.

Arra, hogy a UseUDPCast-ot hogyan tudjuk beletaknyolni a CustomSettings.ini-be a sablon már megadja a választ: a [Settings] szakaszban a Properties-ben van egy CustomProperty vagy hasonló nevű, "dummy" változó. Nekünk most egy Properties=UseUDPCast bőven elég, egyébként vesszővel elválasztva többet is megadhatunk. Ezután bárhol megadhatjuk a UseUDPCast=TRUE értéket, és a megfelelő gép(ek) próbálkozni fognak az udp-vel:


[Settings]
Properties=UseUDPCast

[Default]
UseUDPCast=TRUE

...

[RA:ND:OM:MA:CC:IM]
UseUDPCast=Nem ne hasznald mert csak

A szerveren indítsunk egy udp küldést:

udp-sender foo.wim

Majd PXE-bootoljuk a klienseket.

Sok sikert és jó deployolást!

[1] Ez is oprendszer-függő, ezért talán van értelme az alap RTM telepítő médiát is importálni, hogy legyen valami oprendszer, amihez köthetjük
[2] 64 bites telepítőmédiát speciel soha nem teszteltem, de működnie kellene
[3] TSGuid helyett a TaskSequenceID barátságosabb
[4] Az USMT tud offline migration-t, az MDT is ismeri (külön property van a CustomSettings.ini-ben az engedélyezésére/letiltására), de nem az igazi. Háttérképet pl. valamiért nem hozza, nem tudom miért, nem érdekel :)

Hozzászólások

Koszi a reszletes leirast, hasznos(nak tunik)! :-)
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. 

bookmarkoltam ha valaha szükségem lenne ilyesmire :)