使用PowerShell DSC构建Hyper-V主机

日期: 2015-11-24 作者:Adam Bertram翻译:肖培庆 来源:TechTarget中国 英文

Hyper-V在市场份额上要比VMware要落后,但微软在慢慢地追赶。 企业喜欢微软的价格优势——有的时候甚至是免费的——以及其不断增加的平台特性。这些好处会加速管理员去部署更多数量的Hyper-V主机。 我们可以使用自动化方法在一台运行Windows Server 2012 R2的服务器上配置Hyper-V主机,从而使这个过程可重复化。

本文会解释如何使用Windows PowerShell,特别是PowerShell期望状态配置(PowerShell Desired State Configuration,DSC)来实施上述的部署。 那么在一个已存在的Windows服务器上部署一个Hyper……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

Hyper-V在市场份额上要比VMware要落后,但微软在慢慢地追赶。

企业喜欢微软的价格优势——有的时候甚至是免费的——以及其不断增加的平台特性。这些好处会加速管理员去部署更多数量的Hyper-V主机。

我们可以使用自动化方法在一台运行Windows Server 2012 R2的服务器上配置Hyper-V主机,从而使这个过程可重复化。本文会解释如何使用Windows PowerShell,特别是PowerShell期望状态配置(PowerShell Desired State Configuration,DSC)来实施上述的部署。

那么在一个已存在的Windows服务器上部署一个Hyper-V主机需要什么呢?对于我们的目的来说,需要三样东西:几个Windows功能,一个存储VM的目录和一个将VM连接到网络中的交换机。

搭建框架

在开始任何PowerShell DSC项目的时候,首先需要创建一个PS1 PowerShell cmdlet和写入一个配置模块,我们会称这个配置为HyperVBuild。

Configuration HyperVBuild {
}

配置内容和一个函数有点类似,它有可以随意执行的代码在其中,不过它的运作有一些不一样。在配置模块后面,通常会接着针对这份配置的参数,就像PowerShell函数一样,其中一种常见的参数是$NodeName。这个参数会指定这份配置文件将会在哪台机器上进行实施。在这个例子中,我们默认填写本机,因为这个脚本就保存在我们想创建Hyper-V主机的机器上。

添加关于node的代码块然后给$NodeName参数赋值。它会告诉Windows去创建一个配置文件,这个配置文件将会给$NodeName参数里面定义的机器名这台机器使用。

Configuration HyperVBuild {
     param(
           [string]$NodeName = 'localhost'
     )
     node $NodeName {
     }
}

为Hyper-V添加一个连接器

当框架已经搭建好后,我们需要导入一个xHyper-V模块。介于Hyper-V交换机的创建是必要的,我们需要PowerShell DSC模块来完成这个功能。xHyper-V不是Windows自带的模块,不过可以到微软Github资源库上去下载这个模块。将这个模块放置到C:Program FilesWindowsPowerShellModules这个目录下,它就可以被所有以后创建的脚本引用了。

敲入Import-DscResource cmdlet配置并且指定模块名称为xHyper-V

Configuration HyperVBuild {
     param(
           [string]$NodeName = 'localhost'
     )
     Import-DscResource –ModuleName xHyper-V
     node $NodeName {
     }
}

然后我们可以开始添加我们需要的资源了。首先,需要添加Hyper-V Windows功能。这需要用到一个Windows自带的PowerShell DSC资源。创建一行以WindowsFeature为资源名开头的代码,随后是代表这个资源的标签。在这个例子中,我们暂且叫这个标签为Hyper-V。

然后在代码块中,使用Ensure属性并将其置为Present来安装Windows特性。然后将需要在配置运行的时候安装的Windows功能的名字写在下面。

WindowsFeature 'Hyper-V' {
Ensure='Present'
     Name='Hyper-V'
}

之后,我们还需要确保安装Hyper-V-PowerShell功能,在这里我们创建了另一个代码块。

WindowsFeature 'Hyper-V-Powershell' {
Ensure='Present'
     Name='Hyper-V-Powershell'
}}

