【问题标题】:Get the drive letter of USB drive in PowerShell在 PowerShell 中获取 USB 驱动器的驱动器号
【发布时间】:2012-05-24 22:50:27
【问题描述】:

我看过 C# 和其他一些语言的文章,这些文章解释了如何实现我正在寻找的东西,但我不知道如何转换它们。

【问题讨论】:

    标签: powershell usb wmi


    【解决方案1】:

    试试:

    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 设备的情况下进行测试。

    【讨论】:

    • 谢谢,万一有人想要非别名版本:Get-WmiObject Win32_diskdrive | Where-Object {$_.interfacetype -eq "USB"} | ForEach-Object {Get-WmiObject -Query "ASSOCIATORS OF {Win32_DiskDrive.DeviceID="$($_.DeviceID.replace('\','\\'))"} WHERE AssocClass = Win32_DiskDriveToDiskPartition"} | ForEach-Object {Get-WmiObject -Query "ASSOCIATORS OF {Win32_DiskPartition.DeviceID="$($_.DeviceID)" } WHERE AssocClass = Win32_LogicalDiskToPartition"} | ForEach-Object {$_.deviceid}
    • 感谢您花时间写下答案:-)
    • 如果你运行的shell是cmd.exe,就像在一些旧语言的shell执行子例程中一样,你需要转义引号并像这样运行:powershell -noprofile "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}"
    【解决方案2】:

    我知道这个主题已经被放弃了一段时间,但由于我经常回来,所以我想我会更新一些东西。

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

    Get-WmiObject Win32_Volume -Filter "DriveType='2'"
    

    如果你想避免幻数:

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

    参考:
    https://docs.microsoft.com/en-us/previous-versions/windows/desktop/vdswmi/win32-volume
    https://docs.microsoft.com/en-us/dotnet/api/system.io.drivetype

    【讨论】:

    • 请注意,Windows 不一定将所有 USB 卷安装为 Win32_Volume 中的 DriveType 2(可移动磁盘)。在启用磁盘写入缓存的情况下挂载的 USB 硬盘将挂载为 DriveType 3(本地磁盘),这是任何标准控制器附加卷都将显示的内容。
    【解决方案3】:

    从 PowerShell v3.0 开始,Microsoft 引入了 Get-Cim* 命令,这使得这比 Get-WmiObject ASSOCIATORS 查询方法的丑陋更容易:

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

    或者:

    Get-CimInstance -Class Win32_DiskDrive -Filter 'InterfaceType = "USB"' -KeyOnly |
        Get-CimAssociatedInstance -Association Win32_DiskDriveToDiskPartition -KeyOnly |
        Get-CimAssociatedInstance -Association Win32_LogicalDiskToPartition |
        Format-List *
    

    以上命令是等价的。

    【讨论】:

      【解决方案4】:
      get-volume | where drivetype -eq removable | foreach driveletter
      
      volume | ? drivetype -eq removable | % driveletter
      

      【讨论】:

      • 现在应该是最好的答案了。
      • 这些答案是最简单的。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 2019-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多