Skocz do zawartości

Instalacja systemów z pendriva


Rekomendowane odpowiedzi

Instalacja systemów z pendriva

GUI oparte o HTA do instalacji z użyciem WinPE, dla pena lub sieci

 

 

W tym wątku opiszę jak zbudować sobie zestaw do instalacji systemów Microsoftu z wykorzystaniem środowiska WinPE.

Nie będzie to typowa instalacja polegająca na przeklepaniu komend tylko zautomatyzowane menu dostosowujące się w locie do tego co stworzymy na penie, założeniem jest jak największa uniwersalność tego środowiska.

Zasadniczo jest/będzie to zestaw dla osób które wykonują wiele instalacji (powiedzmy zawodowo) na różnych komputerach różnych brandów, to im on się przyda najbardziej co nie znaczy, że inni nie znajdą w nim nic dla siebie.

Niektórzy rozpoznają w tym wątku moją pracę z poprzedniego forum, różnica polega na tym, że tam cykl powstawał i ewoluował razem z zestawem - teraz zestaw jest zasadniczo gotowy, nie trzeba wymyślać koła od nowa a co za tym idzie powinien być o wiele bardziej przejrzysty.

Dodatkowo postanowiłem cykl podzielić na trzy fragmenty

1 - instalacja systemów NT5 z plików wim (nt5 = win 2000, xp do 2003)

2 - instalacja systemów NT6 z użyciem standardowego setupu (nt6 - vista do server 2008 r2)

3 - instalacja systemów NT5 z folderu dystrybucyjnego (ten temat z zalożenia potraktuję trochę po macoszemu, byle by był jako komplet i odpowiednik pracy z poprzedniego forum)

 

Na końcu przedstawię połączenie tych trzech zestawów w jedną spójną całość.

W międzyczasie przedstawię również zestaw startowy używających tej samej konfiguracji do zastosowania w środowisku sieciowym.

 

Sam wątek wiele łączy z opisanym już na forum wątkiem WinPE do celów diagnostyczno naprawczych. w wielu miejscach będą się one przenikać oraz odwoływać wzajemnie do siebie, sam zestaw startowy zbudowany będzie w identyczny sposób a jedyna różnica będzie w skrypcie startującym który tutaj zamiast konsoli odpali menu.

 

A oto sam zestaw do budowy pendriva startowego - w zestawie znajdują się pliki o długości zerowej które należy zastąpić ich właściwymi odpowiednikami, zostały umieszczone w celach poglądowych, ze względu na prawa firm trzecich nie mogłem ich umieścić w wersji docelowej.

instalki_winpe_wim lub instalki_winpe_wim

 

Podstawy zestawu, głównie środowisko WinPE nie będą się zmieniały, zmianie będzie ulegać sam skrypt menu.hta.

Osobom które będą próbowały zbudować zestaw w systemie xp (2003 itp) polecam przeczytanie postu jak zbudować pen boot w xp - niestety skrypt automatyczny będzie sprawiał w tym systemie problemy a i formatowanie pena może mieć znaczenie.

 

Uwaga!!

W poscie #7 link znajduje się właściwy skrypt zawierający pełną funkcjonalność wszystkich instalatorów

 

pzdr

Odnośnik do komentarza
Pomoc jest darmowa, ale proszę rozważ przekazanie dotacji na utrzymanie serwisu: klik.

Na pierwszy ogień zgodnie z obietnicą dajemy menu do instalacji systemów z rodziny 2000 (xp i 2003) z użyciem plików wim.

Najtrudniejszym dla początkującego użytkownika może być samo zbudowanie takich plików (a ze względów licencujnych nie wypada wrzucać już gotowych wersji na sieć).

Zasadniczo przygotowanie takiej instalacji to tak naprawdę puszczenie pierwszej fazy instalacji z poziomu już zainstalowanego systemu (lub systemu winpe) a następnie (po małym posprzątaniu) jego spakowanie do samego wima.

Najwygodniej całą zabawę przeprowadzić w środowisku wirtualnym (chyba, że dysponujemy nadmiarowym komputerem), przygotowujemy sobie w tym przypadku dwa dyski, jeden dla instalacji rozruchowej drugi dla przygotowania właściwego zestawu.

 

Należy sobie zainstalować system rozruchowy, standardowa instalaka xp z płyty (pliku iso) bez żadnych dodatkowych obwarowań, można ten etap zastąpić odpaleniem środowiska winpe (w tym przypadku może to być np popularny erd commadner albo inne xp mini).

 

Teraz należy sformatować nasz drugi dysk przy czym nie ma znaczenia ani format plików ani to czy będzie to dysk startowy, te atrybuty i tak nie zostaną zachowane podczas pakowania do wim.

 

Możemy już przeprowadzić zasadniczą część przygotowania zestawu, w tym celu z konsoli wydajemy polecenia:

 

cd d:\i386

winnt32.exe /makelocalsource /syspart:h /tempdrive:h /noreboot

 

 

gdzie d: - litera napędu w którym zamontowana jest nasza płyta instalacyjna windowsa a h: litera przypisana naszej partycji roboczej na drugim dysku.

 

Resztę czynności wygodniej wykonać już w systemie hosta (zakładam, że te poprzednie wykonaliśmy w środowisku wirtualnym).

Proszę podmontować sobie dysk roboczy, następnie usuwamy z katalogu "$WIN_NT$.~BT" pliki: winnt.sif, migrate.inf oraz bootsect.dat (usunięcie tych plików spowoduje, że nasz zestaw stanie się uniwersalny, do instalacji na dowolnej maszynie).

 

Teraz z pomocą narzędzia imagex (można się posiłkować nakładkami typ gimagex) z zestawu waik (jak ktoś nie ma zestawu waik i ni chce go ściągać dla samego imagex-a proponuję poszukać na sieci zestawu minimum) przechwytujemy nasz świeżo upieczony zestaw instalacyjny:

 

imagex /capture h: c:\winxppro.wim "Instalka WinXP Pro" /compress maximum

 

 

gdzie h: to oczywiście nasz dysk tymczasowy, "c:\winxppro.wim" to ścieżka i nazwa do gotowego pliku wim a "Instalka WinXP Pro" jego opis (bez znaczenie, można tu wstawić cokolwiek).

 

Oczywiście dla każdego systemu który chcemy później instalować musismy przygotować nowy wim (na końcu mozna je opcją eksport wrzucić do jednego pliku co osobiście polecam), dodatkowo pewne problemy stwarza przygotowanie instalek win 2000, po pierwsze nie chcą się one odpalać z systemów nowszych niż 2000 (ale bez problemu działają z winpe 1.5) po drugie po po przygotowaniu zestwu należy prze łapanie imagexem zastąpić jeszcze ntldr, otóż win 2000 stworzy dwa loadery, jeden już zasadniczy ntldr który jednak nie odpali instalacji i drugi $ldr$ który nie odpali się po usunięciu bootsect.dat, rozwiązaniem jest wywalenie ntldr i zmiana nazwy $ldr$ na ntldr, po instalacji właściwy loader zostanie przywrócony.

 

W poście #4 link umieściłem skrypt i opis pozwalający na zautomatyzowane zbudowanie potrzebnego zestawu.

 

uff - najtrudniejsze mamy za sobą, zdaję sobie sprawę, że może to być pewien problem dlatego nie krępujcie się pytać, chętnie wyjaśnię kwestie przygotowania takich wim, niestety dla mnie pewne zagadnienia są oczywiste i nie łatwo mi się wczuć w sytuacje w których może utknąć typowy użytkownik.

Raz przygotowane pliki wim wystarczą nam na zawsze, nie trzeba będzie do tego wracać (chyba, że zamarzy nam się nowy system, np wersja chińska xp home :) ), teraz powinno już być z górki:

 

na penie należy przygotować sobie następującą strukturę katalogów (w zestawie startowym z pierwszego postu jest już gotowa):

 

pen
- wim
-- systemy
-- pliki 
 -- dp

 

do katalogu "wim" bezpośrednio wrzucamy nasze świeżo przygotowane pliki wim (lub plik),

w katalogu "systemy" tworzymy pliki konfiguracyjne dla poszczególnych instalacji, wg nich menu.hta automatycznie zbuduje zestaw odpowiednich butonów i list wyboru,

katalog "pliki\dp" służy do przechowywania skryptów dla programu diskpart które mogą być użyte do automatycznego przygotowania dysku,

sam katalog "pliki" jest też proponowanym katalogiem dla plików dodatkowych towarzyszących poszczególnym systemom, właściwy katalog określa się jednak bezpośrednio w plikach konfiguracyjnych.

 

Co tak naprawdę oznaczają pliki towarzyszące (a właściwie katalogi i pliki), otóż są to po pierwsze sterowniki massstorage, po drugie pliki poszczególnych producentów służące do preaktywacji systemu na oryginalnym komputerze, katalog %OEM% towarzyszący plikom odpowiedzi podczas instalacji nienadzorowanej i wreszcie same pliki odpowiedzi.

 

Pliki konfiguracyjne zostały pomyślane tak, że można z użyciem kilku podstawowych obrazów wim (po jednym dla każdej edycji systemu) przygotować wiele różnych scustomizowanychzestawóów/batonów instalacyjnych, np można stworzyć dwa identyczne zestawy różniące się plikiem odpowiedzi czy też katalogiem $OEM$ ale korzystajace ze wspólnych innych plików a przede wszystkim z tego samego obrazu podstawowego np. "win xp pro pl sp3" .

Struktura pliku konfiguracyjnego wygląda następująco:

 

[nazwa]
Windows XP PRO SP2 PL
[plik wim]
windowsy.wim
[index]
3
[pliki oembios]
wim\pliki\winxp\OEM
[plik massstorage]
wim\pliki\winxp\MassStorage
[pliki oem]
wim\pliki\winxp\$OEM$
[nienadzorowana]
wim\pliki\winxp\unattend_pro.txt
[key]
MVF4D-W774K-MC4VM-QY6XY-R38TB

 

w sekcji [nazwa] mamy tekst który pojawi się na batonie w mwnu,

w sekcji [plik wim] mamy nazwę pliku zawierającego obraz naszego systemu,

[index] określa index konkretnego obrazu w pliku wim dla naszego systemu (jeżeli dla każdego systemu stworzymy osobny wim to index będzie zawsze wynosił "1")

[pliki oembios] - w tej sekcji podajemy pełną ścieżkę (względem naszego pena) do katalogu zawierającego pliki oembios producentów systemów używane do preaktywacji, tą metodą można też dokonać konwersji między wersjami OEM <> VLK <> RETAIL, w zestawie startowym znajduje się przykładowy plik i katalog dla takiej konwersji.

[plik massstorage] - ścieżka do katalogu zawierającego sterowniki kontrolerów dyskowych (ahci, raid), format tych sterowników opisałem w poście: link, a dokładniejszy sposób przygotowania w poście: link, w zestawie startowym są też przykładowe pliki dla kontrolerów intela i amd (nie najnowsze wersje ale powinny działać i dać pewien pogląd na ich budowę),

[pliki oem] - ścieżka do katalogu $OEM$, katalog ten w połączeniu z plikiem odpowiedzi dla instalacji nienadzorowanej służy do bardzo zaawansowanych instalacji podczas których chcemy skonfigurować system, zainstalować dodatkowe programy lub sterowniki itp.

[nienadzorowana] - ścieżka do pliku odpowiedzi dla instalacji nienadzorowanej

[key] - domyślny klucz instalacyjny którego użycie możemy ustawić w przypadku gdy nie używamy instalacji nienadzorowanej - podany tutaj przykładowy klucz jest kluczem SLP który podaje MS na swoich stronach, można go uzywać zamiennie z każdym kluczem przypisany danemu brandowi

 

Opis użycia samych opcji zdefiniowanych przez powyższe zmienne jak i sam skrypt menu znajduje się w poście link, nie będę ich tutaj niepotrzebnie dublował.

 

Wypada troszkę napisać w tym miejscu o obostrzeniach jakie należało przyjąć aby taki zestaw działał:

po pierwsze - użycie sterowników mass storage bez instalacji nienadzorowanej wymusza małe oszustwo które powoduje, że de facto faza tekstowa instalacji przebiegnie i tak w sposób nienadzorowany (jest to ograniczenie samego instalatora windows)

po drugie - w przypadku instalacji nadzorowanej tworzy się minimalistyczny plik winnt.sif dzięki któremu jest możliwe w ogóle przeprowadzenie instalacji ze źródła lokalnego, plik taki wygląda następująco:

 

[data]
msdosinitiated=1
floppyless=1
AutoPartition=1
UseSignatures=yes
OriSrc=A:\I386
OriTyp=5

 

po trzecie w przypadku własnych plików odpowiedzi powyższą sekcję należy również umieścić ponieważ nasz plik odpowiedzi automatycznie staje się plikiem winnt.sif

po czwarte w przypadku własnego pliku odpowiedzi nie należy w nim umieszczać sekcji odpowiedzialnej za instalację sterowników massstorage, tą należy dodać korzystając z odpowiedniego katalogu.

 

Wiele razy odwoływałem się do plików oembios, takie pliki są bardzo przydatne jeśli mamy do czynienia z oryginalnym komputerem (np laptopy), możemy wtedy zainstalować system z kluczem SLP (tak jak to robią producenci) i uniknąć kłopotliwej aktywacji telefonicznej z jaką wiąże się użycie klucza "z naklejki". Pliki oembios dla różnych producentów można znaleźć np w tym miejscu link dla XP (win 2003 wymaga własnych plików tego typu, zakładam że zainteresowane osoby znajdą je bez trudu), w tym miejscu zakładam, że tej funkcjonalności będziecie używać zgodnie z licencją a nie do obchodzenie zabezpieczeń windowsa.

 

Osoby zainteresowane użyciem katalogu &OEM& zapraszam do zapoznania się z moimi odpowiedziami na posty @GoblinWizard-a, mogą one dać pogląd na to jak potężnym narzędziem był taki zestaw w swoim czasie (dziś xp stracił na znaczeniu ale zestaw nadal jest potężny choć mniej przydatny :) ) - link oraz link

 

I to tyle jeżeli chodzi o tą sekcję - zapraszam do zadawania pytań i dyskusji.

 

pzdr

Odnośnik do komentarza

Często powtarzającym się pytaniem na różnych forach jest pytanie o możliwość instalacji systemu Windows na napędzie USB.

Można znaleźć kilka opisów wykonania tego zadania, wszystkie sprowadzają się do takiej zmiany w plikach instalacyjnych aby odpowiednie sterowniki USB startowały w trybie "Bus Master".

A dlaczego coś zmienić, może dać po prostu stworzyć odpowiednie sterowniki massstorage?

Już się domyślacie, że odpowiedź jest twierdząca, poniżej linki do odpowiedniej paczki, są to sterowniki przystosowane do użycia z moim zestawem ale oczywiście można ich użyć z dyskietki F6 (a jak już ktoś koniecznie musi to zintegrować nLiteem).

 

USB_32 lub USB_32.

 

W przypadku USB3 co prawda cała zabawa miałaby więcej sensu ale proszę pamiętać, że dostępne na rynku rozwiązania tego typu posiadają własne dedykowane sterowniki i instalacja z ww paczką się nie powiedzie.

 

Sterowniki wykorzystują pliki w wersji jaka jest natywnie dostępna w Win XP sp3 (oczywiście na windows update istnieje wersja nowsza).

 

Ponieważ GUI generowane przez podany przeze mnie skrypt menu.hta domyślnie blokują możliwość wyboru napędu usb jako docelowego należy wprowadzić w skrypcie małą poprawkę.

proszę linijkę:

 

Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk Where DriveType = 3 AND DeviceID <> 'x:' AND DeviceID <> '" & arrCommands(1) & "'")

 

zastąpić:

 

Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk Where (DriveType = 3 OR DriveType = 2) AND DeviceID <> 'A:' AND DeviceID <> 'X:' AND DeviceID <> '" & arrCommands(1) & "'")

 

