Skocz do zawartości

maggreg

Użytkownicy
  • Postów

    649
  • Dołączył

  • Ostatnia wizyta

Odpowiedzi opublikowane 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.

     

    esata12-01.JPG esata13-01.JPG

     

    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. 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:

     

    windows720100919230709.th.pngwindowsxpprofessional20z.th.pngwindowsxpprofessional20n.th.pngwindows720100919230723.th.png

     

    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:

    obrazzeschowka.th.png

     

    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. 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

  7. 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

  8. 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

  9. 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 
    

  10. 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
    
    
    

  11. 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
    

  12. 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
    

  13. 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:

     

    obrazzeschowka.th.png

     

     

    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:

    nowyobrazmapabitowaoe.th.png

     

    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

     

     
     
  14. 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

  15. Ś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:

     

    obrazzeschowka.th.png

     

    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

  16. 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

  17. 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

  18. 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:

     

    windows720100829190125.th.png

     

     

    następnie komunikat (ponieważ w komendzie nie użyłem -sure) będący ostatnim zabezpieczeniem:

     

    windows720100829190137.th.png

     

    i potem normalne odtwarzanie:

     

    windows720100829190149.th.png

     

    Jeżeli w pliku WinREConfig.xml dodatkowo dopiszemy <NonAdminToolsOnly/> otrzymamy menu recovery z ukrytymi standardowymi opcjami, zostanie tyko ghost:

     

    windows720100829185620.th.png

     

    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:

     

    windows720100815182802.th.png, windows720100815171930.th.png, windows720100815172426.th.png, windows720100815172448.th.png

     

    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

  19. 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 windows720100829164615.th.png i przywracanie windows720100829182229.th.png

     

    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

  20. 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

  21. 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

  22. 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ę...