Windows Server 2012 Hyper-V功能非常强大,然后操作方式除了传统的GUI图形界面外,也可以使用PowerShell方式管理,Windows Server 2012所有的功能都可以使用Powershell,所以不管是Windows Server 2012图形界面还是Server Core,还有Hyper-V免费的虚拟化操作系统,Powershell显得非常重要。但是,大部分的人都喜欢使用图形界面来进行操作,其实当你深入使用Powershell,你就会了解Hyper-V有很多功能是GUI图形界面无法设定使用的。所以在这里主要介绍下Powershell的使用。
    图形用户界面使用了大多数计算机用户所熟知的一些基本概念。可以凭借对这些界面的熟悉来完成任务。操作系统为用户呈现了可浏览的图形化的项目表示形式,通常包括下拉菜单(用于访问特定功能),以及上下文菜单(用于访问特定于上下文的功能)。命令行界面 (CLI)(例如 Windows PowerShell)必须使用不同的方式来公开信息,因为它没有可方便用户的菜单或图形系统。只有在知道命令的名称后,才可对其进行使用。尽管可以键入相当于 GUI 环境中的功能的复杂命令,但前提是您必须熟悉常用的命令和命令参数。大多数 CLI 都不提供可帮助用户了解该接口的模式。由于 CLI 是最早的操作系统 shell,因此许多命令名称和参数名称都是随意选择的。通常,选择名称的原则是简洁扼要而非清楚明了。尽管大多数 CLI 中都集成了帮助系统和命令设计标准,但是它们通常都是为了与最早的命令兼容而设计的,因此命令集仍然保持着几十年前确定的形式。而 Windows PowerShell 设计原则是可以利用用户在 CLI 方面的以往知识。
    使用大多数命令行界面时,了解命令名称及命令参数需要花费大量的时间。问题在于可用模式很少,因此只能通过记住常用的每种命令和每个参数来了解这些命令行界面。使用新命令或参数时,通常无法使用已知的名称,而必须查找和了解新的名称。考虑到界面是如何从一个小工具集经过不断添加的新增功能发展而来,就很容易了解为何其结构会是非标准的。尤其是使用命令名称时,这一点可能是必然的,因为每种命令都是单独的工具。不过,也可以通过更好的方式来处理命令名称。
    大多数命令都是为管理操作系统或应用程序的元素(例如,服务或进程)构建的。这些命令具有各种名称,它们可能属于或不属于一个系列。例如,在 Windows 系统上可以使用 net start 和 net stop 命令来启动和停止服务。此外,还有一个名为 sc 的更通用的 Windows 服务控制工具,这一完全不同的名称与 net 服务命令的命名模式不一致。对于进程管理,Windows 使用 tasklist 命令来列出进程,并使用 taskkill 命令来终止进程。
    用于接受参数的命令具有不一致的参数规范。不能使用 net start 命令来启动远程计算机上的服务。sc 命令将启动远程计算机上的服务,但是,若要指定远程计算机,则必须在其名称前添加双反斜杠作为前缀。例如,若要在名为 DC01 的远程计算机上启动后台打印程序服务,您可以键入 sc \\DC01 start spooler。若要列出在 DC01 上运行的任务,需要使用 /S(代表“system”)参数,并提供如下所示的不带反斜杠的名称 DC01:tasklist /S DC01。
    Cmdlet 使用“动词-名词”名称以减少命令记忆量。Windows PowerShell 使用“动词-名词”命名系统,其中的每个 cmdlet 名称均由标准动词、连字符和特定名词组成。Windows PowerShell 动词并非一定为英语动词,但其表示 Windows PowerShell 中的特定操作。名词与所有语言中的名词十分类似,它们描述在系统管理中起重要作用的特定对象类型。我们将提供几个动词和名词的示例,以便于向您演示这些由两部分组成的名称是如何减少您了解命令所需的记忆量。
    名词所受的限制较少,但它们应始终描述命令的操作对象。Windows PowerShell 具有 Get-Process、Stop-Process、Get-Service 和 Stop-Service 等命令。如果仅有两个名词和两个动词,则一致性并不会极大地简化您了解这些命令的过程。但是,假定是由 10 个动词和 10 个名词组成的一组标准命令名称,则您只需记住 20 个单词,而使用这些单词可以构成 100 个不同的命令名称。通常,您只需通过命令的名称即可识别其用途,而对新命令应使用什么样的名称,这通常也是显而易见的。例如,计算机关闭命令可能为 Stop-Computer。用于列出网络上的所有计算机的命令可能为 Get-Computer。用于获取系统日期的命令为 Get-Date。在 Get-Command 中使用 -Verb 参数可以列出所有包含特定动词的命令。
    比如说,我们使用Get-Command来这条命令可以把所有和Hyper-v有关的PowerShell命令显示出来。
