由于VMM中已签名的模板磁盘(比如EncryptionWinSrv2012R2.vhdx)是通用的,因此需要提供应答文件在配置过程中个性化受保护的VM。应答文件(通常称为无人值守文件)可以将VM配置为其预期角色 - 也就是说,它可以安装Windows功能,注册之前创建的RDP证书(rdpCert.pfx),以及执行其他自定义操作。它还将提供Windows安装所需的信息,包括默认管理员密码和产品密钥。

使用New-ShieldingDataAnswerFile生成用于创建受保护的VM的应答文件(Unattend.xml文件)的信息。使用该功能,您可以更轻松地生成应答文件,比如:

VM是否在初始化过程结束时加入域?

是否会为每个VM使用批量许可证或特定产品密钥?

使用的是DHCP还是静态IP?

是否会使用远程桌面协议(RDP)证书来证明VM属于您的组织?

想在初始化结束时运行脚本吗?

是否正在使用所需状态配置(DSC)服务器进行进一步配置?

受保护数据文件(PDK)中使用的应答文件将用于创建每一个VM使用该受保护数据文件(PDK)。因此,您应确保不将任何特定于VM的信息硬编码到应答文件中。VMM支持无人值守文件中的一些替换字符串(请参阅下表),以处理可能从VM更改为VM的特定值。你不需要使用这些; 但是如果它们存在,VMM将使用它们,受保护的VM无人参与文件中唯一支持的替换字符串如下:

备注:使用替换字符串时,确保在VM配置过程中填充字符串。如果在部署时未提供诸如@ProductKey@之类的字符串,则将无人值守文件中的<ProductKey>节点留空,否则个性化过程将失败,您将无法连接到VM。

部署受保护的虚拟机-创建应答文件_Windows Server

除此之外,为受保护的VM创建unattend.xml文件时,需要注意一下几点限制:

  • 无人应答文件必须在配置后使VM关闭。这是为了允许VMM知道何时应该向使用者报告VM已完成配置并准备好使用。一旦检测到在配置期间关闭VM,VMM将自动重新启动VM。

  • 强烈建议您配置RDP证书以确保连接到正确的VM。

  • 请务必启用RDP和相应的防火墙规则,以便在配置完VM后可以访问它。您无法使用VMM控制台访问受保护的VM,因此您需要RDP才能连接到VM。如果您更喜欢使用Windows PowerShell远程管理来管理系统,请确保也启用了WinRM。

  • 只有在利用VMM静态IP地址池时,才会使用@NextHop-1-1@或@DNSAddr-1-1@替换字符串。

最后需要注意的是,受保护的VM部署过程只会加密OS驱动器。

进入正题,使用New-ShieldingDataAnswerFile生成用于创建受保护的VM的应答文件(Unattend.xml文件)的信息,先下载安装ShieldingDataAnswerFile模块,我在SCVMM2016服务器上操作执行

Install-Module GuardedFabricTools -Repository PSGallery -MinimumVersion 1.0.0

部署受保护的虚拟机-创建应答文件_服务器_02

接下来可以创建应答文件了

  • 创建一个基本的应答文件

创建一个Windows应答文件,该文件只设置管理员帐户密码和主机名。VM网络适配器将使用DHCP获取IP地址,并且VM不会加入Active Directory域。提示输入管理员凭据时,请指定所需的用户名和密码。如果要配置内置管理员帐户,请使用“Administrator”作为用户名。

如果定义非Administrator账户和密码就执行示例如下:

$adminCred = Get-Credential "admin"

New-ShieldingDataAnswerFile -Path '.\ShieldedVMAnswerFile.xml' -AdminCredentials $adminCred

如果定义Administrator账户和密码就执行如下:

$adminCred = Get-Credential "Administrator"

New-ShieldingDataAnswerFile -Path 'C:\AnswerFile\ShieldedVMAnswerFile.xml' -AdminCredentials $adminCred -Force

部署受保护的虚拟机-创建应答文件_Windows Server_03

  • 带加域的Windows应答文件

该文件将受保护的VM连接到Active Directory域。VM网络适配器将使用DHCP获取IP地址。

$adminCred = Get-Credential "Administrator"

$domainCred = Get-Credential "basehome\dcadmin"

New-ShieldingDataAnswerFile -Path 'c:\AnswerFile\ShieldedVMAnswerFile.xml' -AdminCredentials $adminCred -DomainName 'basehome.com.cn' -DomainJoinCredentials $domainCred -force

同样的,如果是Administrator为管理员账户,那么需要再后面加-force

第一行是设置本地管理员账户,第二行是设置加域需要的账户,第三行把-DomainName参数的值改成AD域的FQDN

带有静态IPv4地址的Windows应答文件

该文件使用SCVMM构造逻辑网络在部署时提供的静态IP地址,例如System Center Virtual Machine Manager,Virtual Machine Manager通过使用IP池为静态IP地址提供三个组件:IPv4地址,IPv6地址,网关地址和DNS地址。如果要包含任何其他字段或需要自定义网络配置,则需要手动编辑脚本生成的答案文件。

部署受保护的虚拟机-创建应答文件_Shield VM_04

$adminCred = Get-Credential "Administrator"

New-ShieldingDataAnswerFile -Path 'c:\AnswerFile\ShieldedVMAnswerFile.xml' -AdminCredentials $adminCred -StaticIPPool IPv4Address -Force

部署受保护的虚拟机-创建应答文件_Shield VM_05

  • 带自定义区域设置的Windows应答文件

比如设置美国区域的Windows应答文件,设置Administrator密码以及加域

$adminCred = Get-Credential "Administrator"

$domainCred = Get-Credential "basehome\dcadmin"

New-ShieldingDataAnswerFile -Path 'c:\AnswerFile\ShieldedVMAnswerFile.xml' -AdminCredentials $adminCred -Locale es-us

  • 在Windows Server 2019开始支持基本的Linux应答文件

可以在屏蔽的VM中运行某些Linux来宾操作系统。如果您使用System Center Virtual Machine Manager Linux代理专门处理这些VM,则New-ShieldingDataAnswerFile cmdlet可以为其创建兼容的答案文件

在Linux应答文件中,通常包括root密码,root SSH密钥和可选的静态IP池信息。在运行下面的脚本之前,将路径替换为SSH密钥的公共部分

$rootPassword = Read-Host -Prompt "Root password" -AsSecureString

New-ShieldingDataAnswerFile -Path '.\ShieldedVMAnswerFile.xml' -RootPassword $rootPassword -RootSshKey '~\.ssh\id_rsa.pub'

在我的测试环境中,我就只采用Windows的基本应答文件了

部署受保护的虚拟机-创建应答文件_Shield VM_06

根据你的需求制作满足你业务需求的应答文件即可。