2013-07-30 29 views
0

我有一個腳本來映射文件以運行VHD。但是,從一臺機器運行到另一臺機器時,驅動器號可能會發生變化。我如何提示用戶哪個驅動器號有文件夾?或確定哪個驅動器號有\ Program Files \ Microsoft Learning \ 20414 \ Drives \?PowerShell提示用戶驅動器號

實際腳本下面:

Set-VHD -Path "D:\Program Files\Microsoft Learning\20414\Drives\20414B-LON-DC1\Virtual Hard Disks\20414B-LON-DC1.vhd」 -ParentPath "D:\Program Files\Microsoft Learning\Base\Drives\MT12-WS12-LON-DC1-TMP.vhd」 

回答

2

使用Read-Host,以提示用戶輸入。像這樣,

$vhdLocation = read-host "Enter path for VHD file"

不會提示用戶,你可以列出所有的驅動器和檢查目錄與Get-PSDriveTest-PathJoin-Path存在。像這樣,

get-psdrive | ? { 
$_.root -match "[c-z]:\\" -and (test-path $(join-path $_.root "Program Files\Microsoft Learning\20414\Drives\")) 
} 

$_.root -match "[c-z]:\\"將匹配盤符C:到Z :.

$(join-path $_.root "Program Files\Microsoft Learning\20414\Drives\")將爲路徑創建有效的語法。也就是說,它會自動管理分隔符。

test-path將返回true,如果路徑確實存在。

+0

爲我工作 - 漂亮的代碼。 –

1

我會使用與vonPryz建議的略有不同的方法,因爲Get-PSDrive將枚舉的不僅僅是磁盤/網絡驅動器。使用WMI應提供稍好的性能:

$subfolder = "Program Files\Microsoft Learning\20414\Drives" 

$drivesPath = gwmi Win32_LogicalDisk -Filter 'DriveType=3 OR DriveType=4' | % { 
    Join-Path $_.DeviceID $subfolder 
} | ? { Test-Path -LiteralPath $_ } 
0

這是我用來得到一個VHD安裝的驅動:

Write-Output "Mount-VHD $targetVhdx..." 
$mountVhd = Mount-VHD -Path $targetVhdx -Passthru 

Write-Output "Select mounted DriveLetter..." 
$mountDrive = $mountVhd | Get-Disk | Get-Partition | Get-Volume | Where-Object {$_.FileSystemLabel -ne 'System Reserved'} | Select DriveLetter 
相關問題