Napęd instalacyjny nadal jest przez menu pomijany więc nie ma obaw, że skasujemy sobie nasze repozytorium, jednakże dobrze jest po przejściu fazy w GUI usunąć napęd na resztę czasu instalacji w przeciwnym wypadku instalator systemu potrafi utworzyć na tym napędzie konfigurację startową (i nadpisać botsektor), pamiętajmy że po dodaniu powyższych sterowników wszystkie napędy usb mass storage rozpoznawane przez te sterowniki są dla instalatora dostępne więc jeżeli w łańcuchu dos będą wyżej postawione zostaną potraktowane jako napęd startowy, zupełnie jak instalacja w konfiguracji wielodyskowej.

 

Proszę nie używać w tym przypadku skryptów autoamytcznego przygotowania dysku, nasz docelowy usb może wylądować pod różnym numerem w systemie.

Odpowiednią partycję należy przygotować ręcznie w diskpart lub innym narzędziem zewnętrznym.

 

Jeżeli podczas instalacji pojawi się informacja o błędzie w setup.c proszę ją zignorować, występuje ona na niektórych fabrycznie sformatowanych pamięciach flash, aby jej uniknąć można wcześniej pena potraktować narzędziem HP do formatowania pamięci przenośnych.

 

pzdr

 

ps

sama koncepcja nie jest w 100% moja, bazowałem w dużej części na rozwiązaniu dostępnym na forum MSFN w temacie link

Odnośnik do komentarza
  • 2 tygodnie później...

Dla osób którym przygotowanie plików wim z systemami instalacyjnymi sprawia problem przygotowałem skrypt który mocno automatyzuje cały proces.

Koncepcja skryptu polega na założeniu, że w standardowym pliku instalacyjnym windowsa txtsetup.sif pliki sekcji ~BT mają określony format, w kilku artykułach opisujących tworzenie płyt multisystemowych jest ten fakt wykorzystywany.

Miedzy innymi @Picasso podparła się tym w swoim opisie - pozwolę sobie zacytować:

 

picasso napisał:

 

Metoda 2 - wyciągnięcie listy plików z pliku TXTSETUP.SIF:

Ta metoda jest jeszcze bardziej męcząca. Polega ona na zrobieniu listy na podstawie pliku TXTSETUP.SIF, a następnie ręcznym przekopiowaniu plików z folderu i386 do skorelowanego bootfolderu.

disc.gifG:
---- folder.gifDVD
-------- folder.gifSETUP
------------ folder.gifWINXP
---------------- folder.gifPRO (cała zawartość płytki)
-------------------- folder.gifi386 (tu siedzi TXTSETUP.SIF)

W tym pliku w sekcjach [sourceDisksFiles...] wszystkie pliki, które mają w ciągu kreskę przed lub po numerze np:

kbdus.dll = 1,,,,,,_5,2,0,0,,1,2
1394bus.sys = 100,,,,,,3_,4,1,,,1,4


... to są właśnie pliki, które mają się znaleźć w bootfolderze. Kto by to "oczami" sprawdzał! Można sobie uprościć robiąc listę w trybie automatycznym przez plik BAT. Wystarczy w folderze i386 utworzyć plik BAT o poniższej zawartości i go uruchomić:
 


type TXTSETUP.SIF | findstr /r ",_[1-9] ,[1-9]_" > C:\LOG.TXT

 

Na C:\ powstanie plik LOG.TXT zawierający listę plików. Na podstawie tej listy należy z i386 przekopiowć: wszystkie pasujące spakowane pliki (one nie mają tam rozszerzeń EXE / SYS tylko ich zcabowane odpowiedniki EX_ / SY_ etc.) + TXTSETUP.SIF + folder system32 do nowego bootfolderu.

 

Oczywiście ręczne robótki nie wchodzą w grę - my cały proces sobie troszkę zautomatyzujemy, dodatkowo dla naszych potrzeb w katalogu muszą się znaleźć też pliki setupu i kilka podstawowych - nadrzędnych sterowników.

 

Oto sam skrypt vbs. (proszę pamiętać o zapisaniu z odpowiednim rozszerzeniem):

 

On Error Resume Next

Set objShell = CreateObject("WScript.Shell")
Set objRegEx = New RegExp
'Set objRegEx = CreateObject("VBScript.RegExp")
Set fso = CreateObject("Scripting.FileSystemObject")

fso.createfolder "instalka"
fso.createfolder "instalka\$WIN_NT$.~LS"
fso.createfolder "instalka\$WIN_NT$.~LS\i386"
fso.createfolder "instalka\$WIN_NT$.~BT"

Set objFile = fso.OpenTextFile("i386\TXTSETUP.SIF", 1, True)

objRegEx.Pattern = ",[1-9]_|,_[1-9]"

Do Until objFile.AtEndOfStream
   strSearchString = objFile.ReadLine
   Set colMatches = objRegEx.Execute(strSearchString)  
       For Each strMatch in colMatches   
          FSO.CopyFile "I386\"& left(split(strSearchString)(0),Len(split(strSearchString)(0))-1) & "_" ,"instalka\$WIN_NT$.~BT\"
       Next
Loop

objFile.Close

FSO.CopyFile "I386\biosinfo.inf" ,"instalka\$WIN_NT$.~BT\"
FSO.CopyFile "I386\bootfont.bin" ,"instalka\$WIN_NT$.~BT\"
FSO.CopyFile "I386\kbdpl1.dll","instalka\$WIN_NT$.~BT\"
FSO.CopyFile "I386\ntdetect.com","instalka\$WIN_NT$.~BT\"
FSO.CopyFile "I386\setupldr.bin","instalka\$WIN_NT$.~BT\"
FSO.CopyFile "I386\setupreg.hiv","instalka\$WIN_NT$.~BT\"
FSO.CopyFile "I386\spcmdcon.sys","instalka\$WIN_NT$.~BT\"
FSO.CopyFile "I386\txtsetup.sif","instalka\$WIN_NT$.~BT\"
FSO.CopyFile "I386\ksecdd.sys","instalka\$WIN_NT$.~BT\"
FSO.CopyFile "I386\ntfs.sys","instalka\$WIN_NT$.~BT\"

FSO.CopyFolder "I386\system32","instalka\$WIN_NT$.~BT\"

FSO.CopyFile "I386\*" , "instalka\$WIN_NT$.~LS\i386"
FSO.CopyFolder "I386\system32", "instalka\$WIN_NT$.~LS\i386\"

FSO.CopyFolder "I386\uniproc", "instalka\$WIN_NT$.~LS\i386\"
FSO.CopyFolder "I386\asms", "instalka\$WIN_NT$.~LS\i386\"


FSO.CopyFile "I386\bootfont.bin" ,"instalka\"
FSO.CopyFile "I386\ntdetect.com","instalka\"
FSO.CopyFile "I386\txtsetup.sif","instalka\"
FSO.CopyFile "I386\setupldr.bin","instalka\ntldr"


Set objFile = fso.CreateTextFile("instalka\$WIN_NT$.~BT\disk101",  True)
objFile.Close
Set objFile = fso.CreateTextFile("instalka\$WIN_NT$.~BT\disk102",  True)
objFile.Close
Set objFile = fso.CreateTextFile("instalka\$WIN_NT$.~BT\disk103",  True)
objFile.Close
Set objFile = fso.CreateTextFile("instalka\$WIN_NT$.~BT\disk104",  True)
objFile.Close

Wscript.Quit

 

Skrypt należy umieścić w dowolnym katalogu na dysku, w tym samym katalogu należy umieścić katalog i386 z płyty instalacyjnej windowsa (skrypt powinien działać z systemami od 2000 poprzez xp do 2003 R2) a następnie odpalić z uprawnieniami administracyjnymi (jeżeli mamy aktywny UAC proszę to zrobić z poziomu konsoli uruchomionej w trybie administratora po uprzednim ustawieniu fokusu na nasz katalog).

 

przykład - załóżmy, że nasz katalog roboczy znajduje się na dysku e: i nazywa się "tymczasowy", odpalamy konsolę z uprawnieniami administratora i wydajemy polecenie (zakładam, że katalog i386 już się znalazł w tym katalogu):

 

 

cd /d e:\tymczasowy

makewimfolder.vbs

 

skrypt można nazwać dowolnie, makewimfolder.vbs to jedynie przykład, ważne jest rozszerzenie.

 

Wynikiem działania skryptu będzie katalog "instalka" zawierający prawidłową strukturę plików i katalogów dla celów instalacyjnych. Teraz wystarczy ten katalog przechwycić do pliku wim z pomocą imagex-a (można się posiłkować nakładką Gimagex):

 

 

imagex /capture e:\tymczasowy\instalka naszwim.wim "nasz przykładowy opis dla obrazu" /compress maximum

 

"nasz przykładowy opis dla obrazu" - opis który tutaj wstawimy jest mało istotny dla działania zestawu, może się okazać przydatny jeżeli będziemy budować pliki zawierające wiele obrazów jednocześnie, dzięki temu łatwiej je będzie odróżnić.

 

W ten sposób utworzony plik różni się troszeczkę od tego otrzymanego metodą "pierwszej fazy instalacji" ale różnice nie mają znaczenia dla jego użycia dla naszych potrzeb. Utworzone pliki sprawdziłem na maszynie wirtualnej jak i fizycznym komputerze (zarówno instalacje standardowe jak i nienadzorowane).

 

Skrypt przeznaczony dla 32 bitowych polskojęzycznych edycji systemów

Jeżeli ktoś chciałby uzyć go na innej wersji językowej należy poprawić linijkę kopiującą plik obsług klawiatury - w edycji polskiej "kbdpl1.dll"

 

 

pzdr

Odnośnik do komentarza
  • 2 tygodnie później...

W poście #76 link równoległego wątku umieściłem skrypt służący do instalacji systemów z linii Vista, jest to oczywiście zarówno obiecana wcześniej sekcja jak i rozwinięcie wersji którą opisywałem na poprzednim forum.

Słowo wyjaśnienia - po co w ogóle budować skrypt służący do tego celu skoro instalator systemów z tej linii wystarczy przekopiować na pena i już działa a nawet sam MS przygotował narzędzie które tą "robotę" upraszcza?

Otóż dwa słowa - elastyczność i automatyzacja. O ile przeciętny "Kowalski" niewiele skorzysta na takim zestawie (choć może go oczywiście stworzyć dla celów poznawczych) to będzie on nieocenionym ułatwieniem dla osób które tworzą różne scenariusze instalacyjne z preinstalacją programów i sterowników czy też mają do czynienia z oryginalnymi komputerami różnych producentów i chcą sobie zautomatyzować proces prekonfiguracji czy choćby w łatwy sposób wykorzystać mechanizm SLP bez potrzeby ręcznej podmiany plików.

Oczywiście samo "menu" jest tylko narzędziem umożliwiającym takie zastosowanie natomiast samą funkcjonalność zyskamy dopiero tworząc odpowiednie pliki odpowiedzi dla instalacji nienadzorowanej czy też repozytoria z zestawami programów, tweaków itp.

 

Wyjaśnienia wymaga też fakt istnienia oddzielnych sekcji dla systemów pierwszej generacji vistowatych (Vista i 2008) oraz generacji drugiej (Siódemka i 2008 R2), otóż okazuje się (wbrew temu co można by wywnioskować z dokumentacji pakietów waik czy opk), że nowy setup zupenie nie radzi sobie z instalacją starszych systemów i trzeba w przypadku Visty skorzystać ze starszych plików - co prawda faza WinPE instalacji przebiegnie prawidłowo ale już po restarcie przywita nas niestety błąd.

 

Tak wygląda drzewo folderów współpracujące z tym zestawem

 

pen
- Seven_Installer
- - seven_unattend
- - - AOems
- - - dp

- Vista_Installer
- - vista_unattend
- - - AOems
- - - dp

 

Katalog Seven_installer (i analogicznie Vista_installer) zawiera pliki setupu odpowiednie dla danego systemu, najprościej użyć zawartości katalogu "sources" z płyty instalacyjnej danego systemu, co prawda wszystkie pliki i katalogi nie są potrzebne ale najprościej wrzucić całość, oczywiście kasujemy słynny plik ei.cfg, możemy też śmiało skasować pliki katalogowe poszczególnych edycji (pliki clg) które nie są potrzebne do instalacji, dodatkowo w przypadku siódemki nie jest wymagany plik boot.wim co pozwoli zaoszczędzić sporo miejsca, niestety Vista oczekuje istnienia tego pliku choć nie wykluczone, że można ją ogłupić plikiem pustym (raczej nie sięga do jego zawartości).

 

Jeżeli chcemy używać jednocześnie setupu dla stacji roboczych i serwerów należy pamiętać o przekopiowaniu plików licencji dla obu zestawów, to którego setupu natomiast użyjemy nie ma znaczenia - różnica wystąpi tylko w kolorze tła i okienek instalacyjnych.

 

Setup domyślnie również plików install.wim szuka w tym katalogu a nie w katalogu sources, niżej napiszę jak to można obejść.

 

Katalogi seven_unattend i vista_unattend zawierają oprócz następnych podkatalogów również pliki xml będące włąsnie plikami odpowiedzi dla instalacji nienadzorowanej przy czym skrypt traktuje całość prostolinijnie i doda do menu każdy plik znajdujący się wewnątrz tego katalogu.

 

W katalogu AOems (skrót od alternatywne Oem-s) znajdują się podkatalogi (tak podkatalogi a nie bezpośrednio pliki itp) których zawartość może zostać użyta jako alternatywne katalogi $OEM$ przy czy katalogi te nie zastępują głównej instancji tego katalogu ale dodają się do niego (a w przypadku zdublowanej zawartości nadpisują ją), scenariuszy wykorzystania tego mechanizmu jest dość dużo ja przedstawię niżej jeden współpracujący z konkretnym plikiem odpowiedzi.

 

W katalogu dp znajdują się natomiast skrypty diskparta do zautomatyzowanej konfiguracji dysku, jest to w gruncie rzeczy zbędna, nadmiarowa funkcjonalność (samą konfigurację można wpisać w pliku xml) ale w pewnych konkretnych zastosowaniach przydatna. na pewno przydatna w instalacjach w których nie będziemy korzystać z pliku odpowiedzi.

 

linki do zestawu - zawierają tylko strukturę katalogów i kilka przykładowych plików - wymagają użycia zestawu z postu #1 link:

 

vista-seven lub vista-seven

 

Obiecałem metodą na obejście ograniczenia źródła plików instalacyjnych wim (a także nawy), otóż w tym celu należy zbudować minimalistyczny plik plik odpowiedzi zawierający tylko źródło instalacji (w pełniejszych plikach odpowiedzi należy pamiętać o dodaniu odpowiedniej sekcji):

<?xml version='1.0' encoding='utf-8'?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
   <settings pass="windowsPE">
       <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>
                       <Path>%litera%\Seven_Installer\install_64.wim</Path>
                   </InstallFrom>
                   <WillShowUI>OnError</WillShowUI>
               </OSImage>
           </ImageInstall>
       </component>
    </settings>
</unattend>

 

W ścieżce docelowej deko przykładu wykorzystałem fakt, że skrypt startowy menu utworzył w systemie zmienną "%litera%" odpowiadającą punktowi montowania naszego pendriva, dzieki temu podajemy ścieżkę bezwzględną do pliku wim nie martwiąc się zagnieżdżeniem katalogów.

W przykładzie mamy ścieżkę do pliku z obrazami systemów 64 bitowych a jednak w zmiennej processorArchitecture pliku odpowidzi mamy podane "x86" co może wydawać się pewną niekonsekwencją.

Otóż wszystko jest w porządku, zmienna ta obliguje w jakim kontekście wykonywany jest dany przebieg a ponieważ my dopalamy setup z WinPE w wersji 32 bit to i kontekst dla fazy WinPe musi być taki sam.

Oczywiście w przypadku pełniejszych plików odpowiedzi należy pamiętać, że już późniejsze fazy będą się w przypadku systemu 64 bit odbywać właśnie w takim kontekście i już od fazy "specialize" zmienna "processorArchitecture" przyjmuje postać "amd64" (lub o czym nie wszyscy wiedzą dla niektórych komponentów może to być też wow64).

 

A oto przykład dość rozbudowanego pliku odpowiedzi - ze względu na jego długość zamknięty w klamrach:

 

 

