驱动器列表为字符串数组

时间:2016-04-13 19:03:12

标签: powershell powershell-v2.0

我正在使用第三方power-shell库。该库方法中的一个函数参数是字符串数组。此参数值需要包含硬盘驱动器。我有以下脚本来检索驱动器

[string[]] $drives = $null;
gwmi win32_logicaldisk -filter "drivetype = 3" | Select Name  | % { $drives +=  $_.Name   }
$drives -is [array]
Write-Output $drives

此脚本的输出是

  


  C:
  d:

但是第三方库似乎不接受这个数组。如果我按如下方式对驱动器进行硬编码,则一切正常。

$drives = @('C:', 'D:') 

我的问题是我以字符串数组的形式检索驱动器的方式是否正确?请注意,我需要对抗Power-Shell 2.0

1 个答案:

答案 0 :(得分:2)

Get-WMIObject正在返回ManagementObject个对象的集合,而您的Select-object正在选择其中一个属性以供显示。 IOW,你已经得到了一个数组(不需要管道中的foreach-object),你只需要正确的数组(在这种情况下是一个字符串)。

如果您将-expandproperty参数传递给select-object,您将获得适合您需要的字符串数组(在本例中)。

$drives = get-wmiobject win32_logicaldisk -filter "drivetype=3" | select-object -expandproperty name
write-output $drives

第三方库看到的脚本输出包含$drives -is [array]的输出(即使您没有在脚本中明确使用它,如此处所示,也隐含了write-output) ,这也引起了一些惊愕。输出到不同的流(如Write-Verbosewrite-debug),或完全省略。