在PowerShell中获取USB驱动器的驱动器号

在PowerShell中获取USB驱动器的驱动器号,powershell,usb,wmi,Powershell,Usb,Wmi,我看过C#和其他一些语言的文章,它们解释了如何实现我想要的目标,但我不知道如何转换它们 下面的链接解释了如何获得答案: Win32_DiskDrive->Win32_DiskDrive到磁盘分区->Win32_DiskPartition->Win32_LogicalDisk分区->Win32_LogicalDisk分区->Win32_LogicalDisk分区 GeogoSet的答案也解释了如何获得答案,但同样,不是在PowerShell中: 试试: gwmi win32_diskdri

我看过C#和其他一些语言的文章,它们解释了如何实现我想要的目标,但我不知道如何转换它们

  • 下面的链接解释了如何获得答案:

    Win32_DiskDrive->Win32_DiskDrive到磁盘分区->Win32_DiskPartition->Win32_LogicalDisk分区->Win32_LogicalDisk分区->Win32_LogicalDisk分区

  • GeogoSet的答案也解释了如何获得答案,但同样,不是在PowerShell中:

试试:

gwmi win32_diskdrive | ?{$_.interfacetype -eq "USB"} | %{gwmi -Query "ASSOCIATORS OF {Win32_DiskDrive.DeviceID=`"$($_.DeviceID.replace('\','\\'))`"} WHERE AssocClass = Win32_DiskDriveToDiskPartition"} |  %{gwmi -Query "ASSOCIATORS OF {Win32_DiskPartition.DeviceID=`"$($_.DeviceID)`"} WHERE AssocClass = Win32_LogicalDiskToPartition"} | %{$_.deviceid}

使用一个或多个插入的USB设备进行测试。

我知道这个主题已经被删除了一段时间,但由于我经常会回到这个话题,我想我应该更新一下

如果使用Windows 7及以上版本,则更简单的解决方案是:

Get-WmiObject Win32_Volume -Filter "DriveType='2'"
如果你想避免神奇的数字:

Get-WmiObject Win32_Volume -Filter ("DriveType={0}" -f [int][System.IO.DriveType]::Removable)
参考文献:


从PowerShell v3.0开始,Microsoft引入了
获取Cim*
命令,这比
获取WmiObject
关联查询方法的丑陋之处更简单:

Get-CimInstance -Class Win32_DiskDrive -Filter 'InterfaceType = "USB"' -KeyOnly | 
    Get-CimAssociatedInstance -ResultClassName Win32_DiskPartition -KeyOnly |
    Get-CimAssociatedInstance -ResultClassName Win32_LogicalDisk |
    Format-List *
或:


上述命令是等效的。

谢谢,以防任何人想要非别名版本:Get-WmiObject Win32\u diskdrive | Where-Object{$\u.interfacetype-eq“USB”}ForEach-Object{Get-WmiObject-Query”关联{Win32\u diskdrive.DeviceID=
“$($\u.DeviceID.replace('\','\\'))
”)其中AssocClass=Win32_DiskDriveToDiskPartition“}ForEach对象{Get WMIOObject-Query”关联{Win32_DiskPartition.DeviceID=
“$($.DeviceID)
”}其中AssocClass=Win32_LogicalDiskTopPartition“}ForEach对象{$.DeviceID}感谢您花时间编写答案:-)如果您运行的shell是
cmd.exe
,由于在一些较旧语言的shell执行子例程中,您需要对引号进行转义,并按如下方式运行:
powershell-noprofile“gwmi win32\u diskdrive”?{$\u.interfacetype-eq“USB\”}{124;%{win32\u diskdrive.DeviceID=
\“$($.DeviceID.replace('\','\'))
\”其中AssocClass=Win32\U DiskDriveToDiskPartition\“}{gwmi-Query\{Win32\U DiskPartition.DeviceID=
\“$($.DeviceID)
\”}其中AssocClass=Win32\U LogicalDiskPartition\“}{$.DeviceID}
请注意,Windows不必将所有USB卷作为DriveType 2(可移动磁盘)装入Win32\U卷中。已启用磁盘写缓存的USB硬盘驱动器将装载为DriveType 3(本地磁盘),这是任何标准控制器连接卷的显示形式。现在,这应该是最佳答案。这些答案是最简单的。谢谢你!
get-volume | where drivetype -eq removable | foreach driveletter

volume | ? drivetype -eq removable | % driveletter
get-volume | where drivetype -eq removable | foreach driveletter

volume | ? drivetype -eq removable | % driveletter