您的位置:首页 > 博客中心 > 网络系统 >

PowerShell创建虚拟机 (二、实现批量创建)

时间:2022-04-03 10:33

上一篇,我们大概了解到了如何用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,上面两个脚本虽然只有一行不同,但输出结果的差异却不止一处。上面两段代码说明了以下几点:

  1. 通过循环可以输出多次。(废话?我也觉得。。。)

  2. 通过循环,输出的结果可以是相同的,也可以是不同的。

  3. 循环内部的主体可以与循环变量结合起来,也可以独立于循环变量。

以上几点有什么用呢?第一点,解决了我们主要的问题,批量创建虚拟机;还记得上篇的代码不?加上循环以后,我们再来看看代码:


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十周年快乐!最后,附上我们一起玩耍的照片,哈哈,找找看,我在哪?

技术分享

本文出自 “” 博客,请务必保留此出处

本类排行

今日推荐

热门手游