vm虚拟机网络标志_PowerShell创建虚拟机 (一、基本思路与实现代码)

     编者按:这篇文章是我的室友Aron Luo之前的博文,文章主体介绍了使用windows powershell脚本创建虚拟机的思路与具体实现,思路清晰,讲解到位,尤其是批量创建虚拟机的脚本,实用性很强,所以特与其交流之后,经其许可转到这里以飨各位。

    首先来说明一下为什么要写这个脚本,记得当初刚开始做私有云实验的时候,对Hyper-V的操作还不熟练,导致一遍又一遍的重新安装虚拟机,做私有云实验,安装OS和软件占据了我们大部分的时间,后来也是在51CTO的各个大神(九叔之类的)的博客里面逐渐熟悉了一些技术,了解到了VHD模板(差异磁盘)也逐渐掌握了差异磁盘的方法,当时以为环境都做快照,就能一劳永逸,相同的环境不需要再创建新的VM了,到现在想想,这个想法是挺不现实的,因为你要新的操作系统、新的演示环境、与以前的版本协作等等。。。

99eb7b3c297fa045fabeff8233146334.png

     后来,VM的数量越来越多,模板也越来多,重复的操作也就相应变多同。。。记得第一次做Azure Pack实验的时候,当场就有点怕了。。。一下子七八台虚拟机,心里的那个躁动啊!虽然整个流程比较简单,先准备VHD模板,接着根据VM创建相应的差异磁盘,然后再创建相应的VM,再把VHD附加到VM,还得连接到相应的虚拟交换机。。。一个两个还好,三四个也能接受,到了七八个,我就接受不了(主要是我比较懒)。。。于是下了个狠心想办法写了个批量创建VM的脚本。。。

81f0c378299031d74f5cc0c4a52f7f19.png

b3a994de431395ef61688bfd2abe1c9d.png这个图大家可以看的玩玩,Windows Azure Pack的架构图,仔细找找,会发现需要创建的VM太多了。。。

     其实,整个过程也比较简单,将我们手工完成的任务交给PowerShell来完成,我们只要定义好相应的参数信息就行了。

03676afae024a7cfa603e638183ce6a8.pngb3a994de431395ef61688bfd2abe1c9d.png19d81ce95708b7d30211c3d7e57e2e01.png

     看上面这个VM1,比如说我们要新建的这台VM1是4 vCPU、4GB内存、127GB硬盘,连接到vSwitch网络,如果用PS(PowerShell,以下简称PS)来完成这个操作,该如何进行呢?

我们先来做一件有意思的事情,如果用英语关键字来表示这个操作,大概是什么样的呢?

New Virtual Machine , 4 vCPU, 4GB Memory, 127GB Disk,  connect to vSwitch network

而在PS中的表现形式如下:

New-VHD  -Path D:\Hyper-v\Virtual Hard Disk\disk1.vhdx
New-VM -VHDPath D:\Hyper-v\Virtual Hard Disk\disk1.vhdx -MemoryStartupBytes 4GB -Name VM1 -SwitchName vSwitch
Set-VMProcessor -VMName VM1 -Count 4

      通过如上PS脚本,我们不难看出,PS脚本非常简单易懂,容易记忆,和英语本身的近似度很好,特别适合我们做运维的同学。

     当然,上述可实现我们的新建VM的需求,可是这样的脚本可用性不高,因为脚本中VM的配置不是"活"的,每次运行都只能够创建相同的VM,那怎么样才能活呢?是不是通过键盘交互会更好?其实,如果把刚刚的脚本做个简单的修改,就能够实现。

     任何一门编程语言都离不开变量,我们的PS当然也可以使用变量,在PS中定义一个新的变量只要在变量名称前面加上美元符号"$",例如我想新建一个变量vhdpath_new,只要在变量名称前加"$":$vhdpath_new,这样,我们的新的变量就能够使用了。变量,顾名思义,它的"量"是可以变化的,可是如何才能让它发生改变呢?方法很多,例如:从主机获取(键盘输入等)、脚本内部运算等等。如何又从键盘输入内容呢?我们可以试用read-host这个命令,比如在PS中$vhdpath_new=read-host("请输入硬盘路径,包含硬盘文件名及格式"),回车后根据提示输入:D\Hyper-v\Virtual Hard Disk\disk1.vhdx,然后再在PS中输入$vhdpath_new来回显变量的值,这个时候我们可以看见$vhdpath_new的值已经发生了变化。这里有点需要注意的是:通过read-host从键盘输入的内容,不管是纯数字还是非纯数字,一般情况下输入的内容默认类型是String字符型的(在运算时需要注意,当时我和九叔就在操作内存的时候找了好久的原因,总是报内存溢出,最后还是通过gettype().name发现read-host的的默认类型是String的)。

6605b75d507b7c9ec2355a54a11d02c7.png

6ea7bce83f4f381f3531c6310c9b9b48.png

743eef5e1d67b3c07e563c360e6d49a1.png

于是乎,我们的脚本可以进化成如下状态了:

输入部分:

$vhdpath_new= read-host("请输入模板路径【包括文件名和后缀】")
$NewVMGeneration= read-host("请输入新建虚拟机的版本号")
$NewVMMemoryStartupBytes= read-host("请输入启动内存")
$name= read-host("请输入虚拟机名称")
$NewVMSwitchName= read-host("请输入虚拟机需要连接网络的名称")
$NewVMvCPU= read-host("请输入虚拟机的虚拟CPU数量")

创建部分:

New-VM -VHDPath $vhdpath_new -Generation $NewVMGeneration -MemoryStartupBytes $NewVMMemoryStartupBytes  -Name $name -SwitchName $NewVMSwitchName
Set-VMProcessor -VMName $name -Count $NewVMvCPU

     到这个地方,差不多就完成了基本的核心部分,下个篇章我们一起来探讨一下如何批量创建VM以及实现的思路与方法!

   想阅读原博文请点击“阅读原文”~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值