将disktype的deviceid写入数组

时间:2014-11-23 16:35:18

标签: arrays powershell

在PowerShell中,我想将deviceid(此处为类型2)的驱动器(drivetype)写入数组(变量$letters)。驱动器应按如下方式排序:
$ letters = @(“a:”,“b:”)等。

我找到的下面一行可以正常使用win32_diskdrive,但我无法添加驱动器类型。

$letters = Get-WmiObject win32_diskdrive | 
    Where {$_.interfacetype -Like "USB"} | 
    ForEach {Get-WmiObject -Query "ASSOCIATORS OF  {Win32_DiskDrive.DeviceID=`"$($_.DeviceID.replace('\','\\'))`"} WHERE AssocClass = Win32_DiskDriveToDiskPartition"} | 
    ForEach {Get-WmiObject -Query "ASSOCIATORS OF {Win32_DiskPartition.DeviceID=`"$($_.DeviceID)`"} WHERE AssocClass = Win32_LogicalDiskToPartition"} |
    ForEach {$_.deviceid}

下面一行包含Win32_LogicalDisk而不是win32_diskdrive,但我无法获得像$letters = @("a:", "b:")

这样的干净数组输出
$letters = Get-WMIObject Win32_LogicalDisk -filter DriveType=2 | Select ($_.deviceid)

给出

\\WIN7\root\cimv2:Win32_LogicalDisk.DeviceID="H:"

如何将drivetypewin32_diskdrive合并,或者我如何只使用Win32_LogicalDisk获得“H:”?

2 个答案:

答案 0 :(得分:0)

您不应该以{{1​​}}的方式使用$_。您只需要输入要返回的属性即可。在您的情况下:DeviceID。如果您只想要USB设备中的字符串,那么您就近了。

Select-Object

$letters = Get-WMIObject Win32_LogicalDisk -filter DriveType=2 | Where-Object {$_.Size -gt 0} | Select -ExpandProperty deviceid 将返回字符串数组而不是属性为-ExpandProperty deviceid的对象

从评论和其他答案中更新

我们可以轻松进行小幅更新,以确保您获得具有可测量大小的驱动器。如果你移动where子句并注意我之前试图告诉你的DeviceID,我们将在解决你的其他答案过程中加入这个-replace

答案 1 :(得分:0)

这是我的解决方案。工作正常。

$letters = Get-WMIObject Win32_LogicalDisk -filter DriveType=2 | Select -Property deviceid, size | where {$_.size -gt 0}
$letters = $letters -replace '@{deviceid='
$letters = $letters -replace "size="
$letters = $letters -replace "}"
$letters = $letters -replace ""
$letters = $letters -replace '@{size='
$letters = $letters -replace '}'
$letters = $letters -replace '@{size='
$letters = $letters -replace ';'
$letters = $letters -replace '0'
$letters = $letters -replace '1'
$letters = $letters -replace '2'
$letters = $letters -replace '3'
$letters = $letters -replace '4'
$letters = $letters -replace '5'
$letters = $letters -replace '6'
$letters = $letters -replace '7'
$letters = $letters -replace '8'
$letters = $letters -replace '9'
$letters = $letters -replace ':'
$letters = $letters -replace ' '

也许有更简单的方法来取代所有这些东西。但它对我来说很好: - )