Microsoft Hyper-V Server 2012开启虚拟化-PowerShell_Windows
    我们也可以使用PowerShell 3.0管理Hyper-V 3.0。PowerShell ISE是集成在Windows Server中的PowerShell集成开发环境,在Windows Server 8中,在运行窗口中输入PowerShell ISE,即可打开PowerShell ISE。
Microsoft Hyper-V Server 2012开启虚拟化-PowerShell_Windows_02
    虽然还不如PowerGUI Script Editor还用,但是已经很不错了,且支持插件,目前插件还不多,在TeachNet上可以查看。下面使用Hyper-V模块,可以看到有很多命令:
Microsoft Hyper-V Server 2012开启虚拟化-PowerShell_Microsoft_03
 
    下面,我们就通过Powershell来进行简单的相关设置:
    1、 通过Powershell ISE远程管理Hyper-V
    之前我们已经讲了,想管理Hyper-V主机,但是又不想去机房,那么可以是用Hyper-V管理器进行图形化的远程操作管理Hyper-V服务器,同样我们也可以是用Powershell ISE远程管理Hyper-V服务器,但是,要管理Hyper-V Server2012,必须是使用Windows 8或者是Windows Server 2012中的Powershell ISE来进行管理,不能是用低版本的Powershell ISE进行管理。首先在文件中选择新建远程Powershell选项卡。然后点击连接。
Microsoft Hyper-V Server 2012开启虚拟化-PowerShell_Windows_04
Microsoft Hyper-V Server 2012开启虚拟化-PowerShell_Microsoft_05
 
    2、 设置Hyper-V虚拟硬盘存储位置
    情况下,都会进行虚拟硬盘的修改,不指定虚拟机硬盘的存放文件夹,虚拟硬盘会放到默认的位置上,可以修改此路径。
Microsoft Hyper-V Server 2012开启虚拟化-PowerShell_操作系统_06
    使用Powershell修改Hyper-V虚拟硬盘存储位置设置到c:\Hyper-V\Virtual Hand Disks,如果没有此文件夹,会自动创建。
Microsoft Hyper-V Server 2012开启虚拟化-PowerShell_Microsoft_07
Powershell修改命令为Set-VMHost -VirtualHardDiskPath "c:\Hyper-V\Virtual Hand Disks "
 
    3、设置Hyper-V虚拟机存储位置
    同样的,一般情况下,都会进行虚拟机的修改,不指定虚拟机的存放文件夹,虚拟硬盘会放到默认的位置上,可以修改此路径。
Microsoft Hyper-V Server 2012开启虚拟化-PowerShell_Microsoft_08
    使用Powershell修改Hyper-V虚拟硬盘存储位置设置到c:\Hyper-V\Virtual Hand Disks,如果没有此文件夹,会自动创建。
Powershell修改命令为Set-VMHost -VirtualMachinePath "c:\Hyper-v\VM"
Microsoft Hyper-V Server 2012开启虚拟化-PowerShell_Windows_09
 
    4、 管理RemoteFX GPU
    RemoteFX是微软的一项桌面虚拟化技术,使得用户在使用远程桌面或虚拟桌面进行游戏应用或者图形创作时,可以获得和本地桌面一致的效果。RemoteFX可以将GPU虚拟化提供给每一个虚拟桌面,也就是说每个虚拟机都可以获得独立的虚拟GPU,从而可以获得各种各样的图形加速能力,进而执行各种高保真视频、2D、3D图形图像以及富媒体的处理能力。只有服务器中具有独立显卡,则这里才会出现选项。
Microsoft Hyper-V Server 2012开启虚拟化-PowerShell_Windows_10
 
5、 NUMA跨越设置
非统一内存访问(NUMA)是一种用于多处理器的电脑记忆体设计,内存访问时间取决于处理器的内存位置。 在NUMA下,处理器访问它自己的本地存储器的速度比非本地存储器(存储器的地方到另一个处理器之间共享的处理器或存储器)快一些。
Microsoft Hyper-V Server 2012开启虚拟化-PowerShell_Windows_11
允许虚拟机跨越物理NUMA节点
Set-VMHost -NumaSpanningEnabled $true
Microsoft Hyper-V Server 2012开启虚拟化-PowerShell_操作系统_12
关闭虚拟机跨越物理NUMA节点
Set-VMHost -NumaSpanningEnabled $false
Microsoft Hyper-V Server 2012开启虚拟化-PowerShell_Microsoft_13
 
   6、 实时迁移设置
    Hyper-V 实时迁移将正在运行的虚拟机从一台物理服务器移动到另一台物理服务器,同时在虚拟机的可用性方面对用户没有任何影响。通过将迁移虚拟机的内存预先复制到目标服务器,实时迁移可在最大程度上缩短虚拟机的传输时间。实时迁移是决定性的,这意味着启动实时迁移的管理员或脚本决定着将哪台计算机用作实时迁移的目标位置。迁移虚拟机的来宾操作系统无法感知迁移的发生,所以不需要对来宾操作系统执行特殊配置。
