使用PowerShell脚本实现Hyper-V虚机自动快照

 原文作者:http://www.wj64.net/?post=14

虚拟化平台是Windows Server 2012 R2下的Hyper-V 最近客户提出定期生成Hyper-V下业务虚拟机的快照。采用滚动方式生成快照,即每周末凌晨生成一个,同时删除二周前的快照。保证业务虚拟机有最近二周的快照。 需求并不复杂,但物理服务器架构很简单没有域环境,没有功能强大的SCCM 等管理工具。这意味着每次都要人去操作这个生成快照的事情,从自动化运维角度来说这种每周重复单调的操作交给机器来完成是最好的。

作为重复操作,首先想到了计划任务 + 批处理,但很遗憾针对Hyper-V的操作批处理无能为力,VBS也不行。只能使用微软新一代的脚本工具PowerShell  在微软官网上找到PowerShell对Hyper-V 操作的命令列表及说明:

 https://technet.microsoft.com/zh-cn/library/hh848559(v=wps.630).aspx      (英文页面,官方没有做中文翻译,可以用翻译软件翻译网页)

我的脚本思路如下:

  关闭虚拟机(个人认为在条件允许情况下关机操作快照比较好)-----删除二周前快照-----生成新快照-----开启虚拟机 

根据以上思路需要:

  Stop-VM   Start-VM   Get-VMsnapshot   Remote-VMSnapshot   Checkpoint-VM 等几个命令

  最终编写的脚本文件如下:(ping 127.0.0.1作为延时使用,单位:秒。因虚机数据量不同在关机及删除快照过程中可能需要大量时间,酌情修改)

  

  脚本文件编写好了,后面就要创建计划任务并调用它了。

这里有几个问题需要注意:

  1.因为是在后台运行,所以在计划任务 常规 选项卡中要选定“不管用户是否登录都要运行” 并勾选 “使用最高权限运行”

   

  2.在配置计划任务 操作 选项卡中,添加脚本文件路径中的 程序或脚本 框一定要输入 powershell  如果没有输入脚本将不能被识别运行

  

 

另外,PowerShell脚本有4种级别运行权限:

Restricted——默认的设置, 不允许任何脚本运行
AllSigned——只能运行经过数字证书签名的脚本
RemoteSigned——运行本地的脚本不需要数字签名,但是运行从网络上下载的脚本就必须要有数字签名
Unrestricted——允许所有的脚本运行

我查看的默认情况下Windows Server 2012 R2是 RemoteSigned 级别,运行以上本机脚本没有问题。但如果是Restricted级别则无法运行,需要修改

Get-ExecutionPolicy                                    //此命令用于查看目前脚本运行权限

Set-ExecutionPolicy  (脚本运行级别关键字)   //此命令用于修改目前脚本运行权限

 

  示例如下:

  

 

posted @ 2021-12-16 12:08  Mundo Novo  阅读(774)  评论(0编辑  收藏  举报