我正在使用第三方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
答案 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-Verbose
或write-debug
),或完全省略。