我有一个脚本来映射文件以运行VHD。但是当您从一台机器运行到另一台机器时,驱动器号可能会发生变化。如何提示用户哪个驱动器号具有该文件夹?或确定哪个驱动器号具有\ Program Files \ Microsoft Learning \ 20414 \ Drives \?
下面的实际脚本:
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”
答案 0 :(得分:3)
使用Read-Host
提示用户输入。像这样,
$vhdLocation = read-host "Enter path for VHD file"
您可以列出所有驱动器,并检查目录是否存在Get-PSDrive
,Test-Path
和Join-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。
答案 1 :(得分: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 $_ }
答案 2 :(得分: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