下一步,创建VM之前我们需要一个目录,我们需要确保其中一个是C:VMs。这里需要用到File资源来创建目录,这个File资源有一个称之为Type的属性,这个属性可以定义一个文件或者目录。

File VMsDirectory {
Ensure = 'Present'
Type = 'Directory'
     DestinationPath = "$($env:SystemDrive)VMs"
}

最后一个特性,我们使用xHyper-V模块内的一个称之为xVMSwitch的资源来创建和配置Hyper-V交换机。将Type置为Internal来创建一个VM无法向主机外部通信的网络。

xVMSwitch LabSwitch {
DependsOn = '[WindowsFeature]Hyper-V'
Name = 'LabSwitch'
     Ensure = 'Present'
Type = 'Internal'
}

注意到DependsOn属性。这个属性可以用在所有的资源内,它允许你决定资源被执行的顺序。在这里,我们确保了在创建交换机之前必须先安装Hyper-V Windows特性。

你现在应该有一个类似这样得配置文件。

configuration HyperVBuild
{
     param (
           [string]$NodeName = 'localhost'
     )

     Import-DscResource -ModuleName xHyper-V
     node $NodeName {
           WindowsFeature 'Hyper-V' {
                Ensure='Present'
                Name='Hyper-V'
           }

           WindowsFeature 'Hyper-V-Powershell' {
                Ensure='Present'
                Name='Hyper-V-Powershell'
           }

           File VMsDirectory
           {
                Ensure = 'Present'
                Type = 'Directory'
                DestinationPath = "$($env:SystemDrive)VMs"
           }

           xVMSwitch LabSwitch {
                DependsOn = '[WindowsFeature]Hyper-V'
                Name = 'LabSwitch'
                Ensure = 'Present'
                Type = 'Internal'
}
}
}

现在配置已经建立好了,然后需要在配置执行后创建一个MOF文件并将其应用到系统中去。要达到这个效果,可以像操作PowerShell功能一样通过调用HyperVBuild这个名字来执行配置文件。这将会创建一个和其名字一样的文件夹,在这个文件夹内有一个名为localhost.mof的MOF文件。

最后一步是将这个配置文件应用到本机中去。要这样做需要使用Start-DscConfiguration cmdlet命令并且使用一些不同的参数。

Start-DscConfiguration -Path .HyperVBuild -Wait -Force

第一个参数是Path,它为Start-DscConfiguration命令指定了放置MOF文件的目录。然后-Wait参数保证了Start-DscConfiguration会等待整个过程完成才会释放对控制台的控制。最后,-Force参数告诉Start-DscConfiguration去推送这个配置而不是拉取配置。Push/pull的场景就不在本文中进一步解释了。

当Start-DscConfiguration开始后,你可能会控制面板看到关于配置进程的信息。如果一些顺利的话,在几分钟后你就会拥有一个全新的为VM而设的Hyper-V服务器了。

作者

Adam Bertram
Adam Bertram

自由撰稿人

翻译

肖培庆
肖培庆

TechTarget中国兼职翻译

相关推荐

  • 管理员常用Windows PowerShell命令Top25

    即使Windows PowerShell已经由来已久,但很多管理员并不愿意主动熟悉PowerShell cmdlet命令行。随着微软扩展了PowerShell的功能,管理员应该对其功能及使用烂熟于心……

  • 巧用PowerShell参数防止操作失误

    使用PowerShell自动化操作可以帮助你节省大量的时间——或产生问题。幸运的是,巧用PowerShell参数可以防止发生更改脚本意外。

  • 课堂:PowerShell期望状态配置基础学习

    PowerShell DSC允许管理员定义和管理操作系统和应用程序的配置。这里我们介绍DSC的工作原理以及使用方法。

  • PowerShell 5升级指南

    PowerShell 5版本是最新脚本语言,与之前的版本相比增加了许多新功能。管理人员可以通过几个步骤升级为最新的版本。