电源外壳版本

时间:2016-04-27 17:57:54

标签: powershell powershell-v2.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($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也返回一个对象[],以便我的代码可以保持一致

1 个答案:

答案 0 :(得分:2)

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

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

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