Over the past couple of months as a preparation for future deployment of computers at my company, I've been working on building a new dual-boot windows 7 image.  Both of the boots will need to be Windows 7 which made it a little more difficult to accomplish.  Through trial and error, I've been able to finalize the settings and have one up and working with computers through several trials so far.  I thought I would share some of the basics that helped us get on our feet and got everything working.

  1. Make an initial boot of Windows 7 using either the disk or an image already stored that you can change the unattend file to work properly for the next boot.
  2. Get all the updates needed for the system (Windows, Java, Flash) if you need them.
  3. Have the unattend ready to go inside of the sysprep folder.
  4. Run the Sysprep for the first system using OOBE and ensure that the Generalized box is checked and have the shutdown go to Shutdown not reboot.
  5. Have a Windows 7 install disk, depending on the system, hit the "F" key that will go to the one time boot menu.
  6. Go to the CD/DVD drive and run from disk.
  7. Start the install like you normally would.
  8. When you get to the spot where you would choose the disk, create a new partition for the new drive.
  9. Run the install as usual.  When the PC will reboot, it will automatically choose the right boot to go into.  (I would advise to let the PC choose the boot).
10. After the install has finished, as before run updates and ensure that the 2nd boot has an unattend file also.
11. Next we need to name the two boots.  We will use BCDedit for this.
11.a. First you will need to know the names of the two drives.  From an elevated command prompt run bcdedit /v
11.b. Next naming will help differentiate which boot you want to use. While still in the elevated command prompt run bcdedit /set (insert identifier) description "XXX"
11.c. Next you will want to run the same for the other boot.
11.d. Next will be to select the display order.  If you want a different order then just type the following in the elevated command prompt: bcdedit /displayorder (insert identifier) /addlast or /addfirst depending on which you want.
12. Now run Sysprep for the second boot ensuring that the OOBE, Generalize, and shutdown are prepared.
13. This time when you start up the PC, make sure to go through the NIC and go to the K2000 server to take the image of the PC.
14. Run the procedure as usual, ensure that you get all of the drives when you run this!!
15. After the image has been saved to K2000, go into the web client and start setting up for the actual image.
16. Ensure the Pre-Installation Tasks have creating a System (C) and two Partitions D xxxGB and E XXXGB (make sure the HDD can handle the room you want to give!)
17. Next set up the Mid-Level tasks as necessary.
18. For the post-installation tasks, there is one that will need to be created for the dual-boot to work.  We need to make a BCDedit file.
19. To create the bcdedit we would go to Library, post-installation tasks, Choose action, Add Application.
20. We created a .ps1 script to work for this (I'll attach a basic idea at the bottom of the page).  For our paramer to work we used the following:
20.a. C:\Windows\System32\WindowsPowerShell\v1.0\powershell -nologo -executionpolicy bypass -noprofile -file bcdedit.ps1
20.b. This has tested to work as long as the file has been attached.
21. Save the script and add it to the post-install task list and save.
22. After the changes have been made to the manifest, now it's time to test and see if the boot works!!
23. Boot into the K2000 with the PC that will be taking the image, run your new image to the PC.
24. After the PC has finished up, It will automatically reboot into one of the drives.  To ensure that the two drives have seperate names, it's run through the powershell script for BCDedit.
25. Next ensure that you have logged into both of your boots and everything should be ready for the next steps including getting IP addresses and naming the PC.

The bcdedit.ps1 script we use is as follows:  *as a note, when we did our testing and checkup, our drives were backwards that's why the ps1 script has a lot of steps in it.  If your order is correct you wouldn't need to add all of this.  However, ensure that you do have the device and osdevice to enable the second boot.


#Set the colors for the console window
$Host.Ui.RawUi.BackGroundColor = "Black"
$Host.Ui.RawUi.ForeGroundColor = "White"
#Clear the screen
cls

Function WriteValue ($Label, $Value)
{
    Write-Host $Label -foregroundcolor "Gray" -NoNewLine
    Write-Host ": " -foregroundcolor "Gray" -NoNewLine
    Write-Host $Value
}
Function WriteSuccess
{
    Write-Host ": " -foregroundcolor "Gray" -NoNewLine
    Write-Host Success -foregroundcolor "Green"
}
$otherboot = bcdedit /enum `
  | Select-String "path" -Context 2,0 `
  | % { $_.Context.PreContext[0] -replace '^identifier +' } `
  | ? { $_ -ne "{current}" }
bcdedit /set $otherboot description "YYY"
bcdedit /set $otherboot device partition=D:
bcdedit /set $otherboot osdevice partition=D:
bcdedit /displayorder $otherboot /addlast
bcdedit /set '{current}' description "XXX"
WriteValue "Boot ID is" $otherboot
WriteSuccess

If this is confusing or if you have other suggestions I'd be glad to hear about it!  This is just the basics of how I was finally able to get this to work!