Alright, I'm back after the Ops team updated VCSA to 6.7. I hit a snag though in that mapping what the WebUI used for DeviceId did *not* align with *anything* #---------------ReconfigVM_T...
See more...
Alright, I'm back after the Ops team updated VCSA to 6.7. I hit a snag though in that mapping what the WebUI used for DeviceId did *not* align with *anything* #---------------ReconfigVM_Task--------------- $spec = New-Object VMware.Vim.VirtualMachineConfigSpec $spec.DeviceChange = New-Object VMware.Vim.VirtualDeviceConfigSpec[] (2) $spec.DeviceChange[0] = New-Object VMware.Vim.VirtualDeviceConfigSpec $spec.DeviceChange[0].Device = New-Object VMware.Vim.VirtualPCIPassthrough $spec.DeviceChange[0].Device.Backing = New-Object VMware.Vim.VirtualPCIPassthroughDeviceBackingInfo $spec.DeviceChange[0].Device.Backing.SystemId = '5d67cacd-3ea2-f27c-5400-001b21949eb0' # $ThisVMDevices[0].ExtensionData.SystemId $spec.DeviceChange[0].Device.Backing.VendorId = 4319 # $ThisVMDevices[0].ExtensionData.PciDevice.VendorId $spec.DeviceChange[0].Device.Backing.Id = '0000:12:00.0' # $ThisVMDevices[0].ExtensionData.PciDevice.Id $spec.DeviceChange[0].Device.Backing.DeviceId = '-1e00' # $ThisVMDevices[0].ExtensionData.PciDevice.DeviceId ? '-7680' $spec.DeviceChange[0].Device.Backing.DeviceName = 'Emulex LightPulse LPe16000 PCIe Fibre Channel Adapter' # $ThisVMDevices[0].ExtensionData.PciDevice.DeviceName $spec.DeviceChange[0].Device.DeviceInfo = New-Object VMware.Vim.Description $spec.DeviceChange[0].Device.DeviceInfo.Summary = 'New PCI device' $spec.DeviceChange[0].Device.DeviceInfo.Label = 'New PCI device' $spec.DeviceChange[0].Device.Key = -101 $spec.DeviceChange[0].Operation = 'add' $spec.DeviceChange[1] = New-Object VMware.Vim.VirtualDeviceConfigSpec $spec.DeviceChange[1].Device = New-Object VMware.Vim.VirtualPCIPassthrough $spec.DeviceChange[1].Device.Backing = New-Object VMware.Vim.VirtualPCIPassthroughDeviceBackingInfo $spec.DeviceChange[1].Device.Backing.SystemId = '5d67cacd-3ea2-f27c-5400-001b21949eb0' $spec.DeviceChange[1].Device.Backing.VendorId = 4319 $spec.DeviceChange[1].Device.Backing.Id = '0000:12:00.1' $spec.DeviceChange[1].Device.Backing.DeviceId = '-1e00' $spec.DeviceChange[1].Device.Backing.DeviceName = 'Emulex LightPulse LPe16000 PCIe Fibre Channel Adapter' $spec.DeviceChange[1].Device.DeviceInfo = New-Object VMware.Vim.Description $spec.DeviceChange[1].Device.DeviceInfo.Summary = 'New PCI device' $spec.DeviceChange[1].Device.DeviceInfo.Label = 'New PCI device' $spec.DeviceChange[1].Device.Key = -102 $spec.DeviceChange[1].Operation = 'add' $spec.CpuFeatureMask = New-Object VMware.Vim.VirtualMachineCpuIdInfoSpec[] (0) $_this = Get-View -Id $VM.Id $_this.ReconfigVM_Task($spec) END $ThisVMDevices[0] contains the exact same object as the above DeviceChange[0]. PS > $ThisVMDevices[0].ExtensionData.PciDevice Id : 0000:12:00.0 ClassId : 3076 Bus : 18 Slot : 0 Function : 0 VendorId : 4319 SubVendorId : 4319 VendorName : Emulex Corporation DeviceId : -7680 SubDeviceId : -1263 ParentBridge : 0000:10:02.0 DeviceName : Emulex LightPulse LPe16000 PCIe Fibre Channel Adapter PS > END When reviewing the documentation for VMware.Vim.VirtualPCIPassthroughDeviceBackingInfo.DeviceId here VMware vSphere 5.1 it was very convoluted as to what should be passed. > The device ID of this PCI. You must use the device ID retrieved from the vSphere host (HostPciDevice.deviceId), converted as is to a string. The recorded example provides `-1e00` The PCI device provides `-7680` The WebUI displays `E200` I finally ran across this Python example: Add PCI passthrough device to a VM using pyvmomi · GitHub After converting that syntax to the PowerShell equivalent, this is what worked: $VMs = Get-VApp $LabInstanceName | Get-VM | Sort-Object | Where-Object { <#FILTER#> } $ThisSkip = 0 foreach ($VM in $VMs) { Write-Host "Updating $VM" $ThisVMDevices = $ThisKitDevices | Select-Object -First 2 -Skip $ThisSkip # Add-PassthroughDevice -VM $VM -PassthroughDevice $ThisVMDevices -Confirm:$false # That's not working... $spec = New-Object VMware.Vim.VirtualMachineConfigSpec $spec.DeviceChange = New-Object VMware.Vim.VirtualDeviceConfigSpec[] (2) $spec.DeviceChange[0] = New-Object VMware.Vim.VirtualDeviceConfigSpec $spec.DeviceChange[0].Device = New-Object VMware.Vim.VirtualPCIPassthrough $spec.DeviceChange[0].Device.Backing = New-Object VMware.Vim.VirtualPCIPassthroughDeviceBackingInfo $spec.DeviceChange[0].Device.Backing.SystemId = $ThisVMDevices[0].ExtensionData.SystemId $spec.DeviceChange[0].Device.Backing.VendorId = $ThisVMDevices[0].ExtensionData.PciDevice.VendorId $spec.DeviceChange[0].Device.Backing.Id = $ThisVMDevices[0].ExtensionData.PciDevice.Id $spec.DeviceChange[0].Device.Backing.DeviceId = [Convert]::ToString($ThisVMDevices[0].ExtensionData.PciDevice.DeviceId, 16) $spec.DeviceChange[0].Device.Backing.DeviceName = $ThisVMDevices[0].ExtensionData.PciDevice.DeviceName $spec.DeviceChange[0].Device.DeviceInfo = New-Object VMware.Vim.Description $spec.DeviceChange[0].Device.DeviceInfo.Summary = 'New PCI device' $spec.DeviceChange[0].Device.DeviceInfo.Label = 'New PCI device' $spec.DeviceChange[0].Device.Key = -101 $spec.DeviceChange[0].Operation = 'add' $spec.DeviceChange[1] = New-Object VMware.Vim.VirtualDeviceConfigSpec $spec.DeviceChange[1].Device = New-Object VMware.Vim.VirtualPCIPassthrough $spec.DeviceChange[1].Device.Backing = New-Object VMware.Vim.VirtualPCIPassthroughDeviceBackingInfo $spec.DeviceChange[1].Device.Backing.SystemId = $ThisVMDevices[1].ExtensionData.SystemId $spec.DeviceChange[1].Device.Backing.VendorId = $ThisVMDevices[1].ExtensionData.PciDevice.VendorId $spec.DeviceChange[1].Device.Backing.Id = $ThisVMDevices[1].ExtensionData.PciDevice.Id $spec.DeviceChange[1].Device.Backing.DeviceId = [Convert]::ToString($ThisVMDevices[1].ExtensionData.PciDevice.DeviceId, 16) $spec.DeviceChange[1].Device.Backing.DeviceName = $ThisVMDevices[1].ExtensionData.PciDevice.DeviceName $spec.DeviceChange[1].Device.DeviceInfo = New-Object VMware.Vim.Description $spec.DeviceChange[1].Device.DeviceInfo.Summary = 'New PCI device' $spec.DeviceChange[1].Device.DeviceInfo.Label = 'New PCI device' $spec.DeviceChange[1].Device.Key = -102 $spec.DeviceChange[1].Operation = 'add' $spec.CpuFeatureMask = New-Object VMware.Vim.VirtualMachineCpuIdInfoSpec[] (0) $_this = Get-View -Id $VM.Id $_this.ReconfigVM_Task($spec) $ThisSkip += 2 } ## END Assign $ThisKitDevices to respective VMs END (I was copy/pasting directly from VSCode PS1 file to try to get syntax highlighting this time.)