【发布时间】:2014-12-01 16:37:31
【问题描述】:
我想将 windows 操作系统中的驱动器与 vCenter *.vmdk 匹配。
这里是link,我需要的信息。我找不到使用 powershell 获取“位置 192(总线编号 0,目标 ID 0,LUN 0)”的方法(来自磁盘的信息)。从WMI 我没有得到这个信息......
有人可以帮忙吗?
修改后的脚本:
$Vm = "VMName"
if (($VmView = Get-View -ViewType VirtualMachine -Filter @{"Name" = $Vm})) {
$Out = Get-WmiObject -Class win32_diskdrive -Property Index, SCSIPort, SCSITargetId -ComputerName $Vm
#Invoke-VMScript "wmic path win32_diskdrive get Index, SCSIPort, SCSITargetId /format:csv" -vm $VM -scripttype "bat"
foreach ($VirtualSCSIController in ($VMView.Config.Hardware.Device | where {$_.DeviceInfo.Label -match "SCSI-Controller"})) {
foreach ($VirtualDiskDevice in ($VMView.Config.Hardware.Device | where {$_.ControllerKey -eq $VirtualSCSIController.Key})) {
$VirtualDisk = "" | Select SCSIController, DiskName, SCSI_Id, DiskFile, DiskSize, WindowsDisk
$VirtualDisk.SCSIController = $VirtualSCSIController.DeviceInfo.Label
$VirtualDisk.DiskName = $VirtualDiskDevice.DeviceInfo.Label
$VirtualDisk.SCSI_Id = "$($VirtualSCSIController.BusNumber) : $($VirtualDiskDevice.UnitNumber)"
$VirtualDisk.DiskFile = $VirtualDiskDevice.Backing.FileName
$VirtualDisk.DiskSize = $VirtualDiskDevice.CapacityInKB * 1KB / 1GB
# Match disks based on SCSI ID
$DiskMatch = $Out | ?{($_.SCSIPort - 2) -eq $VirtualSCSIController.BusNumber -and $_.SCSITargetID -eq $VirtualDiskDevice.UnitNumber}
if ($DiskMatch){
$VirtualDisk.WindowsDisk = "Disk $($DiskMatch.Index)"
}
else {Write-Host "No matching Windows disk found for SCSI id $($VirtualDisk.SCSI_Id)"}
$DiskInfo += $VirtualDisk
}
}
$DiskInfo | Out-GridView
我不得不更改 $DiskMatch = $Out | ?{($_.SCSIPort - 2) -eq
并通过{$_.DeviceInfo.Label -match "SCSI-Controller"})) 在SCSI 控制器之间添加一个“-”。
为什么我必须从 SCSIPort 中减去 2?
【问题讨论】:
-
感谢您提供的网址。我看到了这一点,但在我的环境中不起作用。我修改了脚本并且它工作。但我认为有更好的解决方案?
标签: powershell vmware vcenter