Anexar discos Passthough via WMI (IDE ou SCSI)
Se deseja usar discos passthough com Hyper-V como vou anexar os discos? Que scripts utilizar? Bem, aqui está a resposta… Mas primeiro precisa decidir se vai para utilizar a controladora IDE virtual ou a controlador SCSI virtual. A controladora IDE é ideal se planear a inicialização a partir do disco de passthough ou se seu guest não suporta o adaptador SCSI virtual (Ex: Linux). O controlador SCSI é ideal se quiser adicionar/remover armazenamento da máquina virtual enquanto esta a ser executada (recurso do Hyper-V R2) ou se tiver mais de 4 discos que deseja adicionar. Anexar ao IDE ou SCSI é bastante semelhante – existe realmente apenas 1, diferença em negrito nos dois scripts abaixo, só tem que seleccionar a controladora correcta. Excepto se for usar o número do disco físico para Gestor de disco (não muito mau) ou se fornecer um ID de LUN quando criar o armazenamento (no caso de uma SAN), pode usar o que pode ser um pouco mais determinista.
Anexar discos Passthrough numa controladora IDE
$HyperVGuest = "Passthough Demo"
$VMManagementService = Get-WmiObject -class "Msvm_VirtualSystemManagementService" -namespace "root\virtualization"
$Vm = Get-WmiObject -Namespace "root\virtualization" -Query "Select * From Msvm_ComputerSystem Where ElementName='$HyperVGuest'"
$VMSettingData = Get-WmiObject -Namespace "root\virtualization" -Query "Associators of {$Vm} Where ResultClass=Msvm_VirtualSystemSettingData AssocClass=Msvm_SettingsDefineState"
$VmIdeController = (Get-WmiObject -Namespace "root\virtualization" -Query "Associators of {$VMSettingData} Where ResultClass=Msvm_ResourceAllocationSettingData AssocClass=Msvm_VirtualSystemSettingDataComponent" |`
where-object {$_.ResourceSubType -eq "Microsoft Emulated IDE Controller" -and $_.Address -eq 0})
$DiskAllocationSetting = Get-WmiObject -Namespace "root\virtualization" -Query "SELECT * FROM Msvm_AllocationCapabilities WHERE ResourceSubType = 'Microsoft Physical Disk Drive'"
$DefaultHardDisk = (Get-WmiObject -Namespace "root\virtualization" -Query "Associators of {$DiskAllocationSetting} Where ResultClass=Msvm_ResourceAllocationSettingData AssocClass=Msvm_SettingsDefineCapabilities" | `
where-object {$_.InstanceID -like "*Default"})
$Disk = Get-WmiObject -Namespace "root\virtualization" -Query "select * from Msvm_DiskDrive Where DriveNumber=2"
#$Disk = Get-WmiObject -Namespace "root\virtualization" -Query "select * from Msvm_DiskDrive Where ElementName Like '%Lun 200%'"
$DefaultHardDisk.Parent = $VmIdeController.__Path
$DefaultHardDisk.Address = 0
$DefaultHardDisk.HostResource = $Disk.__PATH
$VMManagementService.AddVirtualSystemResources($VM, $DefaultHardDisk.PSBase.GetText(1)) | ProcessWMIJob $VMManagementService "AddVirtualSystemResources"
Anexar discos Passthrough numa controladora SCSI
$HyperVGuest = "Passthough Demo"
$VMManagementService = Get-WmiObject -class "Msvm_VirtualSystemManagementService" -namespace "root\virtualization"
$Vm = Get-WmiObject -Namespace "root\virtualization" -Query "Select * From Msvm_ComputerSystem Where ElementName='$HyperVGuest'"
$VMSettingData = Get-WmiObject -Namespace "root\virtualization" -Query "Associators of {$Vm} Where ResultClass=Msvm_VirtualSystemSettingData AssocClass=Msvm_SettingsDefineState"
$VmScsiController = (Get-WmiObject -Namespace "root\virtualization" -Query "Associators of {$VMSettingData} Where ResultClass=Msvm_ResourceAllocationSettingData AssocClass=Msvm_VirtualSystemSettingDataComponent" | `
where-object {$_.ElementName -eq "SCSI Controller"})
$DiskAllocationSetting = Get-WmiObject -Namespace "root\virtualization" -Query "SELECT * FROM Msvm_AllocationCapabilities WHERE ResourceSubType = 'Microsoft Physical Disk Drive'"
$DefaultHardDisk = (Get-WmiObject -Namespace "root\virtualization" -Query "Associators of {$DiskAllocationSetting} Where ResultClass=Msvm_ResourceAllocationSettingData AssocClass=Msvm_SettingsDefineCapabilities" | `
where-object {$_.InstanceID -like "*Default"})
$Disk = Get-WmiObject -Namespace "root\virtualization" -Query "select * from Msvm_DiskDrive Where DriveNumber=2"
#$Disk = Get-WmiObject -Namespace "root\virtualization" -Query "select * from Msvm_DiskDrive Where ElementName Like '%Lun 200%'"
$DefaultHardDisk.Parent = $VmScsiController.__Path
$DefaultHardDisk.Address = 0
$DefaultHardDisk.HostResource = $Disk.__PATH
$VMManagementService.AddVirtualSystemResources($VM, $DefaultHardDisk.PSBase.GetText(1)) | ProcessWMIJob $VMManagementService "AddVirtualSystemResources"