2012-03-14 87 views
0

我正在準備ps1文件。它會默默安裝一些程序。但我的程序的安裝文件保存在我的USB閃存驅動器中。在我的ps1文件中,如何使用PowerShell查找USB閃存驅動器的路徑

cd E:\User\User_Setups 

此路徑是我的USB閃存驅動器的路徑。但它會在另一臺機器上改變。也許G:\,F:\等 當然,我不想爲每個不同的機器改變這個路徑。 PowerShell如何通過命令行找到USB閃存驅動器的路徑?

回答

3

我添加了一個的VolumeLabel( 「MyToolBox」),以我的USB記憶棒,並把下面一行profile.ps1:

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

GET-DriveInfo來自模塊Pscx:http://pscx.codeplex.com/ 您需要導入此在您的個人資料太...

的Startup.ps1腳本是在我的USB記憶棒的根,在棍子在會議登記使用別名...

+0

什麼是「MyToolBox」? :S – cethint 2012-03-14 15:10:59

+0

MyToolBox是閃存驅動器的卷標。您可以隨意標記它,然後調整腳本以查找新標籤而不是MyToolBox。 – Goyuix 2012-03-14 15:14:46

+0

術語'Get-DriveInfo'不被識別爲cmdlet,函數,腳本文件或可操作程序的名稱。檢查名稱的拼寫,或者如果包含路徑,請驗證路徑是否正確,然後再試一次。 在G:\ startup.ps1:1 char:14 + Get-DriveInfo <<<<< | %{if($ _。VolumeLabel -eq「MyToolBox」){Set-Location $ _。Name; 。 /startup.ps1}} + CategoryInfo:ObjectNotFound:(GET-DriveInfo:字符串)[],CommandNotFoun dException + FullyQualifiedErrorId:CommandNotFoundException 我怎麼能解決這個錯誤? – cethint 2012-03-14 15:33:20

0

我和WMI做到了這一點:使用設備類型獲取驅動器號。以簡化形式(實際腳本具有記錄和錯誤處理)。我最初從Win32_PnpEntity和設備管理器中獲得$deviceCaption

$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:(它包括結腸癌)。

請注意,假定設備具有帶單個分區的單個磁盤。

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) 

這是一個強制的方法,您可能需要爲錯誤處理獲取內容,但它應該在大多數Windows安裝工作。唯一遇到問題的情況是使用雙案例驅動器名稱,然後您只需創建更復雜的循環。

1

如果PowerShell是更強大的比普通Windows CMD.EXE的那麼爲什麼我只需要使用命令

ECHO %~dp0 

輸入cmd.exe來回答你的問題?在我看來,你必須編寫很多額外的代碼才能獲得批處理或cmd文件信息的相對路徑,而且這通常會在批處理腳本中出現。 Powershell失敗。

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

0

您可以獲取當前文件,並使用它來獲取當前的USB驅動器。

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