我需要编写脚本来遍历系统中可用的所有驱动器,然后对这些驱动器执行某些操作。该代码需要支持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中的输出
名称值
---- ----- 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
类型为 System.Management.Automation.PSCustomObject
这是我在PS 3.0及以上版本中获得的。
名称值
---- ----- 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
类型为 System.Object []
如何使PS版本2.0也返回一个对象[],以便我的代码可以保持一致
答案 0 :(得分:2)
它返回一个PSCustomObject
- 对象,因为只有一个逻辑磁盘符合Win7(PS 2.0)计算机上的条件。在Win8.1计算机(PS 4.0)上,您有多个匹配的磁盘,这就是您获得阵列的原因。
您可以使用数组运算符@()
将任何结果包装到数组中,以确保始终获得数组(即使项目为零)。
$drives = @(Get-WmiObject -class Win32_LogicalDisk -Filter "DriveType=3" | select Name)