如何在PowerShell中创建Hyper-V虚拟机时捕获错误?
在PowerShell中捕获New-VM的错误并终止脚本
虽然New-VM确实不支持直接添加-ErrorAction Stop参数,但可以通过两种方式捕获错误并终止脚本执行:
方法一:临时修改全局错误偏好 + try/catch
临时将全局错误偏好设置为Stop,这样New-VM抛出的非终止错误会转为终止错误,就能被try/catch块捕获,进而终止脚本。
# 先保存原来的错误偏好设置 $originalErrorPref = $ErrorActionPreference $ErrorActionPreference = "Stop" try { New-VM -Name $vmname ` -MemoryStartupBytes $memorySize ` -Path D:\Hyper-V\ ` -NewVHDPath D:\Hyper-V\$vmname\$vmname.vhdx ` -NewVHDSizeBytes $diskSize ` -Generation 2 ` -SwitchName "vSwitch" } catch { Write-Error "虚拟机创建失败: $_" # 终止脚本,退出码1表示执行出错 exit 1 } finally { # 恢复原来的错误偏好,避免影响后续命令 $ErrorActionPreference = $originalErrorPref }
方法二:用-ErrorVariable捕获错误
给New-VM添加-ErrorVariable参数,专门收集该命令产生的错误,之后判断是否有错误发生,若有则终止脚本。
New-VM -Name $vmname ` -MemoryStartupBytes $memorySize ` -Path D:\Hyper-V\ ` -NewVHDPath D:\Hyper-V\$vmname\$vmname.vhdx ` -NewVHDSizeBytes $diskSize ` -Generation 2 ` -SwitchName "vSwitch" ` -ErrorVariable vmCreateError # 检查是否捕获到错误 if ($vmCreateError) { Write-Error "虚拟机创建失败: $($vmCreateError.Message)" exit 1 }
两种方法任选其一即可:第一种适合需要统一处理终止错误的场景,第二种更灵活,只针对New-VM命令的错误做判断。
内容的提问来源于stack exchange,提问作者hantoren
相关产品推荐
相关产品推荐

