IT Pro 在建立 Hyper-V 实验环境时,经常需要为多个 VM 挂载同一个 ISO 映像。例如,要建立有多台 Exchange 2016 服务器的实验环境,就需要将 Exchange 2016 的安装映像挂载到多个虚拟机。
为了避免重复繁杂的操作,我们可以事先将Hyper-V VM 定为相同的命名约定,把 Exchange 2016 服务器的 VM 命名为以 E16 开头。这样就可以直接使用 PowerShell 的 Get-VM cmdlet 来使用通配符获取 VM 集合,以方便批量添加 ISO 映像。
批量添加ISO映像
以下就是挂载相同 ISO 的 PowerShell 示例:
Get-VM E16* | Get-VMDVDDrive | Set-VMDvdDrive -Path "F:\ISOs\Exchange\2016\ExchangeServer2016-x64-cu6.iso"
批量卸载ISO映像
要批量卸载 ISO 映像,只需将路径设置为 $Null 即可:
Get-VM E16* | Get-VMDVDDrive | Set-VMDvdDrive –Path $Null
潜在的截断路径问题
由于不同 Hyper-V 虚拟机挂载的 ISO 文件的路径不同,默认可能无法在 PowerShell 中显示完整路径:
Get-VM E16* | Get-VMDVDDrive | Select-Object VMName, Path
如果你遇到 ISO 路径截断的问题,可以使用 –ExpandProperty 参数来显示完整路径。但由于 Path 列的数据类型原因,使用此参数就无法显示前面的列:
Get-VM E16* | Get-VMDVDDrive | Select-Object –ExpandProperty Path
如果你想两全其美,既要显示 VMName 又要查看其挂载 ISO 的完整路径,可以使用如下 PowerShell 命令:
Get-VM E16* | ForEach { $Path = (Get-VMDVDDrive $_ | Select-Object -ExpandProperty Path);Write-Host $_.VMName $Path}