上一篇,我们大概了解到了如何用PowerShell脚本(以下简称PS或PS脚本)创建一台虚拟机,以及自定义虚拟机相关的配置,这一篇,我们一起探讨一下如何实现批量创建虚拟机。
批量创建,顾名思义,就是让脚本运行一次,创建多台虚拟机,最简单的实现方法呢,就是循环,下面我们一起来看一段代码:
for($i=1;$i -le10;$i++) { $i }
这是PS脚本中最简单的循环之一,运行之后,效果如下图:
这个PS脚本的意思呢,是从1循环到10,一共10次,每次干的事情呢,就是将变量$i的结果输出到屏幕。
OK,我们再来看一段代码:
for($i=1;$i -le10;$i++) { 1 }
这段代码与上面的代码基本相似,但是大括号中的内容略有变化,先来看看运行结果:
这段代码意思与刚才的相同,只是输出的结果不同而已,这段代码是输出了10个1。OK,肯定有人想问,不就一个循环,用得着截图两遍?粘贴两段代码?其实,我觉得这是必要的,因为对于做运维的我们来说,编程是个门槛,我相信大部分做运维的朋友对代码不是很熟,可能只是会一些简单的脚本(各大神、大牛除外啊~各位大大莫笑~),所以我个人觉得呢,从最简单的对比,更能看出差异化。
OK,上面两个脚本虽然只有一行不同,但输出结果的差异却不止一处。上面两段代码说明了以下几点:
- 通过循环可以输出多次。(废话?我也觉得。。。)
- 通过循环,输出的结果可以是相同的,也可以是不同的。
- 循环内部的主体可以与循环变量结合起来,也可以独立于循环变量。
以上几点有什么用呢?第一点,解决了我们主要的问题,批量创建虚拟机;还记得上篇的代码不?加上循环以后,我们再来看看代码:
for($i=1;$i -le10;$i++) { #输入部分: $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 }
其实这段代码就是将上面第二段代码中的循环体"1"替换成了上篇的代码,最终实现的功能就是将上篇的脚本连续运行10次,手动输入10次之后就可以创建10个虚拟机了!
运行之后就发现,问题来了!每次都要输入许多重复的内容,其实我们需要的自定义配置就那么点,比如只需要虚拟机名称和硬盘名称不同,其他配置都可以保持相同,那该怎么办呢?So Easy!把输入部分,除了虚拟机名称,其他部分拿出来就是了啊!
#输入部分: $vhdpath_new= read-host("请输入模板路径【包括文件名和后缀】") $NewVMGeneration= read-host("请输入新建虚拟机的版本号") $NewVMMemoryStartupBytes= read-host("请输入启动内存") $NewVMSwitchName= read-host("请输入虚拟机需要连接网络的名称") $NewVMvCPU= read-host("请输入虚拟机的虚拟CPU数量") for($i=1;$i -le10;$i++) { #输入部分: $name= read-host("请输入虚拟机名称") #创建部分: New-VM -VHDPath $vhdpath_new -Generation $NewVMGeneration -MemoryStartupBytes $NewVMMemoryStartupBytes -Name $name -SwitchName $NewVMSwitchName Set-VMProcessor -VMName $name -Count $NewVMvCPU }
这下大功告成,现在我们的脚本已经能够实现批量创建虚拟机了!到这儿,我们都的脚本核心内容大致完成,但还是用户体验还不是很好,下一个篇章,我们继续探讨,让我们的脚本能够适应不同的环境~
题外话:今天在南京,我们51cto在南京的小伙伴们在一起玩耍的挺High的,共同参与了51cto的十周年庆典,技术成就梦想,祝51cto十周年快乐!最后,附上我们一起玩耍的照片,哈哈,找找看,我在哪?