我尝试过get-volume,wmi/cim等,但我尝试过的每个示例都列出了所有卷。 我需要的是仅包含本地卷的列表,而不是任何群集卷。
已解决 - 代码如下: $myDisks = 获取 CimInstance -类名 Win32_LogicalDisk |Where-Object –FilterScript {$.驱动器类型 -等式 3} |选择对象设备ID, 卷名, 大小, 可用空间, @{Name="已用空间";表达式={$。大小 - $_。自由空间}} |排序对象 - 属性设备标识 $myServer = (获取内容环境:计算机名(。到上部(( 导入模块故障转移群集 $myCluster = $(获取群集(。名字 $myClusterDisks = Get-CimInstance -Namespace Root\MSCluster -ClassName MSCluster_Resource -ComputerName $myCluster | Where-Object –FilterScript {($.键入 -eq '物理磁盘'( - 和 ($。OwnerNode -eq $myServer(} $myClusterVolumes = $myClusterDisks |%{Get-CimAssociatedInstance -InputObject $_ -ResultClassName MSCluster_DiskPartition} |Select-Object Path, VolumeLabel, TotalSize, FreeSpace, @{Name="UsedSpace";表达式={$。总大小 - $。自由空间}} |排序对象路径 $myLocalVolumes = $myDisks |其中 {$_.DeviceId -notin @($myClusterVolumes.Path(}
在某些情况下,本地磁盘具有磁盘编号,而非本地磁盘则没有。因此,若要仅获取本地群集上存在的磁盘的卷,请排除 Get-Partitions 返回的 DiskNumber 为 null 的磁盘。在其他情况下,集群卷的"访问路径"为空,因此您可以使用过滤器排除分区。然后,您可以获取与这些分区匹配的卷。
$parts = Get-Partition | Where-Object -Property 'DiskNumber' -ne $null
$parts | Format-Table -AutoSize -Property 'OperationalStatus', 'Type', 'DiskNumber', 'DriveLetter', 'IsActive', 'IsBoot', 'IsHidden', 'IsOffline', 'IsShadowCopy', 'IsSystem', 'MbrType', 'NoDefaultDriveLetter', 'Offset', 'PartitionNumber', 'Size', 'TransistionState', 'AccessPaths'
$vols = Get-Volume -Path ( $parts.AccessPaths -match '^\\?\Volume{' )
$vols | Format-Table -AutoSize -Property 'OperationalStatus', 'HealthStatus', 'DriveType', 'FileSystemType', 'FileSystemLabel', 'AllocationUnitSize', 'DriveLetter', 'Size', 'SizeRemaining'
要仅返回带有驱动器号的卷,请将以下内容添加到上面第一行的末尾:
| Where-Object -Property 'DriveLetter' -ne 0x00