You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:55:18