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

powershell版本之间相同查询的不同数据类型,powershell,powershell-2.0,Powershell,Powershell 2.0,我需要编写脚本来遍历系统中所有可用的驱动器,然后对这些驱动器执行一些操作。代码需要支持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

我需要编写脚本来遍历系统中所有可用的驱动器,然后对这些驱动器执行一些操作。代码需要支持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版的输出

名称值

--------CLR版本2.0.50727.5485
构建版本6.1.7601.17514
PS2.0版
WSManStackVersion2.0
PSCompatibleVersions{1.0,2.0}
序列化版本1.1.0.1
PSRemotingProtocolVersion2.1
类型为System.Management.Automation.PSCustomObject

这是我在PS 3.0及以上版本中得到的

名称值
--------PS4.0版
WSManStack3.0版
序列化版本1.1.0.1
CLR版本4.0.30319.42000
构建版本6.3.9600.16394
PSCompatibleVersions{1.0,2.0,3.0,4.0}
PSRemotingProtocolVersion2.2
类型为系统对象[]


如何使PS 2.0版同时返回一个对象[],使我的代码保持一致

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

您可以使用数组操作符
@()
将任何结果包装到数组中,以确保始终获得数组(即使是零项)


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

您可以使用数组操作符
@()
将任何结果包装到数组中,以确保始终获得数组(即使是零项)

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