<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
   <settings pass="windowsPE">
       <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">
           <ComplianceCheck>
               <DisplayReport>Never</DisplayReport>
           </ComplianceCheck>
           <Diagnostics>
                <OptIn>false</OptIn>
            </Diagnostics>
            <DiskConfiguration>
               <Disk wcm:action="add">
                   <CreatePartitions>
                       <CreatePartition wcm:action="add">
                           <Order>1</Order>
                           <Size>512</Size>
                           <Type>Primary</Type>
                       </CreatePartition>
                       <CreatePartition wcm:action="add">
                           <Order>2</Order>
                           <Type>Primary</Type>
                           <Extend>true</Extend>
                       </CreatePartition>
                   </CreatePartitions>
                   <ModifyPartitions>
                       <ModifyPartition wcm:action="add">
                           <Format>NTFS</Format>
                           <Label>WINRE</Label>
                           <Order>1</Order>
                           <PartitionID>1</PartitionID>
                           <Active>true</Active>
                           <TypeID>0x27</TypeID>
                       </ModifyPartition>
                       <ModifyPartition wcm:action="add">
                           <Format>NTFS</Format>
                           <Label>WIN7</Label>
                           <Order>2</Order>
                           <PartitionID>2</PartitionID>
                           <Extend>false</Extend>
                       </ModifyPartition>
                   </ModifyPartitions>
                   <DiskID>0</DiskID>
                   <WillWipeDisk>true</WillWipeDisk>
               </Disk>
               <WillShowUI>OnError</WillShowUI>
           </DiskConfiguration>
           <ImageInstall>
               <OSImage>
                   <InstallFrom>
                       <MetaData wcm:action="add">
                           <Key>/IMAGE/INDEX</Key>
                           <Value>4</Value>
                       </MetaData>
                       <Path>%litera%\Seven_Installer\install_seven64.wim</Path>
                   </InstallFrom>
                   <InstallTo>
                       <DiskID>0</DiskID>
                       <PartitionID>2</PartitionID>
                   </InstallTo>
                   <WillShowUI>OnError</WillShowUI>
               </OSImage>
           </ImageInstall>
           <UserData>
               <ProductKey>
                   <Key>xxxxx-xxxxx-xxxxx-xxxxx-TCVBD</Key>
                   <WillShowUI>OnError</WillShowUI>
               </ProductKey>
               <AcceptEula>true</AcceptEula>
           </UserData>
       </component>
       <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>pl-PL</UILanguage>
           </SetupUILanguage>
           <UILanguage>pl-PL</UILanguage>
           <SystemLocale>pl-PL</SystemLocale>
           <UserLocale>pl-PL</UserLocale>
           <InputLocale>0415:00001045</InputLocale>
       </component>
     <component name="Microsoft-Windows-PnpCustomizationsWinPE" 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">
        <DriverPaths>
           <PathAndCredentials wcm:keyValue="1" wcm:action="add">
              <Path>%litera%\Seven_Installer\seven_unattend\$WinPEDriver$</Path> 
           </PathAndCredentials>
        </DriverPaths>
     </component>
   </settings>
   <settings pass="specialize">
       <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>0415:00001045</InputLocale>
           <SystemLocale>pl-PL</SystemLocale>
           <UILanguage>pl-PL</UILanguage>
           <UILanguageFallback>pl-PL</UILanguageFallback>
           <UserLocale>pl-PL</UserLocale>
       </component>
       <component name="Microsoft-Windows-Deployment" 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">
           <RunSynchronous>
               <RunSynchronousCommand wcm:action="add">
                   <Order>10</Order>
                   <Path>%systemdrive%\tmpdrive\$WinPEDriver$\amd64\dpinst.exe</Path>
                   <Description>Instalacja sterowników</Description>
               </RunSynchronousCommand>

               <RunSynchronousCommand wcm:action="add">
                   <Order>2</Order>
                   <Path>"%systemdrive%\tmpdrive\$progsy$\Adobe\flashplayer10_2_p2_32bit_activex_011011.exe" /install</Path>
                   <Description>Install VMware Tools</Description>
               </RunSynchronousCommand>
               <RunSynchronousCommand wcm:action="add">
                   <Order>3</Order>
                   <Path>"%systemdrive%\tmpdrive\$progsy$\Adobe\flashplayer10_2_p2_32bit_plugin_011011.exe" /install</Path>
                   <Description>Install VMware Tools</Description>
               </RunSynchronousCommand>

               <RunSynchronousCommand wcm:action="add">
                   <Order>1</Order>
                   <Path>msiexec /i "%systemdrive%\tmpdrive\$progsy$\vmware\VMware Tools64.msi" ADDLOCAL=ALL /qn /norestart REBOOT=ReallySuppress</Path>
                   <Description>Install VMware Tools</Description>
               </RunSynchronousCommand>
           </RunSynchronous>
       </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">
           <ProductKey>xxxxx-xxxxx-xxxxx-xxxxx-TCVBD</ProductKey>
           <OEMInformation>
               <HelpCustomized>false</HelpCustomized>
               <Manufacturer>FixitPC</Manufacturer>
               <Model>Virtuall</Model>
               <SupportHours>24/7</SupportHours>
               <SupportPhone></SupportPhone>
               <SupportURL>https://www.fixitpc.pl/</SupportURL>
               <Logo>c:\windows\system32\oem\logo.bmp</Logo>
           </OEMInformation>
           <RegisteredOrganization>Home</RegisteredOrganization>
           <RegisteredOwner>Fixit</RegisteredOwner>
           <ShowWindowsLive>false</ShowWindowsLive>
           <ComputerName>Fixit-PC</ComputerName>
       </component>
      <component name="Microsoft-Windows-LUA-Settings" 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"> 
           <EnableLUA>false</EnableLUA>
      </component>  
       <component name="Microsoft-Windows-SystemRestore-Main" 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">
           <DisableSR>1</DisableSR>
       </component>
       <component name="Microsoft-Windows-IE-InternetExplorer" 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">
           <FavoritesList>
               <FavoriteItem wcm:action="add">
                   <FavID>FAV01</FavID>
                   <FavTitle>Fixit PC</FavTitle>
                   <FavURL>https://www.fixitpc.pl/</FavURL>
               </FavoriteItem>
           </FavoritesList>
           <StartPages>
               <StartPage wcm:action="add">
                   <StartPageKey>START1</StartPageKey>
                   <StartPageUrl>https://www.fixitpc.pl</StartPageUrl>
               </StartPage>
           </StartPages>
           <DisableFirstRunWizard>true</DisableFirstRunWizard>
           <DisableWelcomePage>true</DisableWelcomePage>
           <PlaySound>false</PlaySound>
           <ShowInformationBar>false</ShowInformationBar>
           <FilterLevel>Medium</FilterLevel>
           <BlockPopups>yes</BlockPopups>
           <ShowMenuBar>true</ShowMenuBar>
       </component>
   </settings>
   <settings pass="oobeSystem">
       <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">
          <AutoLogon>
               <Enabled>true</Enabled>
               <Username>Administrator</Username>
           </AutoLogon>
           <FirstLogonCommands>
               <SynchronousCommand wcm:action="add">
                   <Order>1</Order>
                   <Description>Ustaw temat</Description>
                   <RequiresUserInput>false</RequiresUserInput>
                   <CommandLine>cmd /c reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Themes /v CurrentTheme /t REG_SZ /d %ResourceDir%\themes\oem.theme /f</CommandLine>
               </SynchronousCommand>
               <SynchronousCommand wcm:action="add">
                   <Order>2</Order>
                   <Description>Install Opera</Description>
                   <RequiresUserInput>false</RequiresUserInput>
                  <CommandLine>%systemdrive%\tmpdrive\$progsy$\opera\Opera_1101_1179_int.exe /silent /launchopera 0 /desktopshortcut 1 /quicklaunchshortcut 1 /setdefaultbrowser 1 /allusers</CommandLine>
                </SynchronousCommand>
                <SynchronousCommand wcm:action="add">
                   <Order>5</Order>
                   <Description>antyeko</Description>
                   <CommandLine>powercfg -setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c</CommandLine> 
               </SynchronousCommand>
               <SynchronousCommand wcm:action="add">
                   <Order>6</Order>
                   <Description>antyeko2</Description>
                   <CommandLine>powercfg -x -monitor-timeout-ac 0</CommandLine> 
               </SynchronousCommand>
               <SynchronousCommand wcm:action="add">
                   <Order>7</Order>
                   <Description>antyeko3</Description>
                   <CommandLine>powercfg -x -disk-timeout-ac 0</CommandLine> 
               </SynchronousCommand>
               <SynchronousCommand wcm:action="add">
                   <Order>8</Order>
                   <Description>antyeko4</Description>
                   <CommandLine>powercfg -h off</CommandLine> 
               </SynchronousCommand>
               <SynchronousCommand wcm:action="add">
                   <Order>20</Order>
                   <RequiresUserInput>false</RequiresUserInput>
                   <Description>Install OEM certificate</Description>
                   <CommandLine>cmd.exe /c cscript %SystemRoot%\system32\slmgr.vbs -ilc %SystemRoot%\System32\OEM\certyfikat.xrm-ms</CommandLine>
               </SynchronousCommand>
               <SynchronousCommand wcm:action="add">
                   <Order>30</Order>
                   <Description>Oczyszczanie</Description>
                   <RequiresUserInput>false</RequiresUserInput>
                   <CommandLine>cmd.exe /c rmdir /s /q %systemdrive%\tmpdrive</CommandLine>
               </SynchronousCommand>
           </FirstLogonCommands>
           <OOBE>
               <HideEULAPage>true</HideEULAPage>
               <ProtectYourPC>3</ProtectYourPC>
               <SkipUserOOBE>true</SkipUserOOBE>
               <SkipMachineOOBE>true</SkipMachineOOBE>
               <NetworkLocation>Other</NetworkLocation>
           </OOBE>
           <VisualEffects>
               <FontSmoothing>ClearType</FontSmoothing>
           </VisualEffects>
       </component>
   </settings>
   <cpi:offlineImage cpi:source="wim:Windows 7 ULTIMATE" xmlns:cpi="urn:schemas-microsoft-com:cpi"></cpi:offlineImage>
</unattend>

 

 

 

Po krótce - co ten plik robi?

Po pierwsze ustawia konfigurację dysków, tworzy dwie partycje, systemową i startową z których jedna zostanie później zablokowana dla edycji przez nadanie znacznika OEM.

Ustawia nam źródło jak i miejsce docelowe instalacji (\równo plik jak i konkretny obraz), pozwala na instalację sterowników massstorage dla fazy WinPE, następnie instaluje kilka programów (tutaj pakiet dla Vmware + dla przykładu flash player) oraz sterowniki z pomocą dpinst (dość dobra metoda, co prawda setup potrafi skorzystać z własnego mechanizmu ale z praktyki wiem, że dpinst daje większą pewność).

Dalej ustawiamy informacje OEM które pojawią się we właściwościach systemu (w przykładzie przypisane do naszego forum)

Dalej wyłączamy przywracanie systemu i UAC (to jak kto woli, ja domyślnie wyłączam)

Ustawiamy opcje Internet Explorera - strona startowa i zachowanie, wyłącznie wizarda pierwszego uruchomienia itp.

W tej fazie (specialize) podajemy też właściwy klucz aktywacyjny systemu (klucz podany w fazie WinPE jest tylko kluczem instalacyjnym służącym do wybrania konkretnego obrazu z pliku wim i może zostać pominięty, o ile w przypadku siódemki plik ten przechodzi dalej to w przypadku visty już nie i należy pamiętać o późniejszym jego podaniu).

W następnej fazie (OOBE) mamy ustawione automatyczne logowanie na konto Administratora (ten plik odpowiedzi jest zbudowany z myślą o potraktowaniu go sysprepem dlatego nie jest stworzone inne konto)

Tutaj też są instalowane programy i wprowadzone ustawienia które z różnych względów nie udają się we wcześniejszym etapie <RunSynchronous>, najczęściej to właśnie w tym etapie większość osób instaluje wszystko co nie koniecznie jest najlepszy scenariuszem, mój przykład w tym etapie ustawia temat (z wykorzystaniem rejestru ponieważ domyślny mechanizm ma błędy które uniemożliwiają pełną customizację), instaluję też przeglądarkę, ustawiam profil zasilania (w przykładzie wyłączamy wszystkie oszczędzacze przeszkadzacze). instaluję prawidłowy, zgodny z komputerem certyfikat oem (plik licencji), w ostatnim etapie robimy sprzątanko (jeżeli ten wpis nie zadziałą i na końcu zostały śmieci jest to sygnał, że któryś wpis instalujący programy zewnętrzne zawiódł - w przykładzie najczęściej zawodzi instalacja toolsów dla vmware która zależnie od wersji bywa bardzo kapryśna, pocieszające że na maszynie fizycznej nie trzeba tego instalować :) ).

Na koniec ustawiamy sobie wszystko ta, żeby nas okienko OOBE nie męczyło.

 

Plikowi oczywiście towarzyszy podkatalog AOem z odpowiednią zawartością - u mnie nazwany "fixit" a w nim typowe dla tego mechanizmu podkatalogi: "$$" którego zawartość ląduje w katalogu windowsa (tutaj mamy pliki oobe, plik z ustawionym tematem, pliki licencji, kursorki itp) oraz katalog $1 którego zawartość wyląduje w głównym drzewie partycji instalacyjnej windowsa, ta zawartość jest u mnie potraktowana jako katalog tymczasowy który pod koniec instalacji zostaje (powinien zostać) usunięty, zawiera on programy i starowniki w ścieżka które są podane w pliku odpowiedzi.

 

myślę, że filmiki które postaram się niedługo wrzucić pokażą potęgę (i prostotę) takiego sposobu instalacji.

 

pzdr

Odnośnik do komentarza

No i przyszedł czas na dokończenie cyklu. W poście #77 link równoległego wątku znajduje się skrypt służący do budowy menu instalacji systemów linii XP z użyciem repozytorium lokalnego.

Jest to na pewno łatwiejsza do przygotowania wersja tego samego co oferuje instalacja z plików wim. W przeciwieństwie natomiast do plików wim ma ona penwe ograniczenie, nie da si tym sposobem zainstalować windows 2000 (pewnie dla większości z was to żadna wada)

Zarówno struktura katalogów jak i pliki konfiguracyjne są w tym przypadku bardzo podobne do tych zastosowanych w zestawie "wim" choć są pewne różnice.

 

Oto struktura:

 

pen 
- repozytorium
- - instalatory
- - - XP PRO (np.)
- - - - i386
- - pliki
- - systemy

 

Funkcjonalność katalogów "pliki" oraz "systemy" jest identyczna jak wcześniej w przypadku wim natomiast katalog "instalatory" zawiera podkatalogi dedykowane poszczególnym systemom przy czym nazwy katalogów są dowolne, to co pojawi się na batonie obliguje dopiero plik konfiguracyjny, wewnątrz tych katalogów umieszczamy katalog zawierający pliki instalacyjne czyli z definicji i386 w wersji "na żywca" przeniesionej z płyty instalacyjnej.

Jak widać odpada produkcja pliku wim - wystarczy przekopiować odpowiednią zawartość płyty, natomiast zbudowanie pliku konfiguracyjnego jest obligatoryjne, a oto jego składnia:

 

xp_pro_fixit.txt:

 

[nazwa]
Windows XP PRO SP3 PL FixitPC 
[repozytorium]
xpp_sp3_pl
[pliki oembios]
repozytorium\pliki\WinXP_fixit\OEM
[plik massstorage]
repozytorium\pliki\WinXP_fixit\MassStorage
[pliki oem]
repozytorium\pliki\WinXP_fixit\$OEM$
[nienadzorowana]
repozytorium\pliki\WinXP_fixit\unattend_fixit_pro.txt

 

Po kolei mamy:

[nazwa] - nazwa pod jaką zestaw pojawi się w GUI menu

[repozytorium] - nazwa katalogu zawierającego właściwy folder "i386", katalog podajemy względem folderu "instalatory"

 

Pozostałe sekcje odpowiadają tym z instalatora wim.

Jak widać brakuje sekcji klucza domyślnego, nie ma w tym przypadku tak prostej metody na jego umieszczenie, ponadto setup i tak zapyta o właściwy serial, można jednak troszkę uprościć sobie instalację umieszczając klucz w pliku pid.inf

 

Tak jak w przypadku instalatora wim tak i tutaj jednemu zestawowi plików instalacyjnych możemy przypisać wiele różnych konfiguracji, dzięki temu bez marnowania miejsca możemy zastosować różne scenariusze instalacji w zależności od zapotrzebowania.

 

