如何使用PowerShell查找USB闪存驱动器的路径

时间:2012-03-14 14:53:07

标签: powershell command-line path usb-flash-drive

我正在准备一个ps1文件。它将默默安装一些程序。但我的程序的安装文件保存在我的USB闪存盘中。在我的ps1文件中,

cd E:\User\User_Setups

此路径是我的USB闪存驱动器的路径。但它会在另一台机器上改变。也许G:\,F:\等 当然,我不想为每台不同的机器改变这条路径。 PowerShell如何通过命令行找到我的USB闪存驱动器的路径?

5 个答案:

答案 0 :(得分:3)

我在我的usb Stick中添加了一个VolumeLabel(“MyToolBox”)并在profile.ps1中放入以下行:

Get-DriveInfo | % { if( $_.VolumeLabel -eq "MyToolBox"){ Set-Location $_.Name; ./Startup.ps1}}

Get-DriveInfo来自Pscx模块:http://pscx.codeplex.com/ 你也需要在你的个人资料中导入...

Startup.ps1脚本位于我的usb棒的根目录中,并在棒上注册别名以便在会话中使用...

答案 1 :(得分:0)

我用WMI完成了这个:使用设备类型来获取驱动器号。以简化形式(真实脚本具有日志记录和错误处理)。我最初从$deviceCaption和设备管理器获得Win32_PnpEntity

    $objs = @(Get-WmiObject -Query "select Caption,__RELPATH from Win32_PnpEntity where caption=""$deviceCaption""")
    if ($objs.Length -eq 0) {
        throw "MP3 Player is not connected"
    } elseif ($objs.Length -gt 1) {
        throw "Seem to be multiple MP3 players connected"
    }
    $relPath = $objs[0];

    $objs = @(Get-WmiObject -Query "ASSOCIATORS OF {$relPath} where resultclass=Win32_DiskDrive")
    $relPath = $objs[0].__RelPath;

    $objs = @(Get-WmiObject -Query "ASSOCIATORS OF {$relPath} where resultclass=Win32_DiskPartition")
    $relPath = $objs[0].__RelPath;
    $objs = @(Get-WmiObject -Query "ASSOCIATORS OF {$relPath} where resultclass=Win32_LogicalDisk")
    $relPath = $objs[0].__RelPath;
    Write-Debug "RelPath #4: $($objs[0].__RelPath), drive: $($objs[0].DeviceID)"

    $objs[0].DeviceID

最终表达式返回驱动器名称,如:Q:(它包括冒号)。

请注意,这假设设备有一个带有单个分区的磁盘。

答案 2 :(得分:0)

可能有几种好方法可以做到。就个人而言,我在驱动器上放了一个id文件disk.id,只是以编程方式搜索每个驱动器,直到找到id为我正在寻找的id文件。像这样:

#Start i at 65 to represent A
i=65
do {
  $idFile = Get-Content [char]$i:\disk.id -totalcount 1
  if( $idFile -eq "MyIdDrive" ) { #whatever your first line in the id file may be
       Write-Host "[char]$i is my drive!"
  }
  $i++
}
while ($i -le 65+26)

这是一种强力方法,您可能需要错误处理Get-Content,但它应该适用于大多数Windows安装。遇到问题的唯一情况是使用双案例驱动器名称,然后您只需创建一个更复杂的循环。

答案 3 :(得分:0)

如果Powershell比普通的Windows CMD.exe更强大,那为什么我只需要使用命令

ECHO %~dp0
在CMD.exe中

回答你的问题?在我看来,你必须编写大量额外的代码来获取批处理或cmd文件信息的相对路径,这通常出现在批处理脚本中。 Powershell失败了。

http://ss64.com/nt/syntax-args.html了解更多信息。

答案 4 :(得分:0)

您可以获取当前文件,并使用它来获取当前的USB驱动器。

$currentDirectory = $myInvocation.MyCommand.ScriptBlock.File | Split-Path | Get-Item
$currentDirectory.PSDrive.Root