驱动器列表作为字符串数组

List of drives as string array

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

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

这个脚本的输出是

True
C:
D:

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

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

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

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

如果您将 -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),或者完全忽略它。