Skocz do zawartości

maggreg

Użytkownicy
  • Postów

    649
  • Dołączył

  • Ostatnia wizyta

Treść opublikowana przez maggreg

  1. Posiadam kolekcję dysków zewnętrznych w różnych obudowach z interfejsami zarówno sata jak i esata, do tego często potrzebuję podłączyć również standardowy dysk bez obudowy. poszukuję stosownej przejściówki. Ponieważ przełączanie kabli rożnych standardów nie jest zbyt wygodne więc posiłkuję się kabelkiem przejściowym wydłubanym ze standardowego śledzia ze złączami ESATA. Szukam jednak rozwiązania bardziej estetycznego i elastycznego, znalazłem w przepastnej sieci coś co mi odpowiada, niestety w ogóle niedostępne w naszym kraju. Chodzi mi o coś takiego jak na obrazkach. A oto strona Esata to sata adapter Tu moje pytanie. Czy ktoś z kolegów forumowiczów widział coś podobnego w naszych sklepach? pzdr
  2. maggreg

    Vista i utracony XP

    Tak na przyszłość. W miejsce bcdedit /set {ntldr} device partition=C: zawsze można wpisać bcdedit /set {ntldr} device partition=\device\harddisk0\partition2 W takiej sytuacji prawidłowy wpis powstanie nawet jeśli dodawany system nie ma przypisanej litery. Natomiast kolejność numeracji pokrywa się z tym co widzimy w "zarządzaniu dyskami" > diskmgmt.msc. pzdr
  3. Podłączenie loadera GRUB4DOS pod menu startowe systemu Startowanie emulowanego napedu CD lub Bootloadera PLOP Kolega @Rafael22peb zapytał mnie czy można uruchomić z pomocą systemowych plików rozruchowych emulację napędu iso czy też (bardzo przydatnego gdy bios nie wspiera uruchamiania z biosu) bootloadera PLOP. Co prawda emulowane iso ma bardzo wiele ograniczeń o których za chwilę a plop-a można uruchomić bezpośrednio z w/w kontenerów ale niejako wywołany do tablicy postanowiłem spreparować paczkę która to umożliwi z użyciem pakietu GRUB4DOS. Na początek trochę obrazków jak to wygląda w działaniu: Po kolei widzimy - Menu w systemie Windows 7 (bądź Vista), Menu w systemie XP (ew 2003), Menu GRUB4DOS, PLOP Ponieważ w przypadku Siódemki (Visty) wpis znajduje się w menu narzędzi nie powoduje ono pojawienia się menu startowego na komputerach z pojedynczym wpisem, aby dostać się do tej pozycji należy przy starcie systemu przytrzymać klawisz F5. Oto pliki potrzebne do uruchomienia zestawu w dwóch wersjach - minimalistycznej oraz zawierającej przykładowe iso (uruchamiające czysty WINPE). mini: setgrub mini lub setgrub mini rozszerzone setgrub lub setgrub Paczkę należy rozpakować na partycję botującą1' a następnie uruchomić skrypt setGRUB.vbs znajdujący się w katalogu grub który doda odpowiednie wpisy dla danego systemu (skrypt rozpoznaje wersję systemu automatycznie). Oto sam skrypt: On Error Resume Next Set objShell = CreateObject("WScript.Shell") Set objFSO = CreateObject("Scripting.FileSystemObject") Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") Set colItems = objWMIService.ExecQuery("Select Version from Win32_OperatingSystem",,48) For Each objItem in colItems strVersion = Left(objItem.Version, 1) Next Set colDisks = objWMIService.ExecQuery("Select DeviceID from Win32_LogicalDisk Where DriveType =3 AND DeviceID <> 'A:' AND DeviceID <> 'B:'") If strVersion = 6 Then For Each objDisk in colDisks If objFSO.FileExists(objDisk.DeviceID &"\boot\bcd") Then strbcdstore = objDisk.DeviceID &"\boot\bcd" Set objWshScriptExec = objShell.exec("bcdedit /store "&strbcdstore&" /create /d "&chr(34)& "Start GRUB4DOS"&chr(34)&" /application bootsector") Set objStdOut = objWshScriptExec.StdOut While Not objStdOut.AtEndOfStream strLine = objStdOut.ReadLine Wend arrItems1 = Split(strLine, "{") arrItems2 = Split(arrItems1(1), "}") strLine = "{"&arrItems2(0)&"}" objShell.run("bcdedit /store "&strbcdstore&" /set "&strLine&" device boot"),0,true objShell.run("bcdedit /store "&strbcdstore&" /set "&strLine&" path \grldr.mbr"),0,true objShell.run("bcdedit /store "&strbcdstore&" /toolsdisplayorder "&strLine&" /addlast"),0,true wscript.quit End If NEXT ElseIf strVersion = 5 Then For Each objDisk in colDisks If objFSO.FileExists(objDisk.DeviceID &"\boot.ini") Then strFolder = objDisk.DeviceID & "\\boot.ini" Set colFiles = objWMIService.ExecQuery("Select Drive From CIM_DataFile Where Name = '" & strFolder & "'") For Each colFile in colFiles Set objTextFile = objFSO.OpenTextFile(colFile.Drive&"\boot.ini", 8, True) strtext = colFile.Drive&"\grldr="&chr(34)&"Start GRUB4DOS"&chr(34) objTextFile.WriteLine(strtext) objTextFile.Close NEXT wscript.quit End If NEXT ELSE msgbox "Skrypt nie obsługuje tego systemu operacyjnego" &vbCrLf& "Dalsze wykonywanie skryptu jest niemożliwe",vbOKOnly,"Błąd" wscript.quit End If msgbox "Nie znaleziono pliku rozruchowego" &vbCrLf& "Jeżeli plik znajduje się na partycji bez przypisanej litery" &vbCrLf& "Należy ją tymczasowo przypisać i ponownie uruchomić skrypt",vbOKOnly,"Błąd" wscript.quit Pora wspomnieć o ograniczeniach emulowanego CD - po pierwsze CD znika w momencie kiedy odpalany system przejdzie w protected mode czyli nie da się w ten sposób odpalić choćby winpe w wersji niższej niż 2.0, nie da się też uruchomić linuxów live, nie ma też sensu uruchamianie instalacji Win XP z takiego medium bo przestaje ono być dostępne po pierwszym restarcie. Drugim problemem który dotyczy zarówno pliku ISO jak i PLOP-a jest to, że te pliki muszą się znajdować w ciągłym obszarze dysku, jeżeli będą fragmentaryczne nie uruchomią się. W przypadku zestawu obejściem problemu jest to, że PLOP nie jest uruchamiany bezpośrednio ale jako image stacji dyskietek. W przypadku iso można je z mapować z użyciem ramu co wymagałoby zmian w menu GRUBA które nie jest w tym przypadku dostępne bezpośrednio na dodatek wymaga to sporo ramu i troszkę traci sens. Innym sposobem jest z defragmentowanie pliku iso - do tego celu w katalogu GRUB znajduje się plik Contig.exe (standardowo stanowi on część pakietu sysinternals), jako parametr dla programu wystarczy podać nazwę pliku ze ścieżką. 1' Zasadniczo na partycji botującej muszą się znaleźć pliki grldr i grldr.mbr a katalog GRUB można umieścić na innej partycji, grub4dos powinien sobie poradzić. ps. Znający pakiet GRUB4DOS zauważą, że brakuje w paczce dołączonego menu.lst, otóż nie jest ono potrzebne ponieważ wymagane wpisy znajdują się bezpośrednio w menu wbudowanym w grldr. pzdr
  4. Skrobnąłem taki skrypt - może ci zaskoczy: MACSet.vbs const HKEY_LOCAL_MACHINE = &H80000002 strKeyPath = "SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}" strnazwa = "Połączenie lokalne" strMAC = "00112933E155" strMAC = Replace(strMAC , ":", "") strMAC = Replace(strMAC , "-", "") Set objRegistry=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & "." & "\root\default:StdRegProv") Set objWMIService = GetObject("winmgmts:\\" & "." & "\root\cimv2") Set colNetAdapters = objWMIService.ExecQuery ("Select * From Win32_NetworkAdapter " & "Where (NetConnectionStatus = '2' OR NetConnectionStatus = '1') AND NetConnectionID = '" & strnazwa & "'",,48) For Each objNetAdapter In colNetAdapters objNetAdapter.disable objRegistry.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubkeys If IsArray(arrSubkeys) Then For Each strSubkey In arrSubkeys objRegistry.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath&"\"&strSubkey,"DriverDesc",strValue if strValue = objNetAdapter.Description then objRegistry.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath&"\"&strSubkey,"NetworkAddress",strMAC end if Next End If objNetAdapter.enable Next W strnazwa musisz podać nazwę połączenia przypisanego do karty dla której chcesz zmienić mac A w strMAC nowy MAC bez separatorów między sekcjami - teraz już można. pzdr
  5. Tym razem coś z innej beczki a mianowicie skrypty do instalacji Windowsa XP z użyciem udostępnionego pakietu. Trochę to wykracza poza główną tematykę tego cyklu a i sam system już leciwy i przydatność takich produktów powinna maleć no ale na forach wciąż ten temat się powtarza (zwłaszcza w kontekście sterowników massstorage - ale o tym za chwilę). Udostępnię dwa skrypty - jeden do przygotowania dysku a drugi do samej instalacji. Skrypt instalacyjny uwzględnia możliwość użycia pliku instalacji nienadzorowanej oraz potrafi zainstalować sterowniki massstorage (SATA, AHCI, RAID itp). Aby skrypt zadziałał należy na penie założyć dodatkowy katalog o nazwie XP, do tego katalogu należy przegrać cały folder i386 z płyty instalacyjnej windowsa. Aby zainstalować system w trybie nienadzorowanym należy plik odpowiedzi o nazwie unattend.txt umieścić również w katalogu XP. Aby zainstalowały się sterowniki massstorage należy umieścić je w podkatalogu txtsetup wewnątrz folderu XP, dodatkowo katalogowi musi towarzyszyć niewielki plik tekstowy o nazwie txtsetup.txt wewnątrz folderu XP a sam pakiet sterowników powinien spełniać pewne kryteria (większość sterowników spełnia je z marszu ale nie wszystkie o czym napiszę za chwilę. Skrypt NR #6 xpdisk.vbs Set objShell = CreateObject("WScript.Shell") Set objFSO = CreateObject("Scripting.FileSystemObject") if MsgBox ("Skrypt usunie wszystkie partycje z dysku nr 0" &vbCrLf& "a nastepnie założy jedną partycję o określonym rozmiarze" &vbCrLf& "Kliknij OK tylko jeżeli naprawdę wiesz co robisz" &vbCrLf& "Czy na pewno kontynuować?" ,VbOKCancel + vbDefaultButton2 + VbExclamation,"Podejmij decyzję") = 2 then wscript.quit End If If Not objFSO.FileExists("x:\windows\temp\dp.txt") Then Set objFile = objFSO.CreateTextFile("x:\windows\temp\dp.txt", True) objFile.WriteLine "select disk 0" & vbCrLf & "clean" & vbCrLf & "create partition primary size=10240" & 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" msgbox "Kliknij aby zamknąć skrypt",vbOKOnly,"Gotowe" WScript.quit Skrypt czyści dysk i zakłada na nim partycje o rozmiarze 10 GB - jeżeli mamy już założoną partycję z której chcemy skorzystać ten skrypt można pominąć, jeżeli chcemy założyć partycję o innym rozmiarze wystarczy wy edytować fragment size=10240 wstawiając własną wartość. I właściwy skrypt instalacyjny: Skrypt NR #7 xpinst.vbs Set objShell = CreateObject("WScript.Shell") Set objFSO = CreateObject("Scripting.FileSystemObject") if MsgBox ("Skrypt zainstaluje system XP na pierwszej partycji" &vbCrLf& "Kliknij OK tylko jeżeli naprawdę wiesz co robisz" &vbCrLf& "Czy na pewno kontynuować?" ,VbOKCancel + vbDefaultButton2 + VbExclamation,"Podejmij decyzję") = 2 then wscript.quit End If Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colDisks = objWMIService.ExecQuery("Select DeviceID from Win32_LogicalDisk Where DriveType =2 AND DeviceID <> 'A:' AND DeviceID <> 'B:'") For Each objDisk in colDisks strFolder = objDisk.DeviceID & "\\boot\\455asd8.znk" Set colFiles = objWMIService.ExecQuery("Select Drive From CIM_DataFile Where Name = '" & strFolder & "'") For Each colFile in colFiles zrodlo = colFile.Drive & "\xp" NEXT NEXT If Not objFSO.FileExists(zrodlo & "\i386\winnt32.exe") Then msgbox "Nie znaleziono plików instalacyjnych windowsa" &vbCrLf& "Dalsze wykonywanie skryptu jest niemożliwe",vbOKOnly,"Błąd" wscript.quit End If If Not objFSO.FileExists("x:\windows\temp\dpxp.txt") Then Set objFile = objFSO.CreateTextFile("x:\windows\temp\dpxp.txt", True) objFile.WriteLine "select disk 0" & vbCrLf & "select partition 1" & vbCrLf & "format fs=ntfs label=WinXP quick" & vbCrLf & "active" & vbCrLf & "assign" & vbCrLf & "exit" objFile.close End If objShell.Run ("%comspec% /c diskpart /s x:\windows\temp\dpxp.txt"),0,true objFSO.DeleteFile "x:\windows\temp\dpxp.txt" On Error Resume Next Set colDiskDrives = objWMIService.ExecQuery("SELECT * FROM Win32_DiskDrive") For Each objDrive In colDiskDrives strDeviceID = Replace(objDrive.DeviceID, "\", "\\") Set colPartitions = objWMIService.ExecQuery("ASSOCIATORS OF {Win32_DiskDrive.DeviceID=""" & strDeviceID & """} WHERE AssocClass = " & "Win32_DiskDriveToDiskPartition") For Each objPartition In colPartitions Set colLogicalDisks = objWMIService.ExecQuery("ASSOCIATORS OF {Win32_DiskPartition.DeviceID=""Disk #0, Partition #0""} WHERE AssocClass = " & "Win32_LogicalDiskToPartition") For Each objLogicalDisk In colLogicalDisks sciezka = objLogicalDisk.DeviceID Next Next Next If objFSO.FileExists(zrodlo & "\unattend.txt") Then struntd = " /unattend:" & zrodlo &"\unattend.txt" Else stroem = "[unattended]" & vbCrLf & "OemPreinstall=Yes" &vbCrLf& "DriverSigningPolicy=Ignore" &vbCrLf End If objShell.run (zrodlo & "\i386\winnt32.exe /makelocalsource /noreboot /syspart:" & sciezka & " /tempdrive:" & sciezka & struntd),0,true objShell.Run ("%comspec% /c bootsect /nt52 "&sciezka& " /mbr /force"),0,true If objFSO.FileExists(zrodlo & "\txtsetup.txt") Then If Not objFso.FolderExists(sciezka&"\$WIN_NT$.~LS\$OEM$") Then objFso.CreateFolder(sciezka&"\$WIN_NT$.~LS\$OEM$") End If objFso.CopyFolder zrodlo&"\txtsetup", sciezka&"\$WIN_NT$.~LS\$OEM$\TEXTMODE", True objFso.CopyFolder zrodlo&"\txtsetup", sciezka&"\$WIN_NT$.~BT\$OEM$", True Set objFile = objFSO.OpenTextFile(zrodlo&"\txtsetup.txt",1,true) strMass = objFile.ReadAll objFile.close Set objFile = objFSO.OpenTextFile(sciezka&"\$WIN_NT$.~BT\winnt.sif",1,true) strUnAtt = objFile.ReadAll objFile.Close Set objFile = objFSO.CreateTextFile(sciezka&"\$WIN_NT$.~BT\winnt.sif",true) objFile.Write strUnAtt & strMass & vbCrLf & stroem objFile.Close End If if MsgBox ("Zakończono wstępną fazę instalacji" &vbCrLf& "Kliknij OK aby zrestartować komputer" &vbCrLf& "lub Cancel aby powrócić do konsoli" ,VbOKCancel + vbDefaultButton2,"Podejmij decyzję") = 1 then objShell.Run ("Wpeutil reboot"),0,true End If WScript.quit Skrypt instaluje system na pierwszej partycji pierwszego dysku twardego w komputerze, odpowiednie dane startowe zostają ustawione automatycznie. Pora wrócić do sterowników massstorage Sterowniki muszą się znajdować bezpośredni wewnątrz katalogu txtsetup, nie mogą być zagnieżdżone wewnątrz podkatalogów, większość sterowników spełnia te kryteria ale są wyjątki, np sterowniki VIA, SI czy Promise, w takiej sytuacji należy sterownik przenieść do katalogu txtsetup i wy edytować ścieżki wewnątrz plików txtsetup.oem w sekcji [disk]. Dodatkowo sterownikom musi towarzyszyć mały plik tekstowy txtsetup.txt o następującej strukturze: Przykład dla nvidia ahci [MassStorageDrivers] "NVIDIA nForce Storage Controller (required)"="OEM" "IDE CD-ROM (ATAPI 1.2)/PCI IDE Controller"="RETAIL" Przykład dla Intela (bardziej rozbudowana wersja): [MassStorageDrivers] "Intel(R) ESB2 SATA AHCI Controller" = "OEM" "Intel(R) ICH7R/DH SATA AHCI Controller" = "OEM" "Intel(R) ICH7M/MDH SATA AHCI Controller" = "OEM" "Intel(R) ICH8R/DH/DO SATA AHCI Controller" = "OEM" "Intel(R) ICH8M-E/M SATA AHCI Controller" = "OEM" "Intel(R) ICH9R/DO/DH SATA AHCI Controller" = "OEM" "Intel(R) ICH9M-E/M SATA AHCI Controller" = "OEM" "Intel(R) ICH10D/DO SATA AHCI Controller" = "OEM" "Intel(R) ICH10R SATA AHCI Controller" = "OEM" "Intel(R) ESB2 SATA RAID Controller" = "OEM" "Intel(R) ICH7R/DH SATA RAID Controller" = "OEM" "Intel(R) ICH7MDH SATA RAID Controller" = "OEM" "Intel(R) ICH8R/ICH9R/ICH10R/DO SATA RAID Controller" = "OEM" "Intel(R) ICH8M-E/ICH9M-E SATA RAID Controller" = "OEM" "IDE CD-ROM (ATAPI 1.2)/PCI IDE Controller" = "RETAIL" Dane te są analogią sekcji [scsi] pliku txtsetup.oem właściwą dla plików odpowiedzi instalacji nienadzorowanej. Mała uwaga - ponieważ instalacja takich sterowników teoretycznie wymaga aby cały proces odbył się w trybie nienadzorowanym w skrypcie xpinst.vbs jest małe oszustwo które to umożliwia, skutkiem ubocznym jest zautomatyzowanie części tekstowej instalacji nawet w trybe nadzorowanym (ale myślę, że jest to miły dodatek. Na wszelki wypadek udostępniam paczki odpowiednio dopasowanych sterowników wraz z plikami txtsetup.txt, nie są może to najnowsze wersje bo paczka powstawała jakiś czas temu ale większość sterowników sprawdziłem osobiście (i działały), zawsze można też ich użyć jako szablonu dla nowszych wersji bądź innych kontrolerów. Sterowniki massstorage lub Sterowniki massstorage Więcej sterowników można znaleźć na driverpacks.net Niestety nie wszystkie sterowniki z tej strony zawierają plik do instalacji w trybie tekstowym, co prawda nie jest on zbyt skomplikowany i można go napisać od podstaw ale początkującym może to sprawić pewien problem, w takim wypadku proszę o kontakt - postaram się pomóc. Ponieważ budzi to wątpliwości a nie każdy jak się przekonałem umie odczytać zawartość skryptów wyjaśniam iż należy użyć tylko jednego sterownika MASSstorage, użycie wspólnej paczki wymagałoby napisania jednego wspólnego pliku txtsetup.oem dla wszystkich sterowników na dodatek takie coś potrafi spowodować kłopoty w środowisku XP ponieważ sterowniki w tym trybie zostają dołączone obligatoryjnie niezależnie czy dany kontroler występuje czy nie i pojaiwiają się konflikty prowadzace do BSOD-ów,Prawidłowa zawartość katalogu XP na penie powinna mieć postać jak na poniższym obrazku: W przykładzie widzimy sterowniki LSI działające np z kontrolerem SCSI w maszynach wirtualnych opartych o vmware lub virtualbox i żeby była jasność, plik unattend.txt widoczny na obrazku jest opcjonalny, można użyć sterowników mass bez niego (w trybie nadzorowanym) jak i viceversa (tryb nienadzorowany bez sterowników), natomiast jeżeli chcemy użyć trybu nienadzorowanego łącznie ze sterownikami massstorage musimy zadbać aby nie zdublować wpisów w obu plikach txt, możemy oczywiście wypełnić odpowiednią sekcję w unattend.txt a plik txtsetup.txt pozostawić pusty (ale obecny jako triger dla skryptu). pzdr
  6. Tak można - ale zdecydowanie nie jest to konfiguracja dla początkujących . Można też spróbować z grub4dos. pzdr
  7. A oto skrypt który może się na pierwszy rzut oka wydawać skryptem koncepcyjnym. Jego zadaniem jest zbudowanie w kontenerze BCD na partycji pierwszej wpisów uruchamiających system z partycji drugiej. Dlaczego koncepcyjny? Bo jeżeli partycja 1 zawiera BCD to nie wykluczone, że ma on już w środku odpowiedni wpis, jeżeli nie ma to i tak nie zostanie on utworzony a wtedy można użyć skryptu NR #4. Mimo wszystko jest sytuacja kiedy i taki skrypt da się wykorzystać - mamy z nią do czynienia w przypadku kiedy posiadamy dwie odrębne konfiguracje rozruchowe - jedna na partycji pierwszej druga na drugiej i chcemy z tej drugiej zrezygnować. Coś takiego wbrew pozorom ma sens ponieważ chroni nas przed sytuacją w której uszkodzenie partycji z systemem uszkadza nam też konfigurację rozruchu, recovery nie do końca działa albo po przywróceniu nie odtwarza konfiguracji rozruchu a my nie bardzo wiemy jak taką odbudować, oczywiście przyda się też w przypadku kiedy chcemy mieć porządek lub po prostu ukryć pliki rozruchowe przed niefrasobliwymi użytkownikami (zakładam, że partycja nr 1 będzie zablokowana dla edycji narzędziami okienkowymi). Dodatkowo - choć to raczej tylko teoria) możemy wykorzystać skrypt do zbudowania konfiguracji na ręcznie skopiowanym szablonie (bo np nie ufamy narzędziu bcdboot bądź z jakiegoś powodu ono nie działa), dla przypomnienia szablon znajduje się na partycji systemowej w katalogu "Windows\System32\config" a plik nazywa się BCD-Template. Oczywiście aby powyższe założenia zostały spełnione należy z pomocą skryptu NR #1 ustawić partycję 1 jako rozruchową. Oto skrypt NR #5 bcdsysmin.vbs Set objFSO = CreateObject("Scripting.FileSystemObject") Set objShell = CreateObject("WScript.Shell") if MsgBox ("Skrypt doda do kontenera BCD minimalistyczny" &vbCrLf& "wpis uruchamiający system" &vbCrLf& "Czy na pewno kontynuować?" ,VbOKCancel + vbDefaultButton2 + VbExclamation,"Podejmij decyzję") = 2 then wscript.quit End If Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colDiskDrives = objWMIService.ExecQuery("SELECT * FROM Win32_DiskDrive") For Each objDrive In colDiskDrives strDeviceID = Replace(objDrive.DeviceID, "\", "\\") Set colPartitions = objWMIService.ExecQuery("ASSOCIATORS OF {Win32_DiskDrive.DeviceID=""" & strDeviceID & """} WHERE AssocClass = " & "Win32_DiskDriveToDiskPartition") For Each objPartition In colPartitions Set colLogicalDisks = objWMIService.ExecQuery("ASSOCIATORS OF {Win32_DiskPartition.DeviceID=""Disk #0, Partition #0""} WHERE AssocClass = " & "Win32_LogicalDiskToPartition") For Each objLogicalDisk In colLogicalDisks sciezka = objLogicalDisk.DeviceID Next Next Next If Not objFSO.FileExists(sciezka &"\boot\BCD") Then msgbox "Partycja nie zawiera kontenera BCD" &vbCrLf& "Dalsze wykonywanie skryptu jest niemożliwe",vbOKOnly,"Błąd" wscript.quit End If If Not objFSO.FileExists("x:\windows\temp\tempsysmin.cmd") Then Set objFile = objFSO.CreateTextFile("x:\windows\temp\tempsysmin.cmd", True) objFile.WriteLine "@for /f " &chr(34)& "tokens=2" &chr(34)& " %%a in ('bcdedit /create /d " &chr(34)& "System Windows" &chr(34)& " /application osloader') do set WINPETEMP=%%a" objFile.WriteLine "@bcdedit /set %WINPETEMP% path \windows\system32\winload.exe" objFile.WriteLine "@bcdedit /set %WINPETEMP% systemroot \windows" objFile.WriteLine "@bcdedit /set %WINPETEMP% nx OptIn" objFile.WriteLine "@bcdedit /set %WINPETEMP% locale pl-PL" objFile.WriteLine "@bcdedit /set %WINPETEMP% device partition=\device\harddisk0\partition2" objFile.WriteLine "@bcdedit /set %WINPETEMP% osdevice partition=\device\harddisk0\partition2" objFile.WriteLine "@bcdedit /set %WINPETEMP% detecthal yes" objFile.WriteLine "@bcdedit /displayorder %WINPETEMP% /addfirst" objFile.WriteLine "@bcdedit /default %WINPETEMP%" objFile.Close End If objShell.Run ("%comspec% /c x:\windows\temp\tempsysmin.cmd"),0,true msgbox "Kliknij aby zamknąć skrypt",vbOKOnly,"Gotowe" WScript.quit Skrypt nie buduje wpisu odpowiedzialnego za przywracanie ze stanu hibernacji, taki powinien pojawić się sam po uruchomieniu systemu z włączoną odpowiednią opcją. Wkrótce udostępnię bardziej sensowny skrypt budujący pełną konfigurację od podstaw wraz z narzędziem recovery i klawiszem rozruchowym. pzdr
  8. Po pierwsze EasyBCD działa w win XP tak samo jak w Viście czy Siódemce - różnica w tym, że nie znajduje systemowego magazynu BCD bo taki po prostu nie istnieje. Oczywiście można i w XP próbować zbudować recovery w oparciu o zestaw PE 2.0 > 3.0 ale myślę, że to dość pokrętna metoda wymagająca zabiegów w stylu doubleboot. Można spróbować z WinPE 1.5 w połączeniu z ghostem, można też próbować odpalić iso z pomocą boot.ini - warunkiem jest wielkość - iso musi być względnie małe i nie wykluczone, że trzeba przerobić kilka plików. Jeżeli ktoś chce się pobawić to mała podpowiedź: Przykładowy boot.ini [boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINNT [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows XP Professional" /fastdetect multi(0)disk(0)rdisk(0)partition(1)\MININT="Microsoft Windows PE" /fastdetect /minint loader w przypadku minint będzie szukał pliku winnt.sif oto przykład dla minint zamkniętego w pliku iso: [setupData] BootDevice = "ramdisk(0)" BootPath = "\i386\System32\" OsLoadOptions = "/noguiboot /fastdetect /minint /rdexportascd /rdpath=/rdpath=\image\erd.iso" Uwaga - tą metodą odpalimy tylko iso zgodne w formatem winpe 1.5 (2005) i wcześniejsze, nie da się tym sposobem odpalić dowolnego iso. z winnt.sif można też odpalić plik obrazu w formacie sdi lub np img ale ze względu na przygotowanie samych obrazów (zwłaszcza sdi) nie polecam tego początkującym. Jednak jeśli ktoś się interesuje to proszę bardzo - przykładowe winnt.sif dla obu przypadków: [setupData] BootDevice = "ramdisk(0)" BootPath = "\i386\SYSTEM32\" OsLoadOptions = "/fastdetect /minint /rdimageoffset=36352 /rdpath=\image\erd.sdi" [setupData] BootDevice="ramdisk(0)" BootPath="\i386\System32\" OsLoadOptions="/fastdetect /minint /rdexportashd /rdpath=\image\XP.img" Teraz wystarczy tylko zbudować iso (bądź image) paragona w oparciu o winpe 1.5 i próbować. Życzę powodzenia. pzdr
  9. W Windows Seven jest dostępne narzędzie które tworzy standardową konfigurację rozruchu dla tego systemu. Jest ono również dostępne w powyższym pakiecie. Oto przykład jego zastosowania: bcdboot D:\Windows /l pl-pl /s C: Gdzie D:\windows jest ścieżką do katalogu windows w naszym systemie - oznacza to, ze bcdboot do zadziałania wymaga zainstalowanego systemu oraz dostępu do niego. W powyższej ścieżce narzędzie szuka też plików które zostaną użyte do budowy pakietu startowego (choćby bootmgr) oraz pliku BCD-Temtlate (znajduje się w system32\config) który jest bazą do stworzenia kontenera rozruchu. Nie należy zmieniać pozycji tych plików i podawać innej ścieżki gdyż będzie ona wpisana jako domyślna w zbudowanym BCD. /l pl-pl - konfiguracja lokalizacji dla plików rozruchowych (i tylko dla nich a nie dla systemu). /s C: - litera partycji na której konfiguracja rozruchowa będzie utworzona. Utworzone BCD jest wersją minimalistyczną, wkrótce wkleję skrypt który buduje bardziej skomplikowany zestaw jednak w połączeniu ze Skryptem NR #1 pozwala zbudować praktycznie na zgliszczach podstawy pozwalające zbotować system. Update 11-09-2010 Oto skrypt który załatwia sprawę automatycznie: Skrypt NR #4 bcdbt.vbs Set objShell = CreateObject("WScript.Shell") Set objFSO = CreateObject("Scripting.FileSystemObject") if MsgBox ("Skrypt zbuduje minimalną konfigurację rozruchową" &vbCrLf& "opartą na szablonie systemowym" &vbCrLf& "Czy kontynuować?" ,VbOKCancel + vbDefaultButton2 + VbExclamation,"Podejmij decyzję") = 2 then wscript.quit End If Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colDiskDrives = objWMIService.ExecQuery("SELECT Caption, DeviceID FROM Win32_DiskDrive") For Each objDrive In colDiskDrives Set colPartitions = objWMIService.ExecQuery("ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" & objDrive.DeviceID & "'} WHERE AssocClass = " & "Win32_DiskDriveToDiskPartition") For Each objPartition In colPartitions Set colLogicalDisks = objWMIService.ExecQuery("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='Disk #0, Partition #0'} WHERE AssocClass = " & "Win32_LogicalDiskToPartition") For Each objLogicalDisk In colLogicalDisks bootpart = objLogicalDisk.DeviceID Next Next Next For Each objDrive In colDiskDrives Set colPartitions = objWMIService.ExecQuery("ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" & objDrive.DeviceID & "'} WHERE AssocClass = " & "Win32_DiskDriveToDiskPartition") For Each objPartition In colPartitions Set colLogicalDisks = objWMIService.ExecQuery("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='Disk #0, Partition #1'} WHERE AssocClass = " & "Win32_LogicalDiskToPartition") For Each objLogicalDisk In colLogicalDisks syspart = objLogicalDisk.DeviceID Next Next Next objShell.Run ("%comspec% /c bcdboot.exe " &syspart& "\Windows /l PL-pl /s " &bootpart),0,true msgbox "Kliknij aby zamknąć skrypt",vbOKOnly,"Gotowe" WScript.quit Oczywiście tak jak i w przypadku podanych skryptów ten przykład opiera się o schemat w którym system znajduje się na partycji drugiej a pierwsza jest partycją odzyskiwania/recovery pzdr
  10. Mały skrypcik który wyrzuca z partycji nr 2 (domyślnie systemowej) pliki i katalogi które nie muszą trafić do obrazu partycji (śmieci), imagex np pomija te dane automatycznie. Może się przydać przed zrzuceniem takiej partycji do obrazu np ghostem. Skrypt NR #3 czyść.vbs On Error Resume Next Set objFSO = CreateObject("Scripting.FileSystemObject") Set objShell = CreateObject("WScript.Shell") kasuj "katalog", "\\?\GLOBALROOT\device\harddisk0\partition2\System Volume Information" kasuj "katalog", "\\?\GLOBALROOT\device\harddisk0\partition2\$windows.~bt" kasuj "katalog", "\\?\GLOBALROOT\device\harddisk0\partition2\$windows.~ls" kasuj "plik", "\\?\GLOBALROOT\device\harddisk0\partition2\winpepge.sys" kasuj "katalog", "\\?\GLOBALROOT\device\harddisk0\partition2\Windows\CSC" kasuj "katalog", "\\?\GLOBALROOT\device\harddisk0\partition2\Recycled" kasuj "katalog", "\\?\GLOBALROOT\device\harddisk0\partition2\Recycler" kasuj "plik", "\\?\GLOBALROOT\device\harddisk0\partition2\pagefile.sys" kasuj "plik", "\\?\GLOBALROOT\device\harddisk0\partition2\hiberfil.sys" kasuj "katalog", "\\?\GLOBALROOT\device\harddisk0\partition2\$Recycle.Bin" wscript.quit(0) Sub kasuj(FLD,scz) IF FLD = "katalog" Then If objfso.FolderExists(scz) then objFSO.DeleteFolder(scz) End If ElseIf FLD = "plik" Then If objfso.FileExists(scz) then objFSO.DeleteFile(scz) End If End If End Sub
  11. Trzeci skrypt dodaje do kontenera rozruchowego BCD na pierwszej partycji wpis uruchamiający środowisko Windows Recovery w wersji systemowej. Skrypt sprawdza czy partycja w ogóle zawiera kontener BCD a następnie sprawdza czy istnieje jedno z możliwych wystąpień pakietu WinRE. Domyślnie sprawdzane są dwie możliwości - recovery\winre.wim lub sources\boot.wim, oczywiscie mozna dopisać więcej możliwych opcji. Odpowiedni wpis pojawi się w sekcji "TOOLS/NARZĘDZIA" menu rozruchowego. Skrypt NR #2 bcdrec.vbs Set objFSO = CreateObject("Scripting.FileSystemObject") Set objShell = CreateObject("WScript.Shell") if MsgBox ("Skrypt doda do kontenera BCD wpis uruchamiający Windows Recovery" &vbCrLf& "Czy na pewno kontynuować?" ,VbOKCancel + vbDefaultButton2 + VbExclamation,"Podejmij decyzję") = 2 then wscript.quit End If Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colDiskDrives = objWMIService.ExecQuery("SELECT * FROM Win32_DiskDrive") For Each objDrive In colDiskDrives strDeviceID = Replace(objDrive.DeviceID, "\", "\\") Set colPartitions = objWMIService.ExecQuery("ASSOCIATORS OF {Win32_DiskDrive.DeviceID=""" & strDeviceID & """} WHERE AssocClass = " & "Win32_DiskDriveToDiskPartition") For Each objPartition In colPartitions Set colLogicalDisks = objWMIService.ExecQuery("ASSOCIATORS OF {Win32_DiskPartition.DeviceID=""Disk #0, Partition #0""} WHERE AssocClass = " & "Win32_LogicalDiskToPartition") For Each objLogicalDisk In colLogicalDisks sciezka = objLogicalDisk.DeviceID Next Next Next If Not objFSO.FileExists(sciezka &"\boot\BCD") Then msgbox "Partycja nie zawiera kontenera BCD" &vbCrLf& "Dalsze wykonywanie skryptu jest niemożliwe",vbOKOnly,"Błąd" wscript.quit End If If objFSO.FileExists(sciezka & "\recovery\winre.wim") Then strwim = "\recovery\winre.wim" ElseIf objFSO.FileExists(sciezka & "\sources\boot.wim") Then strwim = "\sources\boot.wim" Else msgbox "Nie znaleziono pakietu WinRE" &vbCrLf& "Dalsze wykonywanie skryptu jest niemożliwe",vbOKOnly,"Błąd" wscript.quit End If If Not objFSO.FileExists(sciezka &"\boot.sdi") Then Set colDisks = objWMIService.ExecQuery("Select DeviceID from Win32_LogicalDisk Where DriveType =2 AND DeviceID <> 'A:' AND DeviceID <> 'B:'") For Each objDisk in colDisks strFolder = objDisk.DeviceID & "\\boot\\455asd8.znk" Set colFiles = objWMIService.ExecQuery("Select Drive From CIM_DataFile Where Name = '" & strFolder & "'") For Each colFile in colFiles objFSO.CopyFile colFile.Drive& "\boot\boot.sdi" , sciezka& "\" NEXT NEXT End If If Not objFSO.FileExists("x:\windows\temp\temprecovery.cmd") Then Set objFile = objFSO.CreateTextFile("x:\windows\temp\temprecovery.cmd", True) objFile.WriteLine "@for /f " &chr(34)& "tokens=2" &chr(34)& " %%a in ('bcdedit /create /d " &chr(34)& "Ram Disk" &chr(34)& " /device') do set RAM=%%a" objFile.WriteLine "@bcdedit /set %RAM% ramdisksdidevice partition=\device\harddisk0\partition1" objFile.WriteLine "@bcdedit /set %RAM% ramdisksdipath \boot.sdi" objFile.WriteLine "@bcdedit /deletevalue %RAM% description" objFile.WriteLine "" objFile.WriteLine "@for /f " &chr(34)& "tokens=2" &chr(34)& " %%a in ('bcdedit /create /d " &chr(34)& "Windows Recovery" &chr(34)& " /application osloader') do set WINPETEMP=%%a" objFile.WriteLine "@bcdedit /set %WINPETEMP% path \windows\system32\winload.exe" objFile.WriteLine "@bcdedit /set %WINPETEMP% systemroot \windows" objFile.WriteLine "@bcdedit /set %WINPETEMP% winpe yes" objFile.WriteLine "@bcdedit /set %WINPETEMP% nx OptIn" objFile.WriteLine "@bcdedit /set %WINPETEMP% detecthal yes" objFile.WriteLine "@bcdedit /set %WINPETEMP% ems yes" objFile.WriteLine "@bcdedit /set %WINPETEMP% locale pl-PL" objFile.WriteLine "@bcdedit /set %WINPETEMP% device ramdisk=[\device\harddisk0\partition1]" &strwim& ",%RAM%" objFile.WriteLine "@bcdedit /set %WINPETEMP% osdevice ramdisk=[\device\harddisk0\partition1]" &strwim& ",%RAM%" objFile.WriteLine "@bcdedit /toolsdisplayorder %WINPETEMP% /addlast" objFile.Close End If objShell.Run ("%comspec% /c x:\windows\temp\temprecovery.cmd"),0,true msgbox "Kliknij aby zamknąć skrypt",vbOKOnly,"Gotowe" WScript.quit
  12. Drugi skrypt który ustawia atrybuty botowalności dla partycji pierwszej pierwszego dysku (w laptopach najczęściej jest to partycja odzyskiwania). Używać z umiarem gdyż w nieodpowiednich konfiguracjach może się skończyć brakiem możliwości uruchomienia systemu. Sam skrypt jednak nie jest destrukcyjny więc w każdej chwili można (ręcznie) wykonać operację odwrotną. Skrypt wpisuje odpowiedni sektor rozruchowy, ustawia atrybut partycji aktywnej, w razie potrzeby kopiuje plik bootmgr. Skrypt NR #1 act.vbs: Set objShell = CreateObject("WScript.Shell") Set objFSO = CreateObject("Scripting.FileSystemObject") if MsgBox ("Po wykonaniu skryptu system może przestać startować!!!" &vbCrLf& "Kliknij OK tylko jeżeli naprawdę wiesz co robisz" &vbCrLf& "Czy na pewno kontynuować?" ,VbOKCancel + vbDefaultButton2 + VbExclamation,"Podejmij decyzję") = 2 then wscript.quit End If Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colDiskDrives = objWMIService.ExecQuery("SELECT * FROM Win32_DiskDrive") For Each objDrive In colDiskDrives strDeviceID = Replace(objDrive.DeviceID, "\", "\\") Set colPartitions = objWMIService.ExecQuery("ASSOCIATORS OF {Win32_DiskDrive.DeviceID=""" & strDeviceID & """} WHERE AssocClass = " & "Win32_DiskDriveToDiskPartition") For Each objPartition In colPartitions Set colLogicalDisks = objWMIService.ExecQuery("ASSOCIATORS OF {Win32_DiskPartition.DeviceID=""Disk #0, Partition #0""} WHERE AssocClass = " & "Win32_LogicalDiskToPartition") For Each objLogicalDisk In colLogicalDisks sciezka = objLogicalDisk.DeviceID Next Next Next If Not objFSO.FileExists("x:\windows\temp\dp.txt") Then Set objFile = objFSO.CreateTextFile("x:\windows\temp\dp.txt", True) objFile.WriteLine "select disk 0" & vbCrLf & "select partition 1" & vbCrLf & "active" & vbCrLf & "setid id=27 override" & vbCrLf & "exit" objFile.close End If objShell.Run ("%comspec% /c bootsect /nt60 " &sciezka& " /mbr /force"),0,true objShell.Run ("%comspec% /c diskpart /s x:\windows\temp\dp.txt"),0,true If Not objFSO.FileExists(sciezka &"\bootmgr") Then Set colDisks = objWMIService.ExecQuery("Select DeviceID from Win32_LogicalDisk Where DriveType =2 AND DeviceID <> 'A:' AND DeviceID <> 'B:'") For Each objDisk in colDisks strFolder = objDisk.DeviceID & "\\boot\\455asd8.znk" Set colFiles = objWMIService.ExecQuery("Select Drive From CIM_DataFile Where Name = '" & strFolder & "'") For Each colFile in colFiles objFSO.CopyFile colFile.Drive& "\bootmgr" , sciezka& "\" NEXT NEXT End If msgbox "Kliknij aby zamknąć skrypt",vbOKOnly,"Gotowe" WScript.quit
  13. Aby formalności stało się za dość oto skrypt który jest domyślnie dostępny razem z archiwum. Skrypt NR #0 list.vbs: Set objShell = CreateObject("WScript.Shell") Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colDisks = objWMIService.ExecQuery("Select DeviceID from Win32_LogicalDisk Where DriveType =2 AND DeviceID <> 'A:' AND DeviceID <> 'B:'") For Each objDisk in colDisks strFolder = objDisk.DeviceID & "\\boot\\455asd8.znk" Set colFiles = objWMIService.ExecQuery("Select Drive From CIM_DataFile Where Name = '" & strFolder & "'") For Each colFile in colFiles objShell.CurrentDirectory = colFile.Drive destination = colFile.Drive NEXT NEXT On Error Resume Next Set colDiskDrives = objWMIService.ExecQuery("SELECT * FROM Win32_DiskDrive") For Each objDrive In colDiskDrives strDeviceID = Replace(objDrive.DeviceID, "\", "\\") Set colPartitions = objWMIService.ExecQuery("ASSOCIATORS OF {Win32_DiskDrive.DeviceID=""" & strDeviceID & """} WHERE AssocClass = " & "Win32_DiskDriveToDiskPartition") For Each objPartition In colPartitions Set colLogicalDisks = objWMIService.ExecQuery("ASSOCIATORS OF {Win32_DiskPartition.DeviceID=""Disk #0, Partition #0""} WHERE AssocClass = " & "Win32_LogicalDiskToPartition") For Each objLogicalDisk In colLogicalDisks sciezka = objLogicalDisk.DeviceID Next Next Next Set fso = CreateObject("Scripting.FileSystemObject") Set NewFile = fso.CreateTextFile(destination & "\wyniki\FileList.txt", True) Set folder = fso.GetFolder(sciezka) For Each objSubfolder in Folder.Subfolders NewFile.WriteLine("\" & objSubfolder.name) next NewFile.WriteLine vbcrlf ShowSubFolders folder, "" NewFile.WriteLine vbcrlf For each folderIdx In folder.Files NewFile.WriteLine("\" & folderIdx.Name) Next NewFile.Close objShell.Run ("%comspec% /c bcdedit /store \\?\GLOBALROOT\device\harddisk0\partition1\boot\bcd /enum all >" &destination& "\wyniki\bcd_part1.txt"),0,true objShell.Run ("%comspec% /c bcdedit /store \\?\GLOBALROOT\device\harddisk0\partition2\boot\bcd /enum all >" &destination& "\wyniki\bcd_part2.txt"),0,true msgbox "Kliknij aby zamknąć skrypt",vbOKOnly,"Gotowe" WScript.quit Sub ShowSubFolders(folder,nazwa) For Each Subfolder In Folder.SubFolders For Each file In SubFolder.Files NewFile.WriteLine(nazwa & "\" & subfolder.name & "\" & file.Name) Next NewFile.WriteLine vbcrlf ShowSubFolders Subfolder ,nazwa & "\" & Subfolder.name Next End Sub
  14. WinPE do celów diagnostyczno naprawczych Szczególnie rozwiązania problemów z partycjami Recovery Co prawda na sieci istnieje wiele zestawów PE często bogato wyposażonych ale zastosowanie ich przez niedoświadczonego użytkownika może być trudne. W wyniku prowadzonych przez kilka ostatnich dni dyskusji, część na tym forum (nie wszystkie były publiczne) zaświtała we mnie myśl, że istnieje zapotrzebowanie na proste narzędzie które ułatwi nam pomoc osobom z problemami uruchomieniowymi. W szczególności chodzi o przypadki kiedy dostęp do fabrycznej partycji recovery został uszkodzony w związku z działaniami użytkownika bądź błędami systemu. Pod poniższym linkiem znajduje się archiwum które należy wypakować na pena (lub inną pamięć przenośną, np SD), najlepiej jeśli pen będzie wcześniej wyczyszczony aby uniknąć ew konfliktów. WinPE lub WinPE Linki do wersji rozszerzonej o obsługę skryptów HTA: WinPE z HTA lub WinPE z HTA Następnie należy wykonać na penie skrypt bt.vbs dzięki temu pen zostanie ustawiony jako urządzenie botowalne. A tak powinien wyglądać efekt jego działania: W głównym katalogu pena znajdują się katalogi: libs, tools, skrypty, wyniki oraz boot. Ten ostatni jest właściwym katalogiem dla systemu PE pozostałe posłużą naszym celom. Do katalogu "skrypty" wrzucamy skrypty które będziemy wykonywać w w/w środowisku, przykładowy skrypt umieszczony w archiwum listuje zawartość pierwszej partycji pierwszego dysku twardego (domyślnie w większości laptopów będzie to partycja odzyskiwania) oraz listuje zawartość kontenerów rozruchowych na partycjach pierwszej i drugiej, inne skrypty które pojawią się w tym temacie trzeba będzie umieszczać właśnie w tym katalogu. Do katalogu "wyniki" trafiają właśnie wyniki użycia powyższych skryptów - w przykładowym skrypcie są to trzy pliki tekstowe. Katalog "tools" służy do umieszczania różnych narzędzi które będą nam pomocne podczas pracy z winpe a nie są skryptami napisanymi na potrzeby tego narzędzia, mogą to być np. przeglądarka internetowy w wersji PE czy choćby Total Commander, w archiwum jest to ghost na wszelki wypadek w wersji OEM służącej tylko do odtwarzania obrazów, ta wersja nie powinna naruszać licencji firmy Symantec. Niektóre narzędzia mogą wymagać dodatkowych plików, choćby bibliotek dll które nie są dostępne w środowisku PE, do tego właśnie służy katalog "libs" do którego należy takie dodatkowe pliki wrzucać. Wszystkie powyższe katalogi zostają dopisane do systemowej zmiennej "path" dzięki temu są dostępne w konsoli PE bez podawania ścieżek. W katalogu boot znajduje się plik znacznik o nazwie "455asd8.znk", na tej podstawie skrypty odnajdują właściwe ścieżki niezależnie pod jaką literą zostanie zamontowany nasz pen, nie należy tego pliku kasować ani powielać na innych partycjach w katalogu boot. W samym WinPE znajduje się bardzo przydatny w zastosowaniach recovery imagex więc nie należy już go dorzucać do "tools" WinPE nie zawiera środowiska RE, uznałem że nie ma potrzeby "rozrastać" środowiska w tym kierunku, takie coś zawsze można odpalić z płyty instalacyjnej a jak skrypty zadziałają to i pewnie z dysku się da . Następne skrypty wkrótce. Update 08.09.2010 - Nowa wersja skryptu bt.vbs która dodatkowo dba o to aby partycja na penie dostała atrybut "aktywna". Listing ponizej - pod linkami są wersje aktualne . If WScript.Arguments.length =0 Then Set objShell = CreateObject("Shell.Application") objShell.ShellExecute "wscript.exe", Chr(34) & _ WScript.ScriptFullName & Chr(34) & " uac", "", "runas", 1 Else Set objShell = CreateObject("WScript.Shell") Set objFSO = CreateObject("Scripting.FileSystemObject") Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colDisks = objWMIService.ExecQuery("Select DeviceID from Win32_LogicalDisk Where DriveType =2 AND DeviceID <> 'A:' AND DeviceID <> 'B:'") For Each objDisk in colDisks strFolder = objDisk.DeviceID & "\\boot\\455asd8.znk" Set colFiles = objWMIService.ExecQuery("Select Drive From CIM_DataFile Where Name = '" & strFolder & "'") For Each colFile in colFiles objShell.CurrentDirectory = colFile.Drive objShell.Run ("%comspec% /c bootsect /nt60 " &colFile.Drive& " /mbr /force"),1,true literka = colFile.Drive objFSO.DeleteFile "BootSect.exe" objFSO.DeleteFile "bt.vbs" NEXT NEXT Set colDiskDrives = objWMIService.ExecQuery("SELECT Caption, DeviceID FROM Win32_DiskDrive") For Each objDrive In colDiskDrives Set colPartitions = objWMIService.ExecQuery("ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" & objDrive.DeviceID & "'} WHERE AssocClass = " & "Win32_DiskDriveToDiskPartition") For Each objPartition In colPartitions Set colLogicalDisks = objWMIService.ExecQuery("ASSOCIATORS OF {Win32_LogicalDisk.DeviceID='" &literka& "'} WHERE AssocClass = " & "Win32_LogicalDiskToPartition") For Each objLogicalDisk In colLogicalDisks DP = "Select Disk " & objLogicalDisk.DiskIndex & VbCrLf &"Select Partition " & objLogicalDisk.Index + 1 Next Next Next If Not objFSO.FileExists(objShell.ExpandEnvironmentStrings("%temp%") & "\dp.txt") Then Set objFile = objFSO.CreateTextFile(objShell.ExpandEnvironmentStrings("%temp%") & "\dp.txt", True) objFile.WriteLine dp & vbCrLf & "active" & vbCrLf & "exit" objFile.close End If objShell.Run ("%comspec% /c diskpart /s " &objShell.ExpandEnvironmentStrings("%temp%") & "\dp.txt"),1,true objFSO.DeleteFile objShell.ExpandEnvironmentStrings("%temp%") & "\dp.txt" End If WScript.quit Jeżeli powyższy skrypt nie działa lub wyświetla błędy może to oznaczać problem z dostępem do pena (zajętość) lub niekompatybilność z danym systemem operacyjnym (nie gwarantuję działania w systemie XP). 08-10-2010 - Aktualizacja dla próbujących szczęścia pod XP patrz Post 8 W pierwszym przypadku można spróbować przekopiować skrypt poza pendrive (np na pulpit) wraz z plikiem bootsect.exe i wykonać przy zamkniętym napędzie przenośnym. W innych przypadkach można spróbować ręcznie ustawić odpowiednie parametry, otwieramy systemową konsolę w trybie administratora i wykonujemy komendy: bootsect /nt60 X: /mbr /force diskpart select disk 7 select partition 11' active exit X: to litera pod którą system widzi nasz napęd disk 7 - numer sprzetowy dysku w naszym systemie - można go sprawdzić uruchamiając diskmgmt.msc: Alternatywnie, gdy opcja "/force" powoduje błędy (plus alternatywny sposób podawania komend dla diskparta - jako ciekawostka) : bootsect /nt60 X: /mbr diskpart sel dis 7 sel par 12' act exit Jeżeli w zarządzaniu dyskami nasza partycja będzie miała atrybut "aktywna" wykonujemy tylko pierwszą linijkę z powyższego ciągu. Uwaga - parametr /force może powodować zawieszenie bootsect w systemach XP. 2k3 itp - należy spróbować wykonać komendę bez tego parametru ale bootsect musi się znajdować na innym napędzie/ścieżce np na pulpicie pzdr Uwaga - pod tym linkiem będzie się pojawiała paczka z na bieżąco aktualizowaną kolekcją skryptów Skrypty 1' - lub: select volume x: 2' - lub: sel vol x: UPDATE - Dodałem rozszerzoną wersję środowiska WinPE wzbogaconą o obsługę skryptów HTA, więcej informacji i linki w poście "WinPE z obsługą HTA" Linki dostępne również w bieżącym poście Update 21.12.2010 Ponieważ w przypadku niektórych konfiguracji sprzętowych skrypt startowy nie potrafi (w pierwszym przebiegu) prawidłowo wykryć i przypisać ścieżki do pena troszeczkę zmodyfikowałem skrypt startowy. Nowy skrypt należy podmienić wewnątrz pliku wim (wiec należy go uprzednio podmontować), odsyłam do dokumentacji programów imagex bądź dism. Obecna wersja skryptu: Set objShell = CreateObject("WScript.Shell") Set objFSO = CreateObject("Scripting.FileSystemObject") Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") strlitera = "" DO Set colDisks = objWMIService.ExecQuery("Select DeviceID from Win32_LogicalDisk Where DriveType =2 AND DeviceID <> 'A:' AND DeviceID <> 'B:'") For Each objDisk in colDisks strFolder = objDisk.DeviceID & "\\boot\\455asd8.znk" Set colFiles = objWMIService.ExecQuery("Select Drive From CIM_DataFile Where Name = '" & strFolder & "'") For Each colFile in colFiles Set WshEnv = objShell.Environment("PROCESS") WshEnv("Path") = colFile.Drive&"\libs;" &colFile.Drive&"\skrypty;" &colFile.Drive&"\tools;" &WshEnv("Path") WshEnv("Litera") = colFile.Drive strLitera = colFile.Drive NEXT NEXT Loop Until strlitera <> "" objShell.Run("%comspec% /k"),1,true Wscript.Quit
  15. W takim razie juz w samym systemie możesz wykonać skrypt w postaci podanej w poście: https://www.fixitpc.pl/index.php?/topic/1160-nie-moge-przywrocic-visty-home-premium-z-recovery/page__view__findpost__p__9625 Rzeczone pliki powinny pojawić się na pulpicie. MSI nie jest marką szczególnie popularną i na pewno taka informacja wzbogaci naszą wiedzę na temat systemu jaki ten producent zastosował. Ideałem byłoby jakbyś mógł shostować plik w winpe który odpala recovery w twoim laptopie - będzie to plik o nazwie boot.wim lub winre.wim na partycji odzyskiwania. Jeżeli masz ochotę się pobawić daj znać - napiszę jak uzyskać do niego dostęp bez ingerencji w strukturę systemu (bo prawdopodobnie dostęp do tego pliku bedzie zablokowany). pzdr
  16. To super. Mimo wszystko proszę cię o shostowanie tych plików które utworzył skrypt. Być może dzięki temu uda się pomóc komuś innemu w przyszłości. pzdr
  17. Ściągnij plik: http://www.przeklej.pl/plik/skrypty-rar-00208db6i40i Przygotuj sobie pendriva, wypakuj zawartość archiwum do głównego katalogu pena (dla pewności dobrze jakby pen był czysty). Uruchom skrypt bt.vbs, powinien ustawić bootsector pena. Wynik operacji powinien wyglądać mniej więcej tak: Uruchom komputer z tak przygotowanego pendriva. W konsoli która się odpali wpisz: "skrypt.vbs", zachowaj pena w takim stanie - może się jeszcze przydac. W wyniku tych operacji na penie powinny pojawić się trzy pliki: FileList.txt, bcd_part1.txt, bcd_part2.txt Są to pliki tekstowe - wrzuć ich zawartość na wklej.to albo wklej.org pzdr
  18. Myślę, ze jest to do uratowania ale będzie wymagało od ciebie trochę zaangażowania i pewnej wiedzy. Skoro system się nie odpala więc trzeba będzie się posłużyć windowsem pe, skoro odpaliłeś hirensa to zakładam, że i PE w innej wersji dasz radę. Przygotuję ci PE w odpowiedniej wersji, zawierające pewne skrypty które będziesz musiał wykonać i wyniki wstawić na sieć. Na podstawie tego co pokarzą wyniki działania skryptów podejmiemy dalsze działania. pzdr
  19. Szkoda, że nie zaglądam do działu Vista na naszym forum częściej bo myślę, że już dawno rozwiązali byśmy twój problem. Jeżeli nadal chcesz odpalić swoje reco to musimy najpierw stwierdzić jak wygląda twoja konfiguracja. proszę zapisz poniższy tekst tako plik VBS i wykonaj: If WScript.Arguments.length =0 Then Set objShell = CreateObject("Shell.Application") objShell.ShellExecute "wscript.exe", Chr(34) & _ WScript.ScriptFullName & Chr(34) & " uac", "", "runas", 1 Else On Error Resume Next Set objShell = CreateObject("WScript.Shell") objShell.CurrentDirectory = objShell.ExpandEnvironmentStrings("%userprofile%") & "\desktop" objShell.Run ("%comspec% /c mklink /d c:\tmprecovery \\?\GLOBALROOT\device\harddisk0\partition1\"),0,true Set fso = CreateObject("Scripting.FileSystemObject") Set NewFile = fso.CreateTextFile("FileList.txt", True) Set folder = fso.GetFolder("c:\tmprecovery") For Each objSubfolder in Folder.Subfolders NewFile.WriteLine("\" & objSubfolder.name) next NewFile.WriteLine vbcrlf ShowSubFolders folder, "" NewFile.WriteLine vbcrlf For each folderIdx In folder.Files NewFile.WriteLine("\" & folderIdx.Name) Next NewFile.Close objShell.Run ("%comspec% /c bcdedit /store \\?\GLOBALROOT\device\harddisk0\partition1\boot\bcd /enum all >%userprofile%\desktop\bcd_part1.txt"),0,true objShell.Run ("%comspec% /c bcdedit /store \\?\GLOBALROOT\device\harddisk0\partition2\boot\bcd /enum all >%userprofile%\desktop\bcd_part2.txt"),0,true objShell.Run ("%comspec% /c rmdir c:\tmprecovery"),0,true End If WScript.quit Sub ShowSubFolders(folder,nazwa) For Each Subfolder In Folder.SubFolders For Each file In SubFolder.Files NewFile.WriteLine(nazwa & "\" & subfolder.name & "\" & file.Name) Next NewFile.WriteLine vbcrlf ShowSubFolders Subfolder ,nazwa & "\" & Subfolder.name Next End Sub Skrypt wylistuje twoje magazyny BCD - zarówno obecny jak i ten z partycji Recovery oraz wylistuje pliki z tej partycji. Na pulpicie powinny ci się pojawić pliki z ww listingami - wrzuć ich zawartość na wklej.org lub wklej.to W zależności od zawartości która się pojawi stworzymy skrypt który odbuduje zależności i pozwoli odpalić system z ukrytą partycją. Niestety Toshiba próbuje podpiąć pod recovery własny frontend którego pliki nie koniecznie istnieją więc może być potrzebna edycja jednego pliku zamkniętego w boot.wim ale jak widać na obrazkach w tym temacie przy odrobinie pracy można ten zestaw uruchomić nawet na maszynie wirtualnej: https://www.fixitpc.pl/topic/596-system-recovery-prawie-profesjonalnie-i-kompleksowo/?do=findComment&comment=9449 W tym przypadku pliki konfiguracyjne napisałem od podstaw Mała dygresja odnośnie EasyBCD - narzędzie fajne ale nie koniecznie do zabawy w niestandardowe edycje - z góry odwołuje się do systemowego kontenera a wczytanie zewnętrznego pliku kończy się często pojawieniem w nim wpisów które nie koniecznie chcieliśmy w nim widzieć. Do poważnej zabawy polecam raczej bcdedit i ew skrypty. ps. już wiem czym męczył mnie rafael przez kilka dni na GG, niestety niektóre moje porady przekleił zbyt dosłownie przez co niektóre w twoim systemie wręcz nie miały sensu, mając świadomość, że będzie je wstawiał na forum byłbym ostrożniejszy (oczywiście pomijam błedy które mu się wkradły bo literówka rzecz ludzka ) pzdr
  20. A teraz jeszcze inna propozycja z użyciem wbudowanego mechanizmu w połączeniu z ghostem. Otóż w domyślnym środowisku recovery możemy dodać jedną własną komendę, należy w podmontowanym pliku winre.wim utwożyć katalog Tools w ścieżce sources\recovery. Do katalogu tego wrzucamy plik ghost32.exe i twożymy plik XML o nazwie WinREConfig.xml i następującej zawartości: <Recovery> <RecoveryTools> <RelativeFilePath>ghost32.exe</RelativeFilePath> <CommandLineParam>-clone,mode=pload,src=1:1\install.gho:1,dst=1:2</CommandLineParam> <AdminOnly>No</AdminOnly> </RecoveryTools> </Recovery> Wynikiem jest następujący zestaw: następnie komunikat (ponieważ w komendzie nie użyłem -sure) będący ostatnim zabezpieczeniem: i potem normalne odtwarzanie: Jeżeli w pliku WinREConfig.xml dodatkowo dopiszemy <NonAdminToolsOnly/> otrzymamy menu recovery z ukrytymi standardowymi opcjami, zostanie tyko ghost: Powyższe zostało zbudowane ręcznie ale jeżeli będzie zapotrzebowanie nie widzę przeszkód żeby i taki sposób oskryptować. A teraz ciekawostka - recovery Toshiby zbudowane od podstaw na maszynie wirtualnej: , , , Oczywiście sam skrypt się wywala z braku odpowiednich plików - ale i to można przerobić - sam front end Toshiby oprócz wyświetlenia komunikatów ogranicza się do podania plikowi batch (standardowy cmd) zmiennych o miejscu pobytu i nazwach plików obrazu, resztę wykonuje rzeczony batchfile. W systemie jest też kilka dodatkowych plików które jednak mają za zadanie tylko blokować możliwość przywracania w przypadku nieoryginalnej "Toshiby". Oczywiście batch można napisać sobie od podstaw a gustowne gui zostawić jako przykrywkę. pzdr
  21. A oto dawno obiecany skrypt do zastosowania z Ghostem. W stosunku do wersji imagex oprócz oczywiście użycia innego execa podstawowe różnicer sprowadzają się do: 1' skrypt zawiera sekcję czyszczącą - czyli pliki i katalogi które są standardowo przez imagex pomijane w tym przypadku zostają skasowane przed zrzuceniem obrazu. 2' brak jest funkcji formatującej partycję przed przywróceniem obrazu - bo nie jest potrzebna ghostowi. Oto same skrypt: masterscriptghost.vbs lub masterscriptghost.vbs Skrypt domyślnie należy uruchamiać tak jak i wcześniejsze wersje z pulpitu, na pulpicie powinien też się znaleźć plik ghost32.exe, skrypt jest przystosowany do pracy z włączonym uac. A oto najbardziej interesujący wycinek z uzyskanego wyniku: zrzut i przywracanie Reszta działa tak samo jak w wersji imagex łącznie z komunikatami ostrzegawczo-decyzyjnymi. ps Uwaga do osób które będą chciały użyć tego zestawu w wersji 64 bitowej, o ile wcześniejszy skrypt masterscriptwim.vbs powinien działać prawidłowo w postaci niezmienionej (oczywiście sam imageź należy zastosować w wersji 64bit) o tyle w skrypcie masterscriptghost.vbs należy zmienić odwołania do ghosta z ghost32 na ghost64 (i oczywiscie zastosować sam plik w odpowiedniej wersji). Na wszelki wypadek przerobiony skrypt: masterscriptghost64.vbs lub masterscriptghost64.vbs pzdr
  22. Apropo WinSxS jak któryś z polskich MVP był raczył zauważyć folder ma tendencję do rozrastania się daleko ponad wyobrażenie samego MS który to np. dla Win7 64bit zaleca 20GB miejsca podczas gdy choćby mój roczny system posiada katalog WinSxS o objętości 22GB. Jego linkowanie jednak wg mniema charakter czysto oszczędnościowy bądź ratunkowy (jeśli ustawiliśmy zbyt małą partycję systemową) i z punktu zabezpieczenia systemu (backupu) ma mniejsze znaczenie, ja natomiast podlinkował bym w takiej sytuacji repozytorium sterowników "driverstore" który też potrafi się nieźle rozrosnąć a po odtworzeniu systemu dostęp do niego może zaoszczędzić trochę ściągania. Osobiście używam junków od dość dawna, kiedyś miałem nawet postawione XP i 2003 korzystające ze wspólnych katalogów i było to dość wygodne, w tej chwili np. mam podlinkowane katalogi w moim folderze dystrybucyjnym do instalacji systemów co daje mi dużo swobody w customizacji instalacji. Nie zrozum tego jako polemiki bo w pełni zgadzam się z twoimi obserwacjami ale wydaje mi się, że zniszczone junkcje można dość łatwo odtworzyć a raczej nie wpływa to na zawartość podlinkowanych katalogów, poza tym zniszczone junkcje oznaczają, że powinniśmy poszukać też innych błędów w strukturze partycji i odbudowa linków może być naszym najmniejszym zmartwieniem. Oczywiście przy linkach należy zachować maksimum logiki bo problem może powstać kiedy zapomnimy co jest linkiem a co samym katalogiem, na szczęście nowe systemy wyróżniają junki w strukturze partycji. I jeszcze takie prowokujące pytanie, jak myślisz ilu z naszych przedmówców z tego tematu po przeniesieniu folderu przebudowuje rejestr i odtwarza linki. A wszyscy którzy chcą się w to pobawić niech pamiętają, że w rejestrze można spotkać linki odwołujące się do ścieżek w formacie 8.3. ps kiedyś zabawiłem się w zmianę litery przypisanej do partycji systemowej postawionej Visty i tu zabawa rejestrem była dopiero koszmarem. pzdr
  23. Myślę, że raczej chodzi o dość dosłowne traktowanie ścieżek przez najnowsze produkty MS które jest związane z użyciem podczas instalacji gotowego obrazu systemu, dodatkowo w grę wchodzą linki typu junk obecne w systemie które odwołują się do tych lokacji i choć takie zmienne jak %userprofile% są dla nas oczywiste to jednak dokumentacja opk (czy waik) sugeruje kłopoty przy deklaracji ścieżek innej niż domyślna nawet przy samej instalacji (nienadzorowanej). http://support.microsoft.com/kb/929831 Ale jak napisałem nie weryfikowałem tego osobiście choć przy okazji pojawienia się SP1 dla siódemki na pewno postawię wirtualnie system z opcją "FolderLocations" w pliku odpowiedzi, zobaczymy co się stanie (albo nie ). pzdr ps: A tak w ogóle to czy właśnie podjunkowanie takiego katalogu zamiast jego przenoszenia nie jest wygodniejsze i bezpieczniejsze zwłaszcza na systemie który już jakiś czas pracuje i wiele programów może posiadać wpisy odwołujące się bezpośrednio do domyślnych (czy też po prostu wcześniej istniejących) lokalizacji. pzdr2
  24. Przy takich zmianach warto mieć na uwadze zastrzeżenie Microsoftu dotyczące systemu Vista i nowszych. Po przeniesieniu katalogów systemowych (nie tylko dokumenty ale np katalog program files) niektóre aktualizacje a zwłaszcza service pack mogą się nie zainstalować lub zainstalować nieprawidłowo. Osobiście nie weryfikowałem powyższego ale zastrzeżenie to pada w oficjalnej dokumentacji deploingu w/w systemów. pzdr
×
×
  • Dodaj nową pozycję...