Totalny w-file tym razem. Tyle, że rozwiązany :)
Problem – zautomatyzować operację dodawania wpisów w BCD, żeby skryptem dodawać Pingwina do boot menu w Windows 7.
Pierwszy krok prosty: dodajemy wpis dla grub4dos - http://grub4dos.sourceforge.net/wiki/index.php/Grub4dos_tutorial#Booting_GRUB_for_DOS_via_the_Windows_Vista_boot_manager
Teraz wypada by to przenieść na inną maszynę – chwilka przekopywania się przez dokumentację i okazuje się, że BCDEdit umożliwia import i export ustawień. piknie – robić backup i potem go odzyskać na innej maszynie. Niestety nie działa. Z tego prostego powodu, że wpis dla W7 nie ma GUID {current}, tylko jakiś dziwoląg – niestety GUIDy są generowane pseudolosowo. Efekt: pingwin się podnosi, Windows nie ^^
Rozwiązania są dwa:
1. Wykorzystać WMI i BCDProvider (http://msdn.microsoft.com/en-us/library/aa362675(v=VS.85).aspx) i można zrobić tak (wymaga wcześniejszego dodania wpisów):
set args = WScript.Arguments
num = args.Count
if num <> 1 then
WScript.Echo “Usage: CScript \\nologo [Menu Selection]“
WScript.Quit 1
end if
MenuPick=args.Item(0)
Const BcdLibraryString_Description = &h12000004
Const BootMgrId = “{9dea862c-5cdd-4e70-acc1-f32b344d4795}“
Const DefaultType = &h23000003
Const WindowsImages = &h10200003
strComputer = “.“
Set objStoreClass = GetObject(“winmgmts:{(Backup,Restore)}\\“ & _
strComputer & “\root\wmi:BcdStore“)
objStoreClass.OpenStore “”, objStore
objStore.EnumerateObjects WindowsImages, colObjects
For Each objObject in colObjects
objObject.GetElement BcdLibraryString_Description, objElement
If Instr(objElement.String, MenuPick) Then
objStore.OpenObject BootMgrId, objBootMgr
objBootMgr.SetObjectElement DefaultType, objObject.ID
End If
Next
2. wykręcić pętlę w CMD:
for /f “tokens=3“ %%a in (’bcdedit -create -d “PJWSTK Linux“ -application bootsector’) do set guid=%%a
bcdedit /set %guid% device boot
bcdedit /set %guid% path \grldr.mbr
bcdedit /displayorder %guid% /addlast
działa pięknie – po prostu pobiera trzecie słowo z outputu BCDEDIT – to ZAWSZE jest GUID :)
teraz można to wrzucić jako cmd /c “%scriptroot%\bcd.cmd” do Task Sequence w MDT i mamy zautomatyzowane dodawanie pingwinów na W7 :D
PS. warto pamiętać, ze sysprep kasuje zawartość BCD :)
Dorzucę jeszcze taki drobiazg, że klient TFTP powinien zwracać pakiet z potwierdzeniem po każdym pakiecie od serwera. A w WDS działa to tak, że raz na tysiąc pakietów zwraca bitmapę pakietów które dostał. Ot taka optymalizacja… ;)
widzę że lm zapowiada się ciekawie;)
czy mogłbym dostać adres email do Domela?:> jakos nigdzie sie nimi nie chwalicie ;]
łatwo znaleźć - domel [at] pjwstk [dot] edu [dott] pl