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 & "rootwmi: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 :)
maggreg