开关机自动启动hyper-v虚拟机

Posted by gebaocai on September 23, 2024

遇到问题

我现在使用Hyper-v配置了一台Linux虚拟机, 虚拟机通过frp技术把端口暴漏在外网,虚拟机和frp服务器使用的是ipv6协议。 但是我使用的宽带服务ipv6的地址每天凌晨都会变一次, 而Hyper-v的虚拟机在宿主机关机的时候会保留上次的ipv6地址和路由信息,这就导致第二天Hyper-v跟随宿主机启动时保留的ipv6路由失效。 每次都要重新登录到虚拟机做一次 reboot,重新配置ipv6。 特意检查了下Hyper-v的设置选项,没有宿主机关机正常关闭虚拟机的选项。

组策略配置开关机脚本

编写脚本关闭虚拟机

首先需要编写一个 PowerShell 脚本,在关机时关闭 Hyper-V 里的所有虚拟机。

1
2
# shutdown_vms.ps1
Get-VM | Where-Object { $_.State -eq 'Running' } | Stop-VM -Force

这个脚本会遍历所有正在运行的虚拟机,并强制将它们关闭。

使用组策略运行脚本

然后,使用组策略(Group Policy)来配置在关机时自动运行这个脚本:

  • 打开组策略编辑器: 按Win + R,输入gpedit.msc,然后回车。

  • 导航到关机脚本设置: 在组策略编辑器中,导航到: 计算机配置 -> Windows 设置 -> 脚本 (启动/关机)

  • 添加关机脚本:

    1. 在右侧,双击“关机”。
    2. 点击“添加”,然后选择你之前保存的 shutdown_vms.ps1 脚本。
    3. 确认设置后保存。

测试

确保脚本的权限和组策略的生效,尝试重新启动或关机,检查虚拟机是否在系统关机时被自动关闭。

通过这种方式,你可以确保在关机时自动关闭 Hyper-V 虚拟机。

开机启动虚拟机脚本

1
2
3
# start_vms.ps1
Start-VM -Name "VM1"
Start-VM -Name "VM2"