2014-11-23 79 views
0

在PowerShell中,我想将drivetype(这里是类型2)的驱动器(deviceid)写入数组(变量$letters)。该driveletters应该被排序是这样的:
$信= @(“A”,“B”)等将磁盘类型的deviceids写入数组

下面我发现罚款win32_diskdrive的作品,但我不能添加DRIVETYPE线。

$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或我怎么能得到只有“H:”Win32_LogicalDisk

回答

0

您不应该在您的Select-Object中使用$_。你只要把你想要返回的属性。在你的情况下:DeviceID。如果你只是想要USB设备中的字符串,你很靠近。

$letters = Get-WMIObject Win32_LogicalDisk -filter DriveType=2 | Where-Object {$_.Size -gt 0} | Select -ExpandProperty deviceid 

-ExpandProperty deviceid将只与评论DeviceID

更新的财产和其他答案返回字符串数组,而不是一个对象的

我们可以很容易地做一个小更新,以确保您得到具有可测量尺寸的驱动器。我们将纳入这一点,同时处理您的其他答案多-replace这是不需要的,如果你移动where子句并注意我以前试图告诉你的-ExpandProperty deviceid

+0

谢谢,它与你的提示很好地结合在一起 $ letters = Get-WMIObject Win32_LogicalDisk -filter DriveType = 2 |选择 - 属性设备ID 现在我发现它显示也弹出,但仍然插入驱动器。如何只显示具有(分区)大小的设备? – scriptinghomer 2014-11-23 19:27:15

+0

好的,通过myselfe找到答案:Get-WMIObject Win32_LogicalDisk -filter DriveType = 2 |选择-Property deviceid,size |其中{$ _。size} – scriptinghomer 2014-11-23 19:34:13

+0

@scriptinghomer查看我的更新。 – Matt 2014-11-24 15:03:05

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 ' ' 

也许这是一种更简单的方法来取代所有这些东西。但它适用于我:-)