Niestety ten zestaw posiada pewien mankament, jeżeli setup z jakiegoś powodu napotka błąd w pierwszej fazie bądź też po prostu postanowimy go przerwać skrypt się zawiesi i wygeneruje błąd, myślę że docelowo uda mi się znaleźć obejście ale na razie trzeba o tym pamiętać.

 

I to tyle jeżeli chodzi o zestawy instalacyjne.

 

pzdr

Odnośnik do komentarza

W poście #78 link znajduje się opis skryptu konsolidującego wszystkie wcześniejsze zestawy razem, dopiero to jest tak naprawdę docelowy (i wg mnie jedynie słuszny) zestaw.

 

A oto sam skrypt:

 

 

<HEAD>
<TITLE>Instalatory</TITLE>

<HTA:APPLICATION
 APPLICATIONNAME="Instalatory"
 ID="Instalatory"
 BORDER="none"
 INNERBORDER="no"
 CAPTION="no"
 SYSMENU="no"
 SCROLL="auto"
 SINGLEINSTANCE="yes"
 WINDOWSTATE="maximize"
 SHOWINTASKBAR="no"
 CONTEXTMENU="no"
 NAVIGABLE="yes"
 SELECTION="no"/>

<script language="vbscript" type="text/vbscript">
window.resizeTo 800,600
window.focus
</script>

<style type="text/css">

body {background-image:url('img\winpe.jpg'); background-repeat:no-repeat; background-attachment:fixed; background-position:center; margin:0px;
    width:0%; height:100%; left:0%; top:0%; padding:0px; overflow:hidden; z-index:0; font-family:Arial; font-size:20px; font-weight:bold;}

#TextArea {font-family:Albertus Medium; font-size:20pt; font-weight:bold; text-align:center; position:absolute; overflow:hidden;
         width:100%; height:100%; Left:0%; vertical-align:middle; Top:25%;}

#menu {border-style:none; position:absolute; overflow:auto; top:5%; height:90%; width:90%; left:5%; right:5%; z-index:2;} 

p {position:relative; text-align:center; z-index:0;}

.button {background-image:url('img\background.gif'); position:relative; width:325px; color:#000000; font-family:Arial; font-size:12px; font-weight:bold;
       border-style:ridge; z-index:2;}

.button2 {background-image:url('img\background.gif'); position:relative; width:160px; color:#000000; font-family:Arial; font-size:12px; font-weight:bold;
       border-style:ridge; z-index:2;}

h2 {position:relative; text-align:center; z-index:0;}
</style>

</HEAD>


<script language="vbscript" type="text/vbscript">
dim system_install, objShell, objWMIService, strDrive, strSystem, objFso, strName
dim wim_oembios, wim_massstorage, Wim_name, Wim_index, pliki_oem, plik_unattended, default_key
dim strdp, straoems, strunattend, rc_oembios, rc_massstorage, rc_name, rc_index

Set objShell = CreateObject("WScript.Shell")
Set objFso = CreateObject("Scripting.FileSystemObject")

dim arrCommands
arrCommands = Split(Instalatory.commandLine, "$")

If objShell.Environment("Process").Item("SystemDrive") = "X:" Then
objShell.Environment("Process").Item("Temp") = "X:\Windows\Temp"
objShell.Environment("Process").Item("Tmp") = "X:\Windows\Temp"
 If Not objFSO.FolderExists("X:\Windows\System32\config\systemprofile\Desktop") Then
     objFSO.CreateFolder "X:\Windows\System32\config\systemprofile\Desktop" 
 End If
End If


Sub Window_onLoad
DataArea.InnerHTML = ""
TextArea.InnerHTML = ""
MENU.InnerHTML = ""
MenuSystem
End Sub


Sub MenuSystem
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

