1

我有一个映射文件以运行 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” 
4

3 回答 3

3

用于Read-Host提示用户输入。像这样,

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

您可以列出所有驱动器并使用 , 和 检查目录是否存在Get-PSDriveTest-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。

于 2013-07-30T05:18:13.747 回答
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 $_ }
于 2013-07-30T08:20:24.000 回答
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
于 2013-07-30T08:21:25.607 回答