我有这个怪物:
Get-Volume | ForEach-Object {
$VolObj = $_
$ParObj = Get-Partition | Where-Object { $_.AccessPaths -contains $VolObj.Path }
$DiskObj = Get-Disk | Where-Object { $_.Number -eq $ParObj.DiskNumber }
$PsDriveObj = Get-PSDrive -PSProvider FileSystem | Where-Object { $_.Name -contains $VolObj.DriveLetter }
Get-StoragePool -IsPrimordial $false | ForEach-Object {
$pool = $_
Get-PhysicalDisk -StoragePool $pool | ForEach-Object {
$disk = $_
if ($disk.UniqueId -eq $volume_id) {
$pool_id = $pool.UniqueId
}
}
}
...
}
这段代码的问题出在以下行if ($disk.uniqueid -eq $volume_id)
。
而不是$volume_id
我已经尝试过.SerialNumber
和UniqueId
多个对象(VolObj
,,ParObj
和)但是这些要么是空的DiskObj
,PsDriveObj
要么返回错误的ID(这些对象的ID要么是,vol***
因为我在EC2实例上运行它,要么是格式为{...}
),所以if
永远不会是真的。
有没有直接的方法可以实现这一点?