#Create a New Virtual Machine # This function sets the appropriate security on any Virtual Server object function setsecurity($Object) { $result = [Microsoft.VirtualServer.Interop.PowerShell]::SetSecurity($Object) } #Function to prompt a user for a number from 1 to n Function PromptUser([int]$max,[String]$prompt) { [int]$PromptUser = -1 [int]$value = Read-Host $prompt if ( ($value -gt 0 ) -and ($value -le $max) ) { $PromptUser= $value } return $PromptUser } #Prompt the user for a string Function PromptUser4String([string]$prompt) { $PromptUser4String = -1 [string]$value = Read-Host $prompt if ($value.length -gt 0 ) { $PromptUser4String= $value } return $PromptUser4String } [int]$iIndex = 0 write-host "Create a new virtual machine" write-host write-host "Step 1. Create Virtual Machine Configuration File`n" #Wrapper to set Security on Virtual Server COM objects $iResult = [System.Reflection.Assembly]::LoadFrom("$profdir\vsWrapperForPSH.DLL") $objVirtualServer=new-object -comobject VirtualServer.Application $iResult = setsecurity $objVirtualServer #should clean this up to use the default paths $strPath = -1 While ($strPath -eq -1) { $strPath = PromptUser4String("Enter the path of the new child") if (-not (Test-Path $strPath)) { write-host "Directory not found, try again." $strPath = -1 } } write-host $strName = -1 While ($strName -eq -1) { $strName = PromptUser4String("Enter the name for the Virtual Machine") } $objVirtualMachine = $objVirtualServer.CreateVirtualMachine($strName,$strPath) $iResult = SetSecurity $objVirtualMachine write-host "`n****************************" write-host ("Created Virtual Machine: {0}" -f $objVirtualMachine.Name) write-host "****************************" write-host write-host "Step 2. Choose the parent OS" write-host "1. Windows 2003 SP2" $strParent = -1 While ($strParent -eq -1) { $strParent = PromptUser4String("`nPlease select Operating System") } switch ($strParent) { "1"{$strParent = "E:\VMS\Parents\win2k3sp2\W2K3ENT-SP2-SYSPREP\W2K3ENT-SP2-SYSPREP.vhd"} default{$strParent = "E:\VMS\Parents\win2k3sp2\W2K3ENT-SP2-SYSPREP\W2K3ENT-SP2-SYSPREP.vhd"} } write-host write-host "Attaching Virtual Disk to the Virtual Machine" $strDisk = "$strPath\$strName.vhd" $iTask = $objVirtualServer.CreateDifferencingVirtualHardDisk($strDisk, $strParent) setSecurity $itask $iTask.waitforcompletion(-1) $strBusType = 0 $strBusNumber = 0 $strDeviceNumber = 0 $objHardDisk = $objVirtualMachine.AddHardDiskConnection($strDisk ,$strBusType,$strBusNumber,$strDeviceNumber) write-host write-host "Disk Attached OK" write-host write-host "Assigning DVD/CD-ROM drive to the Virtual Machine`n" $strBusNumber ++ $strDeviceNumber ++ $objDVD = $objVirtualMachine.AddDVDROMDrive($strBusType,$strBusNumber,$strDeviceNumber) write-host write-host "Added DVD OK" write-host write-host "Step 3. Configure amount of RAM to assign to the Virtual Machine`n" $strRAM = -1 While ($strRAM -eq -1) { $strRAM = PromptUser4String("Enter the amount of RAM (4Mb to 1847Mb)") if (($strRAM -lt 4) -and ($strRAM -gt 1847)) { write-host "RAM size must be between 4Mb and 1847Mb" $strRAM = -1 } } $objVirtualMachine.Memory = [int]($strRAM) write-host write-host ("Configured Memory: {0:N0}" -f $objVirtualMachine.Memory) write-host "`n****************************" Write-host "Machine Configuration Complate" write-host "****************************" write-host