If objFSO.FileExists(arrCommands(1)&"\repozytorium\455asd8.znk") Then
Set folder = objfso.GetFolder(arrCommands(1)&"\repozytorium\systemy")
Set files = folder.Files
 For each folderIdx In files 
   Set objFile = objFSO.OpenTextFile(arrCommands(1)&"\repozytorium\systemy\"& folderIdx.Name,1)
   strName = split(objFile.ReadAll,vbcrlf)
   strinstalki_repo_conf = strinstalki_repo_conf & "<input class='button' type='button' value='Zainstaluj "&strName(1)&"' onClick='Install_repo_conf ""&strName(1)&"",""&strName(3)&"",""&strName(5)&"",""&strName(7)&"",""&strName(9)&"",""&strName(11)&""'>   "
   objFile.Close
 Next

strmenurpinstall = "<h2>Instalki oparte na repozytorium z konfiguracją</h2>" & strinstalki_repo_conf
End If


If objFSO.FileExists(arrCommands(1)&"\wim\455asd8.znk") Then
Set folder = objfso.GetFolder(arrCommands(1)&"\wim\systemy")
Set files = folder.Files
 For each folderIdx In files 
   Set objFile = objFSO.OpenTextFile(arrCommands(1)&"\wim\systemy\"& folderIdx.Name,1)
   strName = split(objFile.ReadAll,vbcrlf)
   strinstalki_WIM = strinstalki_WIM & "<input class='button' type='button' value='Zainstaluj "&strName(1)&"' onClick='Install_WIM ""&strName(1)&"",""&strName(3)&"",""&strName(5)&"",""&strName(7)&"",""&strName(9)&"",""&strName(11)&"",""&strName(13)&"",""&strName(15)&""'>   "
   objFile.Close
 Next
strmenuwiminstall = "<h2>Instalki oparte na pliku WIM</h2>" & strinstalki_WIM
End If


strmenu1 = "<input class='button2' type='button' value='Notatnik' onClick='ntp'>  <input class='button2' type='button' value='Taskmgr' onClick='tskmgr'>  <input class='button2' type='button' value='Konsola' onClick='cmd'><br>"
strmenu2 = "<input class='button2' type='button' value='Free Commander' onClick='fc'>  <input class='button2' type='button' value='Ghost 32' onClick='ghost'>  <input class='button2' type='button' value='Opera Portable' onClick='Opera'><br>" 
strmenu3 = "<input class='button2' type='button' value='Start Sieci' onClick='NET'>  <input class='button2' type='button' value='Quit' onClick='wyjscie(1)'>  <input class='button2' type='button' value='Restart' onClick='wyjscie(2)'><br>"


IF objFSO.FileExists(arrCommands(1)&"\Vista_installer\455asd8.znk") And objFSO.FileExists(arrCommands(1)&"\Seven_Installer\455asd8.znk") Then 
  strmenu4 = "<input class='button'  type='button' value='Instalacja systemów Vista lub Server 2008' onClick='Vista_Inst'>   <input class='button'  type='button' value='Instalacja systemów Seven lub Server 2008 R2' onClick='Seven_Inst'>"
  strmenuvistainstall = "<h2>Instalki systemów z lini Vista i Seven</h2>" & strmenu4 
ElseIf objFSO.FileExists(arrCommands(1)&"\Seven_Installer\455asd8.znk") Then 
  strmenu4 = "<input class='button'  type='button' value='Instalacja systemów Seven lub Server 2008 R2' onClick='Seven_Inst'>"
  strmenuvistainstall = "<h2>Instalki systemów z lini Seven</h2>" & "<p>" & strmenu4 & "</p>"
ElseIf objFSO.FileExists(arrCommands(1)&"\Vista_installer\455asd8.znk") Then 
  strmenu4 = "<input class='button'  type='button' value='Instalacja systemów Vista lub Server 2008' onClick='Vista_Inst'>"
  strmenuvistainstall = "<h2>Instalki systemów z lini Vista</h2>" & "<p>" & strmenu4 & "</p>"
End If

MENU.InnerHTML =  "<p>" & strmenurpinstall & "</p>" & "<p>" & strmenuwiminstall & "</p>" & "<p>" & strmenuvistainstall & "</p>" & "<h2>Narzędzia</h2>" & "<p>" & strmenu1 & strmenu2 & strmenu3 & "</p>"
End Sub



Sub Install_WIM(system,arg_1,arg_2,arg_3,arg_4,arg_5,arg_6,arg_7)

Window.resizeTo 800,350
MENU.InnerHTML = ""
DataArea.InnerHTML = ""
TextArea.InnerHTML = ""

On Error Resume Next
Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk Where (DriveType = 3 OR DriveType = 2) AND DeviceID <> 'A:' AND DeviceID <> 'X:' AND DeviceID <> '" & arrCommands(1) & "'")
'Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk Where DriveType = 3 AND DeviceID <> 'x:' AND DeviceID <> '" & arrCommands(1) & "'")

For Each objDisk in colDisks
strBody4 = strBody4 & "<option value='"& objDisk.DeviceID &"'>"& objDisk.DeviceID &"</option>"
Next

set colSubfolders = objWMIService.ExecQuery("Associators of {Win32_Directory.Name='"&arrCommands(1)&"\"&arg_3&"'} Where AssocClass = Win32_Subdirectory ResultRole = PartComponent")
 For Each objFolder in colSubfolders
strBody5 = strBody5 & "<option value='"&arrCommands(1)&"\"&arg_3&"\"&objFolder.fileName&"'>"& objFolder.fileName &"</option>"
 Next

Set colSubfolders = objWMIService.ExecQuery("Associators of {Win32_Directory.Name='"&arrCommands(1)&"\"&arg_4&"'} Where AssocClass = Win32_Subdirectory ResultRole = PartComponent")
 For Each objFolder in colSubfolders
strBody6 = strBody6 & "<option value='"&arrCommands(1)&"\"&arg_4&"\"&objFolder.fileName&"'>"& objFolder.fileName &"</option>"
 Next
 
Set folder = objfso.GetFolder(arrCommands(1)&"\wim\pliki\dp")
Set files = folder.Files
    For each folderIdx In files 
strBody8 = strBody8 & "<option value='"&folderIdx.Name&"'>"& folderIdx.Name &"</option>"
    Next
 

str0 = "<option value='null'>null</option>"
str1 = "<span style='display:inline width:60px; position:absolute; top:15%; left:5%'><select size='1' name='AvailableDrives'>" 
str2 = "<input class='button' type='button' value='Potwierdź wybór' onClick='sys_inst_WIM' style='left:25%; top:70%; width:125px;'>"
str3 = "<input class='button' type='button' value='Rezygnuję' onClick='Cancel' style='left:45%; top:70%; width:125px;'>"
str4 = "<span style='display:inline width:60px; position:absolute; top:22%; left:5%'><select size='1' name='AvailableOEMS'>" 
str5 = "<span style='display:inline width:60px; position:absolute; top:45%; left:5%'><input type='checkbox' name='chkbox1' checked='True'>  Nienadzorowana</span>"
str6 = "<span style='display:inline width:60px; position:absolute; top:29%; left:5%'><select size='1' name='AvailableMASS'>" 
str7 = "<span style='display:inline width:60px; position:absolute; top:55%; left:5%'><input type='checkbox' name='chkbox2'>  Użyj katalogu $OEM$</span>"
str9 = "<span style='display:inline width:60px; position:absolute; top:65%; left:5%'><input type='checkbox' name='chkbox3'>  Autorestart</span>"
str8 = "<span style='display:inline width:100px; position:absolute; top:36%; left:5%'><select size='1' name='AvailableDP'>"
str10 = "<span style='display:inline width:60px; position:absolute; top:75%; left:5%'><input type='checkbox' name='chkbox4'>  Użyj klucza domyślnego</span>"

DataArea.InnerHTML = "<h2>Instalacja WIM " & system & "</h2>" & str1 & str0 & strBody4 & "</select>" & "  Proszę wybrać partycę docelową</Span>" & str4 & str0 & strBody5 & "</select>" & "  Proszę wybrać dostawcę OEM</Span>"  & str6 & str0 & strBody6 & "</select>" & "  Proszę wybrać Sterowniki MassStorage</Span>" & str5 & str8 & str0 & strBody8 & "</select>" & "  Proszę wybrać plik konfiguracji dysku</Span>" & str7 & str9 & str10 & str2 & str3

strSystem = system
Wim_name = arg_1
Wim_index = arg_2
wim_oembios = arg_3
wim_massstorage = arg_4
pliki_oem = arg_5
plik_unattended = arg_6
default_key = arg_7
End Sub

Sub sys_inst_WIM
 If AvailableDP.Value <> "null" Then
   strDrive = "V:"
 ElseIf AvailableDrives.Value = "null" Then
   Func_Back_WIM
   Exit Sub
 Else
   strDrive = AvailableDrives.Value
 End If
   strMassStorage = AvailableMASS.Value
   strOEM = AvailableOEMS.Value
   strDP = AvailableDP.Value
 if chkbox1.Checked then
   chkbox1_WIM = "TAK"
   Set objFile = objFSO.OpenTextFile(arrCommands(1)&"\"&plik_unattended,1,true)
   strUnAtt = objFile.ReadAll
   objFile.Close
 Else
  if chkbox4.Checked then
    chkbox4_WIM = "TAK"
    strdefkey = "[userdata]" & vbCrLf & "productid=" & default_key & vbCrLf & "productkey=" & default_key & vbCrLf
  end if
   strUnAtt = "[data]"  & vbCrLf & "msdosinitiated=1" & vbCrLf & "floppyless=1" & vbCrLf & "AutoPartition=1" & vbCrLf & "UseSignatures=yes" & vbCrLf & "OriSrc=A:\I386" & vbCrLf & "OriTyp=5" & vbCrLf 
   strnonunat = "[unattended]" & vbCrLf & "OemPreinstall=Yes" &vbCrLf& "DriverSigningPolicy=Ignore" &vbCrLf
 end If
 if chkbox2.Checked then
   chkbox2_WIM = "TAK"
 end if
 if chkbox3.Checked then
   chkbox3_WIM = "TAK"
 end if
 DataArea.InnerHTML = ""
 TextArea.InnerHTML = ""
 window.resizeTo 768,120
 TextArea.InnerHTML = "Proszę czekać,<br>trwa Instalacja " & strSystem 
If strdp <> "null" Then
   objShell.run ("%comspec% /c diskpart /s "&chr(34)&arrCommands(1)&"\wim\pliki\DP\"&strDP&chr(34)),0,true
Else
  set colVolumes = objWMIService.ExecQuery("select * from Win32_Volume Where Name = '"&strDrive&"\\'")
   For Each objVolume in colVolumes
    objVolume.Format "NTFS",True,,"",False

If Not objFSO.FileExists("x:\windows\temp\dp.txt") Then
Set objFile = objFSO.CreateTextFile("x:\windows\temp\dp.txt", True)
objFile.WriteLine "select volume " & strDrive & vbCrLf & "active" & vbCrLf & "exit"
objFile.close
End If
objShell.Run ("%comspec% /c diskpart /s x:\windows\temp\dp.txt"),0,true
objFSO.DeleteFile "x:\windows\temp\dp.txt"

  Next
End If
 objShell.run ("bootsect.exe /nt52 " & strDrive & " /force /mbr"),0,true
 objShell.run ("imagex.exe /apply "&arrCommands(1)&"\wim\"&Wim_name&" "&Wim_index&" "&strDrive),0,true
   Set objFile = objFSO.CreateTextFile(strDrive&"\$WIN_NT$.~BT\winnt.sif",true)
   objFile.Write strUnAtt & strdefkey
   objFile.Close
 'objShell.run ("wpeutil.exe reboot"),0,false
 if chkbox2_WIM = "TAK" then
     objFso.CopyFolder arrCommands(1)&"\"&pliki_oem, strDrive&"\$WIN_NT$.~LS\$OEM$", True
 end if
 If strOEM <> "null" Then
     objFSO.CopyFile strOEM&"\*", strDrive&"\$WIN_NT$.~LS\I386\", True
 End IF

 If strMassStorage <> "null" Then
   Set objFile = objFSO.OpenTextFile(strMassStorage&"\untd.txt",1,true)
   strMass = objFile.ReadAll
   objFile.close
   Set objFile = objFSO.CreateTextFile(strDrive&"\$WIN_NT$.~BT\winnt.sif",true)
   objFile.Write strUnAtt & strnonunat & strdefkey & strMass
   objFile.Close
 If Not objFso.FolderExists(strDrive&"\$WIN_NT$.~LS\$OEM$") Then
  Set f = objFso.CreateFolder(strDrive&"\$WIN_NT$.~LS\$OEM$")
 End If
  Set f = Nothing
 objFso.CopyFolder strMassStorage&"\txtsetup", strDrive&"\$WIN_NT$.~LS\$OEM$\TEXTMODE", True
 objFso.CopyFolder strMassStorage&"\txtsetup", strDrive&"\$WIN_NT$.~BT\$OEM$", True
 End If 

IF chkbox3_Wim = "TAK" then
   objShell.Run ("Wpeutil Reboot"),0,false
End If
 
 window.resizeTo 800,600
 MenuSystem
 DataArea.InnerHTML = ""
 TextArea.InnerHTML = ""
End sub


Sub Func_Back_WIM
DataArea.InnerHTML = ""
TextArea.InnerHTML = ""
window.resizeTo 512,120
strbck1 = "<input class='button' type='button' value='Wróć' onClick='Install_WIM ""&strSystem&"",""&Wim_name&"",""&Wim_index&"",""&wim_oembios&"",""&wim_massstorage&"",""&pliki_oem&"",""&plik_unattended&"",""&default_key&""' style='left:5%; top:65%; width:125px;'>"
strbck2 = "<input class='button' type='button' value='Diskpart' onClick='diskpart' style='left:10%; top:65%; width:125px;'>"
strbck3 = "<input class='button' type='button' value='Rezygnuję' onClick='Cancel' style='left:15%; top:65%; width:125px;'>"
TextArea.InnerHTML = "Nie wybrano partycji docelowej"
DataArea.InnerHTML = strbck1 & strbck2 & strbck3
End Sub



Sub Install_repo_conf(system,arg_1,arg_2,arg_3,arg_4,arg_5)

Window.resizeTo 800,350
MENU.InnerHTML = ""
DataArea.InnerHTML = ""
TextArea.InnerHTML = ""

On Error Resume Next
Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk Where (DriveType = 3 OR DriveType = 2) AND DeviceID <> 'A:' AND DeviceID <> 'X:' AND DeviceID <> '" & arrCommands(1) & "'")

For Each objDisk in colDisks
strBody4 = strBody4 & "<option value='"& objDisk.DeviceID &"'>"& objDisk.DeviceID &"</option>"
Next

set colSubfolders = objWMIService.ExecQuery("Associators of {Win32_Directory.Name='"&arrCommands(1)&"\"&arg_2&"'} Where AssocClass = Win32_Subdirectory ResultRole = PartComponent")
 For Each objFolder in colSubfolders
strBody5 = strBody5 & "<option value='"&arrCommands(1)&"\"&arg_2&"\"&objFolder.fileName&"'>"& objFolder.fileName &"</option>"
 Next

Set colSubfolders = objWMIService.ExecQuery("Associators of {Win32_Directory.Name='"&arrCommands(1)&"\"&arg_3&"'} Where AssocClass = Win32_Subdirectory ResultRole = PartComponent")
 For Each objFolder in colSubfolders
strBody6 = strBody6 & "<option value='"&arrCommands(1)&"\"&arg_3&"\"&objFolder.fileName&"'>"& objFolder.fileName &"</option>"
 Next
 
Set folder = objfso.GetFolder(arrCommands(1)&"\repozytorium\pliki\dp")
Set files = folder.Files
    For each folderIdx In files 
strBody8 = strBody8 & "<option value='"&folderIdx.Name&"'>"& folderIdx.Name &"</option>"
    Next
 

str0 = "<option value='null'>null</option>"
str1 = "<span style='display:inline width:60px; position:absolute; top:15%; left:5%'><select size='1' name='AvailableDrives'>" 
str2 = "<input class='button' type='button' value='Potwierdź wybór' onClick='sys_inst_repo_conf' style='left:25%; top:60%; width:125px;'>"
str3 = "<input class='button' type='button' value='Rezygnuję' onClick='Cancel' style='left:45%; top:60%; width:125px;'>"
str4 = "<span style='display:inline width:60px; position:absolute; top:22%; left:5%'><select size='1' name='AvailableOEMS'>" 
str5 = "<span style='display:inline width:60px; position:absolute; top:45%; left:5%'><input type='checkbox' name='chkbox1' checked='True'>  Nienadzorowana</span>"
str6 = "<span style='display:inline width:60px; position:absolute; top:29%; left:5%'><select size='1' name='AvailableMASS'>" 
str7 = "<span style='display:inline width:60px; position:absolute; top:55%; left:5%'><input type='checkbox' name='chkbox2'>  Użyj katalogu $OEM$</span>"
str9 = "<span style='display:inline width:60px; position:absolute; top:65%; left:5%'><input type='checkbox' name='chkbox3'>  Autorestart</span>"
str8 = "<span style='display:inline width:100px; position:absolute; top:36%; left:5%'><select size='1' name='AvailableDP'>"

DataArea.InnerHTML = "<h2>Instalacja repozytorium z konfiguracją " & system & "</h2>" & str1 & str0 & strBody4 & "</select>" & "  Proszę wybrać partycę docelową</Span>" & str4 & str0 & strBody5 & "</select>" & "  Proszę wybrać dostawcę OEM</Span>"  & str6 & str0 & strBody6 & "</select>" & "  Proszę wybrać Sterowniki MassStorage</Span>" & str5 & str8 & str0 & strBody8 & "</select>" & "  Proszę wybrać plik konfiguracji dysku</Span>" & str7 & str9 & str10 & str2 & str3

strSystem = system
rc_name = arg_1
rc_oembios = arg_2
rc_massstorage = arg_3
pliki_oem = arg_4
plik_unattended = arg_5
End Sub

Sub sys_inst_repo_conf
 If AvailableDP.Value <> "null" Then
   strDrive = "V:"
 ElseIf AvailableDrives.Value = "null" Then
   Func_Back_repo_conf
   Exit Sub
 Else
   strDrive = AvailableDrives.Value
 End If
   strMassStorage = AvailableMASS.Value
   strOEM = AvailableOEMS.Value
   strDP = AvailableDP.Value
 if chkbox1.Checked then
   chkbox1_rc = "TAK"
   strunattended =  " /unattend:" & arrCommands(1)&"\"&plik_unattended
   Set objFile = objFSO.OpenTextFile(arrCommands(1)&"\"&plik_unattended,1,true)
   strUnAtt = objFile.ReadAll
   objFile.Close
 Else
   strnonunat = "[unattended]" & vbCrLf & "OemPreinstall=Yes" &vbCrLf& "DriverSigningPolicy=Ignore" &vbCrLf
 end If
 if chkbox2.Checked then
   chkbox2_rc = "TAK"
 end if
 if chkbox3.Checked then
   chkbox3_rc = "TAK"
 end if
 DataArea.InnerHTML = ""
 TextArea.InnerHTML = ""
 window.resizeTo 768,120
 TextArea.InnerHTML = "Proszę czekać,<br>trwa Instalacja " & strSystem 
If strdp <> "null" Then
   objShell.run ("%comspec% /c diskpart /s "&chr(34)&arrCommands(1)&"\repozytorium\pliki\DP\"&strDP&chr(34)),0,true
Else
  set colVolumes = objWMIService.ExecQuery("select * from Win32_Volume Where Name = '"&strDrive&"\\'")
   For Each objVolume in colVolumes
    objVolume.Format "NTFS",True,,"",False

If Not objFSO.FileExists("x:\windows\temp\dp.txt") Then
Set objFile = objFSO.CreateTextFile("x:\windows\temp\dp.txt", True)
objFile.WriteLine "select volume " & strDrive & vbCrLf & "active" & vbCrLf & "exit"
objFile.close
End If
objShell.Run ("%comspec% /c diskpart /s x:\windows\temp\dp.txt"),0,true
objFSO.DeleteFile "x:\windows\temp\dp.txt"
   Next
End If
 objShell.run ("bootsect.exe /nt52 " & strDrive & " /force /mbr"),0,true

 objShell.run (arrCommands(1) & "\repozytorium\instalatory\"&rc_name&"\i386\winnt32.exe /makelocalsource /noreboot /syspart:" & strDrive & " /tempdrive:" & strDrive  &strunattended),0,true

 if chkbox2_rc = "TAK" then
     objFso.CopyFolder arrCommands(1)&"\"&pliki_oem, strDrive&"\$WIN_NT$.~LS\$OEM$", True
 end if
 If strOEM <> "null" Then
     objFSO.CopyFile strOEM&"\*", strDrive&"\$WIN_NT$.~LS\I386\", True
 End IF

 If strMassStorage <> "null" Then
   Set objFile = objFSO.OpenTextFile(strDrive&"\$WIN_NT$.~BT\winnt.sif",1,true)
   strUnAtt = objFile.ReadAll
   objFile.Close
   Set objFile = objFSO.OpenTextFile(strMassStorage&"\untd.txt",1,true)
   strMass = objFile.ReadAll
   objFile.close
   Set objFile = objFSO.CreateTextFile(strDrive&"\$WIN_NT$.~BT\winnt.sif",true)
   objFile.Write strUnAtt & strnonunat & strMass
   objFile.Close
 If Not objFso.FolderExists(strDrive&"\$WIN_NT$.~LS\$OEM$") Then
  Set f = objFso.CreateFolder(strDrive&"\$WIN_NT$.~LS\$OEM$")
 End If
  Set f = Nothing
 objFso.CopyFolder strMassStorage&"\txtsetup", strDrive&"\$WIN_NT$.~LS\$OEM$\TEXTMODE", True
 objFso.CopyFolder strMassStorage&"\txtsetup", strDrive&"\$WIN_NT$.~BT\$OEM$", True
 End If 

IF chkbox3_rc = "TAK" then
   objShell.Run ("Wpeutil Reboot"),0,false
End If
 
 window.resizeTo 800,600
 MenuSystem
 DataArea.InnerHTML = ""
 TextArea.InnerHTML = ""
End sub


Sub Func_Back_repo_conf
DataArea.InnerHTML = ""
TextArea.InnerHTML = ""
window.resizeTo 512,120
strbck1 = "<input class='button' type='button' value='Wróć' onClick='install_repo_conf ""&strSystem&"",""&rc_name&"",""&rc_oembios&"",""&rc_massstorage&"",""&pliki_oem&"",""&plik_unattended&""' style='left:5%; top:65%; width:125px;'>"
strbck2 = "<input class='button' type='button' value='Diskpart' onClick='diskpart' style='left:10%; top:65%; width:125px;'>"
strbck3 = "<input class='button' type='button' value='Rezygnuję' onClick='Cancel' style='left:15%; top:65%; width:125px;'>"
TextArea.InnerHTML = "Nie wybrano partycji docelowej"
DataArea.InnerHTML = strbck1 & strbck2 & strbck3
End Sub



Sub Vista_Inst
  Window.resizeTo 750,250
  MENU.InnerHTML = ""
  DataArea.InnerHTML = ""
  TextArea.InnerHTML = ""
 On Error Resume Next

  Set folder = objfso.GetFolder(arrCommands(1)&"\vista_Installer\vista_unattend")
  Set files = folder.Files
    For each folderIdx In files 
  strBody42 = strBody42 & "<option value='"&folderIdx.Name&"'>"& folderIdx.Name &"</option>"
    Next

  Set colSubfolders = objWMIService.ExecQuery("Associators of {Win32_Directory.Name='"&arrCommands(1)&"\vista_Installer\vista_unattend\AOems'} Where AssocClass = Win32_Subdirectory ResultRole = PartComponent")
    For Each objFolder in colSubfolders
  strBody45 = strBody45 & "<option value='"&objFolder.Name&"'>"& objFolder.fileName &"</option>"
    Next
  
  Set folder = objfso.GetFolder(arrCommands(1)&"\vista_Installer\vista_unattend\dp")
  Set files = folder.Files
    For each folderIdx In files 
  strBody48 = strBody48 & "<option value='"&folderIdx.Name&"'>"& folderIdx.Name &"</option>"
    Next

         
  str40 = "<option value='null'>null</option>"
  str41 = "<span style='display:inline width:60px; position:absolute; top:15%; left:5%'><select size='1' name='AvailableUnattend'>"
  str43 = "<input class='button' type='button' value='Potwierdź wybór' onClick='Vista_Instal' style='left:25%; top:50%; width:125px;'>"
  str44 = "<input class='button' type='button' value='Rezygnuję' onClick='Cancel' style='left:35%; top:50%; width:125px;'>"
  str46 = "<span style='display:inline width:80px; position:absolute; top:30%; left:5%'><select size='1' name='AvailableAOems'>"
  str47 = "<span style='display:inline width:60px; position:absolute; top:60%; left:5%'><input type='checkbox' name='chkbox1'>  Autorestart</span>"
  str48 = "<span style='display:inline width:100px; position:absolute; top:45%; left:5%'><select size='1' name='AvailableDP'>"
  
  DataArea.InnerHTML = "<h2>Instalacja Systemu Vista lub Server 2008</h2>" & str41 & str40 & strBody42 & "</select>" & "  Proszę wybrać plik instalacji nienadzorowanej</Span>" & str46 & str40 & strBody45 & "</select>" & "  Proszę wybrać Alternatywny katalog $OEM$</Span>" & str48 & str40 & strBody48 & "</select>" & "  Proszę wybrać skrypt przygotowujący dysk</Span>" & str47 & str43 & str44 
End Sub

Sub Vista_Instal
strunattend = AvailableUnattend.Value
straoems = AvailableAOems.Value
strdp =  AvailableDP.Value
 if chkbox1.Checked then
   chkbox1_Vista = "TAK"
 end if
MENU.InnerHTML = ""
DataArea.InnerHTML = ""
TextArea.InnerHTML = ""
window.resizeTo 725,160
TextArea.InnerHTML = "Instalacja systemów z lini Vista<br>Windows Vista, Serwer 2008"
If strdp <> "null" Then
 objShell.run ("%comspec% /c" & "diskpart /s "&chr(34)&arrCommands(1)&"\vista_Installer\vista_unattend\DP\"&strDP&chr(34)),0,true
End If
If strunattend = "null" AND straoems = "null" Then
  objShell.run (arrCommands(1) & "\vista_Installer\setup.exe /noreboot"),0,true
ElseIF strunattend <> "null" AND straoems = "null" Then
  objShell.run (arrCommands(1) & "\vista_Installer\setup.exe /noreboot /unattend:"&arrCommands(1)&"\vista_Installer\vista_unattend\"&strunattend),0,true
ElseIF strunattend = "null" AND straoems <> "null" Then
  objShell.run (arrCommands(1) & "\vista_Installer\setup.exe /noreboot /m:"&straoems),0,true
Else
  objShell.run (arrCommands(1) & "\vista_Installer\setup.exe /noreboot /m:"&straoems&" /unattend:"&arrCommands(1)&"\vista_Installer\vista_unattend\"&strunattend),0,true
End If

IF chkbox1_Vista = "TAK" then
  self.close()
End If
window.resizeTo 1024,768
MenuSystem
TextArea.InnerHTML = ""
End Sub



Sub Seven_Inst
  Window.resizeTo 750,250
  MENU.InnerHTML = ""
  DataArea.InnerHTML = ""
  TextArea.InnerHTML = ""
  On Error Resume Next

  Set folder = objfso.GetFolder(arrCommands(1)&"\seven_Installer\seven_unattend")
  Set files = folder.Files
    For each folderIdx In files 
  strBody22 = strBody22 & "<option value='"&folderIdx.Name&"'>"& folderIdx.Name &"</option>"
    Next

  Set colSubfolders = objWMIService.ExecQuery("Associators of {Win32_Directory.Name='"&arrCommands(1)&"\seven_Installer\seven_unattend\AOems'} Where AssocClass = Win32_Subdirectory ResultRole = PartComponent")
    For Each objFolder in colSubfolders
  strBody25 = strBody25 & "<option value='"&objFolder.Name&"'>"& objFolder.FileName &"</option>"
    Next
  
  Set folder = objfso.GetFolder(arrCommands(1)&"\seven_Installer\seven_unattend\dp")
  Set files = folder.Files
    For each folderIdx In files 
  strBody28 = strBody28 & "<option value='"&folderIdx.Name&"'>"& folderIdx.Name &"</option>"
    Next

         
  str20 = "<option value='null'>null</option>"
  str21 = "<span style='display:inline width:60px; position:absolute; top:15%; left:5%'><select size='1' name='AvailableUnattend'>"
  str23 = "<input class='button' type='button' value='Potwierdź wybór' onClick='Seven_Instal' style='left:25%; top:50%; width:125px;'>"
  str24 = "<input class='button' type='button' value='Rezygnuję' onClick='Cancel' style='left:35%; top:50%; width:125px;'>"
  str26 = "<span style='display:inline width:80px; position:absolute; top:30%; left:5%'><select size='1' name='AvailableAOems'>"
  str27 = "<span style='display:inline width:60px; position:absolute; top:60%; left:5%'><input type='checkbox' name='chkbox1'>  Autorestart</span>"
  str28 = "<span style='display:inline width:100px; position:absolute; top:45%; left:5%'><select size='1' name='AvailableDP'>"
  
  DataArea.InnerHTML = "<h2>Instalacja Systemu z lini Seven</h2>" & str21 & str20 & strBody22 & "</select>" & "  Proszę wybrać plik instalacji nienadzorowanej</Span>" & str26 & str20 & strBody25 & "</select>" & "  Proszę wybrać Alternatywny katalog $OEM$</Span>" & str28 & str20 & strBody28 & "</select>" & "  Proszę wybrać skrypt przygotowujący dysk</Span>" & str27 & str23 & str24 
End Sub

Sub Seven_Instal
strunattend = AvailableUnattend.Value
straoems = AvailableAOems.Value
strdp =  AvailableDP.Value
 if chkbox1.Checked then
   chkbox1_Seven = "TAK"
 end if
MENU.InnerHTML = ""
DataArea.InnerHTML = ""
TextArea.InnerHTML = ""
window.resizeTo 725,160
TextArea.InnerHTML = "Instalacja systemów z lini Seven<br>Windows Seven, Serwer 2008 R2"

If strdp <> "null" Then
 objShell.run ("%comspec% /c" & "diskpart /s "&chr(34)&arrCommands(1)&"\seven_Installer\seven_unattend\DP\"&strDP&chr(34)),0,true
End If
If strunattend = "null" AND straoems = "null" Then
  objShell.run (arrCommands(1) & "\seven_Installer\setup.exe /noreboot"),0,true
ElseIF strunattend <> "null" AND straoems = "null" Then
  objShell.run (arrCommands(1) & "\seven_Installer\setup.exe /noreboot /unattend:"&arrCommands(1)&"\seven_Installer\seven_unattend\"&strunattend),0,true
ElseIF strunattend = "null" AND straoems <> "null" Then
  objShell.run (arrCommands(1) & "\seven_Installer\setup.exe /noreboot /m:"&straoems),0,true
Else
  objShell.run (arrCommands(1) & "\seven_Installer\setup.exe /noreboot /m:"&straoems&" /unattend:"&arrCommands(1)&"\seven_Installer\seven_unattend\"&strunattend),0,true
End If

IF chkbox1_Seven = "TAK" then
  self.close()
End If

window.resizeTo 1024,768
MenuSystem
TextArea.InnerHTML = ""
End Sub


sub cancel
DataArea.InnerHTML = ""
TextArea.InnerHTML = ""
window.resizeTo 800,600
MenuSystem
end sub


Sub ghost
MENU.InnerHTML = ""
window.resizeTo 512,80
TextArea.InnerHTML = "Uruchomiono Ghost 32"
objShell.Run (arrCommands(1) & "\tools\ghost32.exe -prefos"),0,True
window.resizeTo 800,600
MenuSystem
TextArea.InnerHTML = ""
End Sub


Sub ntp
MENU.InnerHTML = ""
window.resizeTo 512,80
TextArea.InnerHTML = "Uruchomiono Notatnik"
objShell.Run ("notepad"),1,True
window.resizeTo 800,600
MenuSystem
TextArea.InnerHTML = ""
End Sub


Sub cmd
MENU.InnerHTML = ""
window.resizeTo 512,80
TextArea.InnerHTML = "Uruchomiono Wiersz Poleceń"
objShell.Run ("%comspec%"),1,True
window.resizeTo 800,600
MenuSystem
TextArea.InnerHTML = ""
End Sub


Sub NET
MENU.InnerHTML = ""
window.resizeTo 512,80
TextArea.InnerHTML = "Startuje sieć"
objShell.Run ("wpeutil InitializeNetwork"),0,True
objShell.Run ("wpeutil DisableFirewall"),0,True
window.resizeTo 800,600
MenuSystem
TextArea.InnerHTML = ""
End Sub


Sub FC
MENU.InnerHTML = ""
window.resizeTo 512,80
TextArea.InnerHTML = "Uruchomiono FreeCommandera"
objShell.Run (arrCommands(1) & "\tools\FreeCommanderPortable\FreeCommanderPortable.exe"),0,True
window.resizeTo 800,600
MenuSystem
TextArea.InnerHTML = ""
End Sub

Sub Opera
MENU.InnerHTML = ""
window.resizeTo 512,80
TextArea.InnerHTML = "Uruchomiono Operę"
objShell.Run (arrCommands(1) & "\tools\OperaPortable\OperaPortable.exe"),0,True
window.resizeTo 800,600
MenuSystem
TextArea.InnerHTML = ""
End Sub

Sub tskmgr
MENU.InnerHTML = ""
window.resizeTo 512,80
TextArea.InnerHTML = "Uruchomiono Menedżer zadań"
objShell.Run ("taskmgr"),1,True
window.resizeTo 800,600
MenuSystem
TextArea.InnerHTML = ""
End Sub


sub wyjscie(str_str)
If str_str = 1 Then
self.close()
ElseIf str_str = 2 Then
objShell.Run ("Wpeutil Reboot"),0,false
End If
end sub


</script>

<body id=body>

<span id=menu></span>

<span id=DataArea></span>
<span id=TextArea></span>

 

 

 

I linki zewnętrzne:

menu.hta lub menu.hta

 

 

pzdr

Odnośnik do komentarza
  • 2 miesiące temu...

Troszkę to trwało ale wreszcie mogę przedstawić pierwszy z obiecanych filmików:

 

 

 

Część sekcji (tych nudniejszych) została przyspieszona, oryginalnie clip trwał ok. 19 min., myślę że całkiem nieźle jak na w pełni zainstalowany i częściowo skonfigurowany system z dodatkowymi programami, należy również brać poprawkę, że całość odbywała się na maszynie wirtualnej a w tle działał program przechwytujący wideo co miało dodatkowy (negatywny oczywiście) wpływ na szybkość całego procesu.

Rzeczywisty czas będzie zależał oczywiście w dużej mierze od liczby dodatkowo instalowanych programów, ich rodzaju, sterowników dla danej maszyny oraz jej parametrów. Również czas uruchamiania WinPE jest bardzo różny w zależności od płyty głównej, z mojego doświadczenia wynika, że najdłużej trwa to na starszych GigaByte a najszybsze są (w tej akurat dziedzinie) Asrocki, przy czym różnica idzie w minuty.

 

 

pzdr

Odnośnik do komentarza

Najnowsza wersja menu.hta wprowadzająca troszkę dynamiki.

Zabawa z dynamiczną zmianą stylów wizualnych przy użyciu VBS.

 

 

<HTML>
<HEAD>
<TITLE>Instalatory</TITLE>

<HTA:APPLICATION
 APPLICATIONNAME="Instalatory"
 ID="Instalatory"
 BORDER="dialog"
 INNERBORDER="no"
 CAPTION="no"
 SYSMENU="yes"
 SCROLL="auto"
 SINGLEINSTANCE="yes"
 WINDOWSTATE="maximize"
 SHOWINTASKBAR="no"
 CONTEXTMENU="no"
 NAVIGABLE="yes"
 SELECTION="no"/>

<script language="vbscript" type="text/vbscript">
window.resizeTo 800,600
window.focus
</script>

<style type="text/css">

body {background-image:url('img\winpe.jpg'); background-repeat:no-repeat; background-attachment:fixed; background-position:center; margin:0px;
    width:0%; height:100%; left:0%; top:0%; padding:0px; overflow:hidden; z-index:0; font-family:Arial; font-size:20px; font-weight:bold;}

#TextArea {font-family:Albertus Medium; font-size:20pt; font-weight:bold; text-align:center; position:absolute; overflow:hidden;
         width:100%; height:100%; Left:0%; vertical-align:middle; Top:25%;}

#menu {border-style:none; position:absolute; overflow:auto; top:5%; height:90%; width:90%; left:5%; right:5%; z-index:2;} 

p {position:relative; text-align:center; z-index:0;}

.button {position:relative; width:325px; font-family:Arial; font-size:12px; font-weight:bold; z-index:2; text-decoration: none; 
background: #bfb url("img\menu_pionowe_tlo.gif") repeat-x top; color: #254; border-style:ridge; border-left: 1px solid #797;}

.button_hover {position:relative; width:325px; font-family:Arial; font-size:12px; font-weight:bold; z-index:2; text-decoration: none; 
background:url("img\menu_pionowe_tlo2.gif"); color: #bff; background-color: #797; border-style:ridge; padding: 3px;}

.button2 {position:relative; width:160px; font-family:Arial; font-size:12px; font-weight:bold; z-index:2; text-decoration: none; 
background: #bfb url("img\menu_pionowe_tlo.gif") repeat-x top; color: #254;  border-style:ridge; border-left: 1px solid #797;}

.button2_hover {position:relative; width:160px; font-family:Arial; font-size:12px; font-weight:bold; z-index:2; text-decoration: none; 
background:url("img\menu_pionowe_tlo2.gif"); color: #bff; background-color: #797; border-style:ridge; padding: 3px;}

h2 {position:relative; text-align:center; z-index:0;}
</style>

</HEAD>


<script language="vbscript" type="text/vbscript">
dim system_install, objShell, objWMIService, strDrive, strSystem, objFso, strName
dim wim_oembios, wim_massstorage, Wim_name, Wim_index, pliki_oem, plik_unattended, default_key
dim strdp, straoems, strunattend, rc_oembios, rc_massstorage, rc_name, rc_index

Set objShell = CreateObject("WScript.Shell")
Set objFso = CreateObject("Scripting.FileSystemObject")

dim arrCommands
arrCommands = Split(Instalatory.commandLine, "$")

If objShell.Environment("Process").Item("SystemDrive") = "X:" Then
objShell.Environment("Process").Item("Temp") = "X:\Windows\Temp"
objShell.Environment("Process").Item("Tmp") = "X:\Windows\Temp"
 If Not objFSO.FolderExists("X:\Windows\System32\config\systemprofile\Desktop") Then
     objFSO.CreateFolder "X:\Windows\System32\config\systemprofile\Desktop" 
 End If
End If


Sub Window_onLoad
DataArea.InnerHTML = ""
TextArea.InnerHTML = ""
MENU.InnerHTML = ""
MenuSystem
End Sub


Sub MenuSystem
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

If objFSO.FileExists(arrCommands(1)&"\repozytorium\455asd8.znk") Then
Set folder = objfso.GetFolder(arrCommands(1)&"\repozytorium\systemy")
Set files = folder.Files
 For each folderIdx In files 
   Set objFile = objFSO.OpenTextFile(arrCommands(1)&"\repozytorium\systemy\"& folderIdx.Name,1)
   strName = split(objFile.ReadAll,vbcrlf)
   strinstalki_repo_conf = strinstalki_repo_conf & "<input class='button' type='button' onmouseover='MouseOver' onmouseout='MouseOut' value='Zainstaluj "&strName(1)&"' onClick='Install_repo_conf ""&strName(1)&"",""&strName(3)&"",""&strName(5)&"",""&strName(7)&"",""&strName(9)&"",""&strName(11)&""'>   "
   objFile.Close
 Next

strmenurpinstall = "<h2>Instalki oparte na repozytorium z konfiguracją</h2>" & strinstalki_repo_conf
End If


If objFSO.FileExists(arrCommands(1)&"\wim\455asd8.znk") Then
Set folder = objfso.GetFolder(arrCommands(1)&"\wim\systemy")
Set files = folder.Files
 For each folderIdx In files 
   Set objFile = objFSO.OpenTextFile(arrCommands(1)&"\wim\systemy\"& folderIdx.Name,1)
   strName = split(objFile.ReadAll,vbcrlf)
   strinstalki_WIM = strinstalki_WIM & "<input class='button' type='button' onmouseover='MouseOver' onmouseout='MouseOut' value='Zainstaluj "&strName(1)&"' onClick='Install_WIM ""&strName(1)&"",""&strName(3)&"",""&strName(5)&"",""&strName(7)&"",""&strName(9)&"",""&strName(11)&"",""&strName(13)&"",""&strName(15)&""'>   "
   objFile.Close
 Next
strmenuwiminstall = "<h2>Instalki oparte na pliku WIM</h2>" & strinstalki_WIM
End If


strmenu1 = "<input class='button2' onmouseover='MouseOver' onmouseout='MouseOut' type='button' value='Notatnik' onClick='ntp'>  <input class='button2' onmouseover='MouseOver' onmouseout='MouseOut' type='button' value='Taskmgr' onClick='tskmgr'>  <input class='button2' onmouseover='MouseOver' onmouseout='MouseOut' type='button' value='Konsola' onClick='cmd'><br>"
strmenu2 = "<input class='button2' onmouseover='MouseOver' onmouseout='MouseOut' type='button' value='Cubic Explorer' onClick='ce'>  <input class='button2' onmouseover='MouseOver' onmouseout='MouseOut' type='button' value='Ghost 32' onClick='ghost'>  <input class='button2' onmouseover='MouseOver' onmouseout='MouseOut' type='button' value='Opera Portable' onClick='Opera'><br>" 
strmenu3 = "<input class='button2' onmouseover='MouseOver' onmouseout='MouseOut' type='button' value='Start Sieci' onClick='NET'>  <input class='button2' onmouseover='MouseOver' onmouseout='MouseOut' type='button' value='Restart' onClick='wyjscie(2)'>  <input class='button2' onmouseover='MouseOver' onmouseout='MouseOut' type='button' value='Przeładuj' onClick='wyjscie(3)'><br>"
strmenu5 = "<br><input class='button2' onmouseover='MouseOver' onmouseout='MouseOut' type='button' value='Quit' onClick='wyjscie(1)'><br>"

IF objFSO.FileExists(arrCommands(1)&"\Vista_installer\455asd8.znk") And objFSO.FileExists(arrCommands(1)&"\Seven_Installer\455asd8.znk") Then 
  strmenu4 = "<input class='button' onmouseover='MouseOver' onmouseout='MouseOut' type='button' value='Instalacja systemów Vista lub Server 2008' onClick='Vista_Inst'>   <input class='button' onmouseover='MouseOver' onmouseout='MouseOut' type='button' value='Instalacja systemów Seven lub Server 2008 R2' onClick='Seven_Inst'>"
  strmenuvistainstall = "<h2>Instalki systemów z lini Vista i Seven</h2>" & strmenu4 
ElseIf objFSO.FileExists(arrCommands(1)&"\Seven_Installer\455asd8.znk") Then 
  strmenu4 = "<input class='button' onmouseover='MouseOver' onmouseout='MouseOut' type='button' value='Instalacja systemów Seven lub Server 2008 R2' onClick='Seven_Inst'>"
  strmenuvistainstall = "<h2>Instalki systemów z lini Seven</h2>" & "<p>" & strmenu4 & "</p>"
ElseIf objFSO.FileExists(arrCommands(1)&"\Vista_installer\455asd8.znk") Then 
  strmenu4 = "<input class='button' onmouseover='MouseOver' onmouseout='MouseOut' type='button' value='Instalacja systemów Vista lub Server 2008' onClick='Vista_Inst'>"
  strmenuvistainstall = "<h2>Instalki systemów z lini Vista</h2>" & "<p>" & strmenu4 & "</p>"
End If

MENU.InnerHTML =  "<p>" & strmenurpinstall & "</p>" & "<p>" & strmenuwiminstall & "</p>" & "<p>" & strmenuvistainstall & "</p>" & "<h2>Narzędzia</h2>" & "<p>" & strmenu1 & strmenu2 & strmenu3 & strmenu5 & "</p>"
End Sub



Sub Install_WIM(system,arg_1,arg_2,arg_3,arg_4,arg_5,arg_6,arg_7)

Window.resizeTo 800,350
MENU.InnerHTML = ""
DataArea.InnerHTML = ""
TextArea.InnerHTML = ""

On Error Resume Next
Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk Where (DriveType = 3 OR DriveType = 2) AND DeviceID <> 'A:' AND DeviceID <> 'X:' AND DeviceID <> '" & arrCommands(1) & "'")
'Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk Where DriveType = 3 AND DeviceID <> 'x:' AND DeviceID <> '" & arrCommands(1) & "'")

For Each objDisk in colDisks
strBody4 = strBody4 & "<option value='"& objDisk.DeviceID &"'>"& objDisk.DeviceID &"</option>"
Next

set colSubfolders = objWMIService.ExecQuery("Associators of {Win32_Directory.Name='"&arrCommands(1)&"\"&arg_3&"'} Where AssocClass = Win32_Subdirectory ResultRole = PartComponent")
 For Each objFolder in colSubfolders
strBody5 = strBody5 & "<option value='"&arrCommands(1)&"\"&arg_3&"\"&objFolder.fileName&"'>"& objFolder.fileName &"</option>"
 Next

Set colSubfolders = objWMIService.ExecQuery("Associators of {Win32_Directory.Name='"&arrCommands(1)&"\"&arg_4&"'} Where AssocClass = Win32_Subdirectory ResultRole = PartComponent")
 For Each objFolder in colSubfolders
strBody6 = strBody6 & "<option value='"&arrCommands(1)&"\"&arg_4&"\"&objFolder.fileName&"'>"& objFolder.fileName &"</option>"
 Next
 
Set folder = objfso.GetFolder(arrCommands(1)&"\wim\pliki\dp")
Set files = folder.Files
    For each folderIdx In files 
strBody8 = strBody8 & "<option value='"&folderIdx.Name&"'>"& folderIdx.Name &"</option>"
    Next
 

str0 = "<option value='null'>null</option>"
str1 = "<span style='display:inline width:60px; position:absolute; top:15%; left:5%'><select size='1' name='AvailableDrives'>" 
str2 = "<input class='button' type='button' onmouseover='MouseOver' onmouseout='MouseOut' value='Potwierdź wybór' onClick='sys_inst_WIM' style='left:25%; top:70%; width:125px;'>"
str3 = "<input class='button' type='button' onmouseover='MouseOver' onmouseout='MouseOut' value='Rezygnuję' onClick='Cancel' style='left:45%; top:70%; width:125px;'>"
str4 = "<span style='display:inline width:60px; position:absolute; top:22%; left:5%'><select size='1' name='AvailableOEMS'>" 
str5 = "<span style='display:inline width:60px; position:absolute; top:45%; left:5%'><input type='checkbox' name='chkbox1' checked='True'>  Nienadzorowana</span>"
str6 = "<span style='display:inline width:60px; position:absolute; top:29%; left:5%'><select size='1' name='AvailableMASS'>" 
str7 = "<span style='display:inline width:60px; position:absolute; top:55%; left:5%'><input type='checkbox' name='chkbox2'>  Użyj katalogu $OEM$</span>"
str9 = "<span style='display:inline width:60px; position:absolute; top:65%; left:5%'><input type='checkbox' name='chkbox3'>  Autorestart</span>"
str8 = "<span style='display:inline width:100px; position:absolute; top:36%; left:5%'><select size='1' name='AvailableDP'>"
str10 = "<span style='display:inline width:60px; position:absolute; top:75%; left:5%'><input type='checkbox' name='chkbox4'>  Użyj klucza domyślnego</span>"

DataArea.InnerHTML = "<h2>Instalacja WIM " & system & "</h2>" & str1 & str0 & strBody4 & "</select>" & "  Proszę wybrać partycę docelową</Span>" & str4 & str0 & strBody5 & "</select>" & "  Proszę wybrać dostawcę OEM</Span>"  & str6 & str0 & strBody6 & "</select>" & "  Proszę wybrać Sterowniki MassStorage</Span>" & str5 & str8 & str0 & strBody8 & "</select>" & "  Proszę wybrać plik konfiguracji dysku</Span>" & str7 & str9 & str10 & str2 & str3

strSystem = system
Wim_name = arg_1
Wim_index = arg_2
wim_oembios = arg_3
wim_massstorage = arg_4
pliki_oem = arg_5
plik_unattended = arg_6
default_key = arg_7
End Sub

Sub sys_inst_WIM
 If AvailableDP.Value <> "null" Then
   strDrive = "V:"
 ElseIf AvailableDrives.Value = "null" Then
   Func_Back_WIM
   Exit Sub
 Else
   strDrive = AvailableDrives.Value
 End If
   strMassStorage = AvailableMASS.Value
   strOEM = AvailableOEMS.Value
   strDP = AvailableDP.Value
 if chkbox1.Checked then
   chkbox1_WIM = "TAK"
   Set objFile = objFSO.OpenTextFile(arrCommands(1)&"\"&plik_unattended,1,true)
   strUnAtt = objFile.ReadAll
   objFile.Close
 Else
  if chkbox4.Checked then
    chkbox4_WIM = "TAK"
    strdefkey = "[userdata]" & vbCrLf & "productid=" & default_key & vbCrLf & "productkey=" & default_key & vbCrLf
  end if
   strUnAtt = "[data]"  & vbCrLf & "msdosinitiated=1" & vbCrLf & "floppyless=1" & vbCrLf & "AutoPartition=1" & vbCrLf & "UseSignatures=yes" & vbCrLf & "OriSrc=A:\I386" & vbCrLf & "OriTyp=5" & vbCrLf 
   strnonunat = "[unattended]" & vbCrLf & "OemPreinstall=Yes" &vbCrLf& "DriverSigningPolicy=Ignore" &vbCrLf
 end If
 if chkbox2.Checked then
   chkbox2_WIM = "TAK"
 end if
 if chkbox3.Checked then
   chkbox3_WIM = "TAK"
 end if
 DataArea.InnerHTML = ""
 TextArea.InnerHTML = ""
 window.resizeTo 768,120
 TextArea.InnerHTML = "Proszę czekać,<br>trwa Instalacja " & strSystem 
If strdp <> "null" Then
   objShell.run ("%comspec% /c diskpart /s "&chr(34)&arrCommands(1)&"\wim\pliki\DP\"&strDP&chr(34)),0,true
Else
  set colVolumes = objWMIService.ExecQuery("select * from Win32_Volume Where Name = '"&strDrive&"\\'")
   For Each objVolume in colVolumes
    objVolume.Format "NTFS",True,,"",False

If Not objFSO.FileExists("x:\windows\temp\dp.txt") Then
Set objFile = objFSO.CreateTextFile("x:\windows\temp\dp.txt", True)
objFile.WriteLine "select volume " & strDrive & vbCrLf & "active" & vbCrLf & "exit"
objFile.close
End If
objShell.Run ("%comspec% /c diskpart /s x:\windows\temp\dp.txt"),0,true
objFSO.DeleteFile "x:\windows\temp\dp.txt"

  Next
End If
 objShell.run ("bootsect.exe /nt52 " & strDrive & " /force /mbr"),0,true
 objShell.run ("imagex.exe /apply "&arrCommands(1)&"\wim\"&Wim_name&" "&Wim_index&" "&strDrive),0,true
   Set objFile = objFSO.CreateTextFile(strDrive&"\$WIN_NT$.~BT\winnt.sif",true)
   objFile.Write strUnAtt & strdefkey
   objFile.Close
 'objShell.run ("wpeutil.exe reboot"),0,false
 if chkbox2_WIM = "TAK" then
     objFso.CopyFolder arrCommands(1)&"\"&pliki_oem, strDrive&"\$WIN_NT$.~LS\$OEM$", True
 end if
 If strOEM <> "null" Then
     objFSO.CopyFile strOEM&"\*", strDrive&"\$WIN_NT$.~LS\I386\", True
 End IF

 If strMassStorage <> "null" Then
   Set objFile = objFSO.OpenTextFile(strMassStorage&"\untd.txt",1,true)
   strMass = objFile.ReadAll
   objFile.close
   Set objFile = objFSO.CreateTextFile(strDrive&"\$WIN_NT$.~BT\winnt.sif",true)
   objFile.Write strUnAtt & strnonunat & strdefkey & strMass
   objFile.Close
 If Not objFso.FolderExists(strDrive&"\$WIN_NT$.~LS\$OEM$") Then
  Set f = objFso.CreateFolder(strDrive&"\$WIN_NT$.~LS\$OEM$")
 End If
  Set f = Nothing
 objFso.CopyFolder strMassStorage&"\txtsetup", strDrive&"\$WIN_NT$.~LS\$OEM$\TEXTMODE", True
 objFso.CopyFolder strMassStorage&"\txtsetup", strDrive&"\$WIN_NT$.~BT\$OEM$", True
 End If 

IF chkbox3_Wim = "TAK" then
   objShell.Run ("Wpeutil Reboot"),0,false
End If
 
 window.resizeTo 800,600
 MenuSystem
 DataArea.InnerHTML = ""
 TextArea.InnerHTML = ""
End sub


Sub Func_Back_WIM
DataArea.InnerHTML = ""
TextArea.InnerHTML = ""
window.resizeTo 512,120
strbck1 = "<input class='button' type='button' onmouseover='MouseOver' onmouseout='MouseOut' value='Wróć' onClick='Install_WIM ""&strSystem&"",""&Wim_name&"",""&Wim_index&"",""&wim_oembios&"",""&wim_massstorage&"",""&pliki_oem&"",""&plik_unattended&"",""&default_key&""' style='left:5%; top:65%; width:125px;'>"
strbck2 = "<input class='button' type='button' onmouseover='MouseOver' onmouseout='MouseOut' value='Diskpart' onClick='diskpart' style='left:10%; top:65%; width:125px;'>"
strbck3 = "<input class='button' type='button' onmouseover='MouseOver' onmouseout='MouseOut' value='Rezygnuję' onClick='Cancel' style='left:15%; top:65%; width:125px;'>"
TextArea.InnerHTML = "Nie wybrano partycji docelowej"
DataArea.InnerHTML = strbck1 & strbck2 & strbck3
End Sub



Sub Install_repo_conf(system,arg_1,arg_2,arg_3,arg_4,arg_5)

Window.resizeTo 800,350
MENU.InnerHTML = ""
DataArea.InnerHTML = ""
TextArea.InnerHTML = ""

On Error Resume Next
Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk Where (DriveType = 3 OR DriveType = 2) AND DeviceID <> 'A:' AND DeviceID <> 'X:' AND DeviceID <> '" & arrCommands(1) & "'")

For Each objDisk in colDisks
strBody4 = strBody4 & "<option value='"& objDisk.DeviceID &"'>"& objDisk.DeviceID &"</option>"
Next

set colSubfolders = objWMIService.ExecQuery("Associators of {Win32_Directory.Name='"&arrCommands(1)&"\"&arg_2&"'} Where AssocClass = Win32_Subdirectory ResultRole = PartComponent")
 For Each objFolder in colSubfolders
strBody5 = strBody5 & "<option value='"&arrCommands(1)&"\"&arg_2&"\"&objFolder.fileName&"'>"& objFolder.fileName &"</option>"
 Next

Set colSubfolders = objWMIService.ExecQuery("Associators of {Win32_Directory.Name='"&arrCommands(1)&"\"&arg_3&"'} Where AssocClass = Win32_Subdirectory ResultRole = PartComponent")
 For Each objFolder in colSubfolders
strBody6 = strBody6 & "<option value='"&arrCommands(1)&"\"&arg_3&"\"&objFolder.fileName&"'>"& objFolder.fileName &"</option>"
 Next
 
Set folder = objfso.GetFolder(arrCommands(1)&"\repozytorium\pliki\dp")
Set files = folder.Files
    For each folderIdx In files 
strBody8 = strBody8 & "<option value='"&folderIdx.Name&"'>"& folderIdx.Name &"</option>"
    Next
 

str0 = "<option value='null'>null</option>"
str1 = "<span style='display:inline width:60px; position:absolute; top:15%; left:5%'><select size='1' name='AvailableDrives'>" 
str2 = "<input class='button' type='button' onmouseover='MouseOver' onmouseout='MouseOut' value='Potwierdź wybór' onClick='sys_inst_repo_conf' style='left:25%; top:60%; width:125px;'>"
str3 = "<input class='button' type='button' onmouseover='MouseOver' onmouseout='MouseOut' value='Rezygnuję' onClick='Cancel' style='left:45%; top:60%; width:125px;'>"
str4 = "<span style='display:inline width:60px; position:absolute; top:22%; left:5%'><select size='1' name='AvailableOEMS'>" 
str5 = "<span style='display:inline width:60px; position:absolute; top:45%; left:5%'><input type='checkbox' name='chkbox1' checked='True'>  Nienadzorowana</span>"
str6 = "<span style='display:inline width:60px; position:absolute; top:29%; left:5%'><select size='1' name='AvailableMASS'>" 
str7 = "<span style='display:inline width:60px; position:absolute; top:55%; left:5%'><input type='checkbox' name='chkbox2'>  Użyj katalogu $OEM$</span>"
str9 = "<span style='display:inline width:60px; position:absolute; top:65%; left:5%'><input type='checkbox' name='chkbox3'>  Autorestart</span>"
str8 = "<span style='display:inline width:100px; position:absolute; top:36%; left:5%'><select size='1' name='AvailableDP'>"

DataArea.InnerHTML = "<h2>Instalacja repozytorium z konfiguracją " & system & "</h2>" & str1 & str0 & strBody4 & "</select>" & "  Proszę wybrać partycę docelową</Span>" & str4 & str0 & strBody5 & "</select>" & "  Proszę wybrać dostawcę OEM</Span>"  & str6 & str0 & strBody6 & "</select>" & "  Proszę wybrać Sterowniki MassStorage</Span>" & str5 & str8 & str0 & strBody8 & "</select>" & "  Proszę wybrać plik konfiguracji dysku</Span>" & str7 & str9 & str10 & str2 & str3

strSystem = system
rc_name = arg_1
rc_oembios = arg_2
rc_massstorage = arg_3
pliki_oem = arg_4
plik_unattended = arg_5
End Sub

Sub sys_inst_repo_conf
 If AvailableDP.Value <> "null" Then
   strDrive = "V:"
 ElseIf AvailableDrives.Value = "null" Then
   Func_Back_repo_conf
   Exit Sub
 Else
   strDrive = AvailableDrives.Value
 End If
   strMassStorage = AvailableMASS.Value
   strOEM = AvailableOEMS.Value
   strDP = AvailableDP.Value
 if chkbox1.Checked then
   chkbox1_rc = "TAK"
   strunattended =  " /unattend:" & arrCommands(1)&"\"&plik_unattended
   Set objFile = objFSO.OpenTextFile(arrCommands(1)&"\"&plik_unattended,1,true)
   strUnAtt = objFile.ReadAll
   objFile.Close
 Else
   strnonunat = "[unattended]" & vbCrLf & "OemPreinstall=Yes" &vbCrLf& "DriverSigningPolicy=Ignore" &vbCrLf
 end If
 if chkbox2.Checked then
   chkbox2_rc = "TAK"
 end if
 if chkbox3.Checked then
   chkbox3_rc = "TAK"
 end if
 DataArea.InnerHTML = ""
 TextArea.InnerHTML = ""
 window.resizeTo 768,120
 TextArea.InnerHTML = "Proszę czekać,<br>trwa Instalacja " & strSystem 
If strdp <> "null" Then
   objShell.run ("%comspec% /c diskpart /s "&chr(34)&arrCommands(1)&"\repozytorium\pliki\DP\"&strDP&chr(34)),0,true
Else
  set colVolumes = objWMIService.ExecQuery("select * from Win32_Volume Where Name = '"&strDrive&"\\'")
   For Each objVolume in colVolumes
    objVolume.Format "NTFS",True,,"",False

If Not objFSO.FileExists("x:\windows\temp\dp.txt") Then
Set objFile = objFSO.CreateTextFile("x:\windows\temp\dp.txt", True)
objFile.WriteLine "select volume " & strDrive & vbCrLf & "active" & vbCrLf & "exit"
objFile.close
End If
objShell.Run ("%comspec% /c diskpart /s x:\windows\temp\dp.txt"),0,true
objFSO.DeleteFile "x:\windows\temp\dp.txt"
   Next
End If
 objShell.run ("bootsect.exe /nt52 " & strDrive & " /force /mbr"),0,true

 objShell.run (arrCommands(1) & "\repozytorium\instalatory\"&rc_name&"\i386\winnt32.exe /makelocalsource /noreboot /syspart:" & strDrive & " /tempdrive:" & strDrive  &strunattended),0,true

 if chkbox2_rc = "TAK" then
     objFso.CopyFolder arrCommands(1)&"\"&pliki_oem, strDrive&"\$WIN_NT$.~LS\$OEM$", True
 end if
 If strOEM <> "null" Then
     objFSO.CopyFile strOEM&"\*", strDrive&"\$WIN_NT$.~LS\I386\", True
 End IF

 If strMassStorage <> "null" Then
   Set objFile = objFSO.OpenTextFile(strDrive&"\$WIN_NT$.~BT\winnt.sif",1,true)
   strUnAtt = objFile.ReadAll
   objFile.Close
   Set objFile = objFSO.OpenTextFile(strMassStorage&"\untd.txt",1,true)
   strMass = objFile.ReadAll
   objFile.close
   Set objFile = objFSO.CreateTextFile(strDrive&"\$WIN_NT$.~BT\winnt.sif",true)
   objFile.Write strUnAtt & strnonunat & strMass
   objFile.Close
 If Not objFso.FolderExists(strDrive&"\$WIN_NT$.~LS\$OEM$") Then
  Set f = objFso.CreateFolder(strDrive&"\$WIN_NT$.~LS\$OEM$")
 End If
  Set f = Nothing
 objFso.CopyFolder strMassStorage&"\txtsetup", strDrive&"\$WIN_NT$.~LS\$OEM$\TEXTMODE", True
 objFso.CopyFolder strMassStorage&"\txtsetup", strDrive&"\$WIN_NT$.~BT\$OEM$", True
 End If 

IF chkbox3_rc = "TAK" then
   objShell.Run ("Wpeutil Reboot"),0,false
End If
 
 window.resizeTo 800,600
 MenuSystem
 DataArea.InnerHTML = ""
 TextArea.InnerHTML = ""
End sub


Sub Func_Back_repo_conf
DataArea.InnerHTML = ""
TextArea.InnerHTML = ""
window.resizeTo 512,120
strbck1 = "<input class='button' type='button' onmouseover='MouseOver' onmouseout='MouseOut' value='Wróć' onClick='install_repo_conf ""&strSystem&"",""&rc_name&"",""&rc_oembios&"",""&rc_massstorage&"",""&pliki_oem&"",""&plik_unattended&""' style='left:5%; top:65%; width:125px;'>"
strbck2 = "<input class='button' type='button' onmouseover='MouseOver' onmouseout='MouseOut' value='Diskpart' onClick='diskpart' style='left:10%; top:65%; width:125px;'>"
strbck3 = "<input class='button' type='button' onmouseover='MouseOver' onmouseout='MouseOut' value='Rezygnuję' onClick='Cancel' style='left:15%; top:65%; width:125px;'>"
TextArea.InnerHTML = "Nie wybrano partycji docelowej"
DataArea.InnerHTML = strbck1 & strbck2 & strbck3
End Sub



Sub Vista_Inst
  Window.resizeTo 750,250
  MENU.InnerHTML = ""
  DataArea.InnerHTML = ""
  TextArea.InnerHTML = ""
 On Error Resume Next

  Set folder = objfso.GetFolder(arrCommands(1)&"\vista_Installer\vista_unattend")
  Set files = folder.Files
    For each folderIdx In files 
  strBody42 = strBody42 & "<option value='"&folderIdx.Name&"'>"& folderIdx.Name &"</option>"
    Next

  Set colSubfolders = objWMIService.ExecQuery("Associators of {Win32_Directory.Name='"&arrCommands(1)&"\vista_Installer\vista_unattend\AOems'} Where AssocClass = Win32_Subdirectory ResultRole = PartComponent")
    For Each objFolder in colSubfolders
  strBody45 = strBody45 & "<option value='"&objFolder.Name&"'>"& objFolder.fileName &"</option>"
    Next
  
  Set folder = objfso.GetFolder(arrCommands(1)&"\vista_Installer\vista_unattend\dp")
  Set files = folder.Files
    For each folderIdx In files 
  strBody48 = strBody48 & "<option value='"&folderIdx.Name&"'>"& folderIdx.Name &"</option>"
    Next

         
  str40 = "<option value='null'>null</option>"
  str41 = "<span style='display:inline width:60px; position:absolute; top:15%; left:5%'><select size='1' name='AvailableUnattend'>"
  str43 = "<input class='button' type='button' onmouseover='MouseOver' onmouseout='MouseOut' value='Potwierdź wybór' onClick='Vista_Instal' style='left:25%; top:50%; width:125px;'>"
  str44 = "<input class='button' type='button' onmouseover='MouseOver' onmouseout='MouseOut' value='Rezygnuję' onClick='Cancel' style='left:35%; top:50%; width:125px;'>"
  str46 = "<span style='display:inline width:80px; position:absolute; top:30%; left:5%'><select size='1' name='AvailableAOems'>"
  str47 = "<span style='display:inline width:60px; position:absolute; top:60%; left:5%'><input type='checkbox' name='chkbox1'>  Autorestart</span>"
  str48 = "<span style='display:inline width:100px; position:absolute; top:45%; left:5%'><select size='1' name='AvailableDP'>"
  
  DataArea.InnerHTML = "<h2>Instalacja Systemu Vista lub Server 2008</h2>" & str41 & str40 & strBody42 & "</select>" & "  Proszę wybrać plik instalacji nienadzorowanej</Span>" & str46 & str40 & strBody45 & "</select>" & "  Proszę wybrać Alternatywny katalog $OEM$</Span>" & str48 & str40 & strBody48 & "</select>" & "  Proszę wybrać skrypt przygotowujący dysk</Span>" & str47 & str43 & str44 
End Sub

Sub Vista_Instal
strunattend = AvailableUnattend.Value
straoems = AvailableAOems.Value
strdp =  AvailableDP.Value
 if chkbox1.Checked then
   chkbox1_Vista = "TAK"
 end if
MENU.InnerHTML = ""
DataArea.InnerHTML = ""
TextArea.InnerHTML = ""
window.resizeTo 725,160
TextArea.InnerHTML = "Instalacja systemów z lini Vista<br>Windows Vista, Serwer 2008"
If strdp <> "null" Then
 objShell.run ("%comspec% /c" & "diskpart /s "&chr(34)&arrCommands(1)&"\vista_Installer\vista_unattend\DP\"&strDP&chr(34)),0,true
End If
If strunattend = "null" AND straoems = "null" Then
  objShell.run (arrCommands(1) & "\vista_Installer\setup.exe /noreboot"),0,true
ElseIF strunattend <> "null" AND straoems = "null" Then
  objShell.run (arrCommands(1) & "\vista_Installer\setup.exe /noreboot /unattend:"&arrCommands(1)&"\vista_Installer\vista_unattend\"&strunattend),0,true
ElseIF strunattend = "null" AND straoems <> "null" Then
  objShell.run (arrCommands(1) & "\vista_Installer\setup.exe /noreboot /m:"&straoems),0,true
Else
  objShell.run (arrCommands(1) & "\vista_Installer\setup.exe /noreboot /m:"&straoems&" /unattend:"&arrCommands(1)&"\vista_Installer\vista_unattend\"&strunattend),0,true
End If

IF chkbox1_Vista = "TAK" then
  window.close()
End If
window.resizeTo 1024,768
MenuSystem
TextArea.InnerHTML = ""
End Sub



Sub Seven_Inst
  Window.resizeTo 750,250
  MENU.InnerHTML = ""
  DataArea.InnerHTML = ""
  TextArea.InnerHTML = ""
  On Error Resume Next

  Set folder = objfso.GetFolder(arrCommands(1)&"\seven_Installer\seven_unattend")
  Set files = folder.Files
    For each folderIdx In files 
  strBody22 = strBody22 & "<option value='"&folderIdx.Name&"'>"& folderIdx.Name &"</option>"
    Next

  Set colSubfolders = objWMIService.ExecQuery("Associators of {Win32_Directory.Name='"&arrCommands(1)&"\seven_Installer\seven_unattend\AOems'} Where AssocClass = Win32_Subdirectory ResultRole = PartComponent")
    For Each objFolder in colSubfolders
  strBody25 = strBody25 & "<option value='"&objFolder.Name&"'>"& objFolder.FileName &"</option>"
    Next
  
  Set folder = objfso.GetFolder(arrCommands(1)&"\seven_Installer\seven_unattend\dp")
  Set files = folder.Files
    For each folderIdx In files 
  strBody28 = strBody28 & "<option value='"&folderIdx.Name&"'>"& folderIdx.Name &"</option>"
    Next

         
  str20 = "<option value='null'>null</option>"
  str21 = "<span style='display:inline width:60px; position:absolute; top:15%; left:5%'><select size='1' name='AvailableUnattend'>"
  str23 = "<input class='button' type='button' onmouseover='MouseOver' onmouseout='MouseOut' value='Potwierdź wybór' onClick='Seven_Instal' style='left:25%; top:50%; width:125px;'>"
  str24 = "<input class='button' type='button' onmouseover='MouseOver' onmouseout='MouseOut' value='Rezygnuję' onClick='Cancel' style='left:35%; top:50%; width:125px;'>"
  str26 = "<span style='display:inline width:80px; position:absolute; top:30%; left:5%'><select size='1' name='AvailableAOems'>"
  str27 = "<span style='display:inline width:60px; position:absolute; top:60%; left:5%'><input type='checkbox' name='chkbox1'>  Autorestart</span>"
  str28 = "<span style='display:inline width:100px; position:absolute; top:45%; left:5%'><select size='1' name='AvailableDP'>"
  
  DataArea.InnerHTML = "<h2>Instalacja Systemu z lini Seven</h2>" & str21 & str20 & strBody22 & "</select>" & "  Proszę wybrać plik instalacji nienadzorowanej</Span>" & str26 & str20 & strBody25 & "</select>" & "  Proszę wybrać Alternatywny katalog $OEM$</Span>" & str28 & str20 & strBody28 & "</select>" & "  Proszę wybrać skrypt przygotowujący dysk</Span>" & str27 & str23 & str24 
End Sub

Sub Seven_Instal
strunattend = AvailableUnattend.Value
straoems = AvailableAOems.Value
strdp =  AvailableDP.Value
 if chkbox1.Checked then
   chkbox1_Seven = "TAK"
 end if
MENU.InnerHTML = ""
DataArea.InnerHTML = ""
TextArea.InnerHTML = ""
window.resizeTo 725,160
TextArea.InnerHTML = "Instalacja systemów z lini Seven<br>Windows Seven, Serwer 2008 R2"

If strdp <> "null" Then
 objShell.run ("%comspec% /c" & "diskpart /s "&chr(34)&arrCommands(1)&"\seven_Installer\seven_unattend\DP\"&strDP&chr(34)),0,true
End If
If strunattend = "null" AND straoems = "null" Then
  objShell.run (arrCommands(1) & "\seven_Installer\setup.exe /noreboot"),0,true
ElseIF strunattend <> "null" AND straoems = "null" Then
  objShell.run (arrCommands(1) & "\seven_Installer\setup.exe /noreboot /unattend:"&arrCommands(1)&"\seven_Installer\seven_unattend\"&strunattend),0,true
ElseIF strunattend = "null" AND straoems <> "null" Then
  objShell.run (arrCommands(1) & "\seven_Installer\setup.exe /noreboot /m:"&straoems),0,true
Else
  objShell.run (arrCommands(1) & "\seven_Installer\setup.exe /noreboot /m:"&straoems&" /unattend:"&arrCommands(1)&"\seven_Installer\seven_unattend\"&strunattend),0,true
End If

IF chkbox1_Seven = "TAK" then
  window.close()
End If

window.resizeTo 1024,768
MenuSystem
TextArea.InnerHTML = ""
End Sub


sub cancel
DataArea.InnerHTML = ""
TextArea.InnerHTML = ""
window.resizeTo 800,600
MenuSystem
end sub


Sub ghost
MENU.InnerHTML = ""
window.resizeTo 512,80
TextArea.InnerHTML = "Uruchomiono Ghost 32"
objShell.Run (arrCommands(1) & "\tools\ghost32.exe -prefos"),0,True
window.resizeTo 800,600
MenuSystem
TextArea.InnerHTML = ""
End Sub


Sub ntp
MENU.InnerHTML = ""
window.resizeTo 512,80
TextArea.InnerHTML = "Uruchomiono Notatnik"
objShell.Run ("notepad"),1,True
window.resizeTo 800,600
MenuSystem
TextArea.InnerHTML = ""
End Sub


Sub cmd
MENU.InnerHTML = ""
window.resizeTo 512,80
TextArea.InnerHTML = "Uruchomiono Wiersz Poleceń"
objShell.Run ("%comspec%"),1,True
window.resizeTo 800,600
MenuSystem
TextArea.InnerHTML = ""
End Sub


Sub NET
MENU.InnerHTML = ""
window.resizeTo 512,80
TextArea.InnerHTML = "Startuje sieć"
objShell.Run ("wpeutil InitializeNetwork"),0,True
objShell.Run ("wpeutil DisableFirewall"),0,True
window.resizeTo 800,600
MenuSystem
TextArea.InnerHTML = ""
End Sub

Sub CE
MENU.InnerHTML = ""
window.resizeTo 512,80
TextArea.InnerHTML = "Uruchomiono CubicExplorera"
objShell.Run (arrCommands(1) & "\tools\CubicExplorerPortable\CubicExplorerPortable.exe"),0,True
window.resizeTo 800,600
MenuSystem
TextArea.InnerHTML = ""
End Sub

Sub FC
MENU.InnerHTML = ""
window.resizeTo 512,80
TextArea.InnerHTML = "Uruchomiono FreeCommandera"
objShell.Run (arrCommands(1) & "\tools\FreeCommanderPortable\FreeCommanderPortable.exe"),0,True
window.resizeTo 800,600
MenuSystem
TextArea.InnerHTML = ""
End Sub

Sub Opera
MENU.InnerHTML = ""
window.resizeTo 512,80
TextArea.InnerHTML = "Uruchomiono Operę"

objShell.Run (arrCommands(1) & "\tools\OperaPortable\OperaPortable.exe"),0,True
window.resizeTo 800,600
MenuSystem
TextArea.InnerHTML = ""
End Sub

Sub tskmgr
MENU.InnerHTML = ""
window.resizeTo 512,80
TextArea.InnerHTML = "Uruchomiono Menedżer zadań"
objShell.Run ("taskmgr"),1,True
window.resizeTo 800,600
MenuSystem
TextArea.InnerHTML = ""
End Sub


sub wyjscie(str_str)
If str_str = 1 Then
window.close()
ElseIf str_str = 2 Then
objShell.Run ("Wpeutil Reboot"),0,false
ElseIf str_str = 3 Then
window.parent.location.reload()
End If
end sub

Sub MouseOver
Set x = window.event.srcElement
x.style.cursor = "HAND"
x.className = x.classname & "_hover"

End Sub

Sub MouseOut
Set x = window.event.srcElement
x.style.cursor = "default"
x.className = split(x.className,"_")(0)

End Sub

</script>

<body id=body>

<span id=menu></span>

<span id=DataArea></span>
<span id=TextArea></span>

</body>
</HTML>
 

 

linki zewnętrzne Menu lub Menu

 

Menu potrzebuje dodatkowych plików (w katalogu img) graficznych dla batonów. Są to dwa pliki o nazwach: menu_pionowe_tlo.gif (domyślny dla wszystkich batonów) oraz menu_pionowe_tlo2.gif (dla batona wskazanego).

 

i filmik pokazujący jak to wygląda.

 

 

windows720110414232600.th.png

 

Co prawda kompresja troszkę popsuła efekt (na wszelki wypadek również wersja statyczna) ale myślę, że widać koncepcję, zmienia się nie tylko sam baton ale i kursor :).

 

W załączniku przykładowe pliki graficzne.

 

winpe.jpg

menu_pionowe_tlo.gif menu_pionowe_tlo2.gif

pzdr

Odnośnik do komentarza
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...