power shell 版本之间相同查询的不同数据类型

Different data types for same query between power shell versions

我需要编写脚本来遍历系统中所有可用的驱动器,然后对这些驱动器执行一些操作。代码需要支持 PS 版本 2.0 – 4.0。问题是,当我检索驱动器列表时,它返回 PS 2.0 版和 4.0 版之间的不同类型,如下所示。

$PSVersionTable
$drives = Get-WmiObject -class Win32_LogicalDisk -Filter "DriveType=3" | select   Name  
'Type = ' + $drives.GetType().FullName
Foreach($drive in $drives)
{
    #some logic
}

这里是PS版本2.0

的输出

Name Value

---- ----- CLRVersion 2.0.50727.5485
BuildVersion 6.1.7601.17514
PSVersion 2.0
WSManStackVersion 2.0
PSCompatibleVersions {1.0, 2.0}
SerializationVersion 1.1.0.1
PSRemotingProtocolVersion 2.1
Type is System.Management.Automation.PSCustomObject

这是我在 PS 3.0 及更高版本中得到的。

Name Value
---- ----- PSVersion 4.0
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.42000
BuildVersion 6.3.9600.16394
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion 2.2
Type is System.Object[]

如何使 PS 2.0 版也成为 return 一个对象[],这样我的代码才能保持一致

它 returns 是一个 PSCustomObject 对象,因为在您的 Win7 (PS 2.0) 计算机上只有一个逻辑磁盘符合您的条件。在您的 Win8.1 计算机 (PS 4.0) 上,您有多个匹配的磁盘,这就是您获得数组的原因。

您可以使用数组运算符 @() 将任何结果包装在一个数组中,以确保您始终得到一个数组(即使是零项)。

$drives = @(Get-WmiObject -class Win32_LogicalDisk -Filter "DriveType=3" | select Name)