Microsoft Hyper-V Server 2012开启虚拟化-PowerShell_Microsoft_14
    实时迁移的设置如果使用PowerShell就比较复杂,也需要相关的知识。需要迁移的主机必须具有相同的域或者相同的信任网络,而且委派的账户都是管理员组的成员,而且需要特定的网络设计,所以在这里我首先先介绍下设置的命令,在后面的博客中,会有专门的一章节专门讲虚拟机的动态迁移。
    首先是启动传入和传出的实施迁移。
Microsoft Hyper-V Server 2012开启虚拟化-PowerShell_操作系统_15
    由于没有指定实时迁移的网络,所以会提示要求设置迁移网络。如果关闭实时迁移,则需要执行Disable-VMMigration。开启实施转移后,通过命令Get-VMHost来检测实时迁移的状态。
Microsoft Hyper-V Server 2012开启虚拟化-PowerShell_操作系统_16
    之后设置实时迁移的认证协议,有2种认证协议,一种是CredSSP,另一种是Kerberos。CredSSP 是一个新安全支持提供程序 (SSP),通过使用安全支持提供程序接口 (SSPI) 。而Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下, Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。
Microsoft Hyper-V Server 2012开启虚拟化-PowerShell_Windows_17
    接下来就是设置并行实施迁移数量
Microsoft Hyper-V Server 2012开启虚拟化-PowerShell_Windows_18
传入的实时迁移,如果是使用任何网络来进行实时迁移则输入
Microsoft Hyper-V Server 2012开启虚拟化-PowerShell_操作系统_19
如果是指定IP地址来进行实施迁移,则后面带着IP地址就行
Microsoft Hyper-V Server 2012开启虚拟化-PowerShell_Microsoft_20
 
   7、 存储迁移
    存储迁移就是将虚拟机的文件转移到其它地方,而在转移过程中,虚拟机一直保持运作,不停机,而这里设置的是存储的并发转移数目,这部分也会有专门的一章来讲解。
Microsoft Hyper-V Server 2012开启虚拟化-PowerShell_Microsoft_21
使用Powershell设置存储迁移的数目,这里设置的并发数是10
Microsoft Hyper-V Server 2012开启虚拟化-PowerShell_Microsoft_22
[Hyper-v01.mbf.com]: PS C:\Users\administrator.MBF\Documents> Set-VMHost -MaximumStorageMigrations 10
 
    8、 复制配置
    在存储系统、群集和数据中心之间复制虚拟机可提供业务连续性和灾难恢复的功能。Hyper-V 副本是解决至少两台Windows Server 2012主机间虚拟机的复制功能,可以通过基于 IP 的网络,向远程站点提供高效、 定期和异步复制。在存储系统、群集和数据中心之间复制虚拟机可提供业务连续性和灾难恢复,提供了在两个托管服务器之间异步复制 Hyper-V 虚拟机的功能,它无需共享存储或任何特定的存储硬件,也就是说,Hyper-v副本提供了一种不限制存储类型、不限制工作量的解决方案,YPER-V 副本使基础设施作为一种服务 (IaaS) 的托管主机专用/虚拟服务器为其客户的供应商。
Microsoft Hyper-V Server 2012开启虚拟化-PowerShell_Windows_23
    一口气使用Powershell命令来开启复制功能+使用Kerberos验证+允许任何经过身份验证额服务器中进行复制。
[Hyper-v01.mbf.com]: PS C:\Users\administrator.MBF\Documents> Set-VMReplicationServer $true -AllowedAuthenticationType Kerberos -KerberosAuthenticationPort 80 -ReplicationAllowedFromAnyServer $true -DefaultStorageLocation 'C:\Hyper-V\Virtual Hand Disks'
Microsoft Hyper-V Server 2012开启虚拟化-PowerShell_操作系统_24
    从命令中可以看到这么几个关键词,只要设置这几个就可以了。
Set-VMReplicationServer 启动此计算机作为副本服务器
-AllowedAuthenticationType 选择身份验证方式
Kerberos -KerberosAuthenticationPort 指定验证类型和端口
-ReplicationAllowedFromAnyServer 允许从任何经过身份验证的服务器中进行复制
-DefaultStorageLocation 指定副本的默认存储位置