maggreg Opublikowano 2 Stycznia 2011 Zgłoś Udostępnij Opublikowano 2 Stycznia 2011 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
maggreg Opublikowano 2 Stycznia 2011 Autor Zgłoś Udostępnij Opublikowano 2 Stycznia 2011 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
maggreg Opublikowano 2 Stycznia 2011 Autor Zgłoś Udostępnij Opublikowano 2 Stycznia 2011 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
maggreg Opublikowano 13 Stycznia 2011 Autor Zgłoś Udostępnij Opublikowano 13 Stycznia 2011 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. G: ---- DVD -------- SETUP ------------ WINXP ---------------- PRO (cała zawartość płytki) -------------------- i386 (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
maggreg Opublikowano 23 Stycznia 2011 Autor Zgłoś Udostępnij Opublikowano 23 Stycznia 2011 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
maggreg Opublikowano 23 Stycznia 2011 Autor Zgłoś Udostępnij Opublikowano 23 Stycznia 2011 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
maggreg Opublikowano 23 Stycznia 2011 Autor Zgłoś Udostępnij Opublikowano 23 Stycznia 2011 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
maggreg Opublikowano 14 Kwietnia 2011 Autor Zgłoś Udostępnij Opublikowano 14 Kwietnia 2011 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
maggreg Opublikowano 14 Kwietnia 2011 Autor Zgłoś Udostępnij Opublikowano 14 Kwietnia 2011 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. 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. pzdr Odnośnik do komentarza
Rekomendowane odpowiedzi