我目前正在尝试自动构建运行 Windows Server 2012 R2 的 VM。目前的挑战是自动添加角色和功能。在角色和功能向导中,有一个选项可以导出可在 PowerShell 中运行的 XML 配置文件。
然而,查看 XML 文件后,我发现它特定于它所运行的服务器 - 它包含“ComputerName”等字段。
如果我想运行一个在许多虚拟机上安装角色和功能的脚本怎么办?我需要一个通用的配置文件,而不是针对特定计算机的个性化配置文件。
有人对这个问题有什么看法吗?
答案1
是的,对于 Linux 和 Windows,您都可以构建所需状态的配置文件,其功能如下:
- 启用或禁用服务器角色和功能
- 管理注册表设置
- 管理文件和目录
- 启动、停止和管理流程和服务
- 管理群组和用户帐户
- 部署新软件
- 管理环境变量
- 运行 Windows PowerShell 脚本
- 修复偏离预期状态的配置
- 发现给定节点上的实际配置状态
下面是一个示例配置文件,它将启用 IIS,确保网站文件位于正确的文件夹中,如果其中任何内容未安装或缺失,则根据需要安装或复制它们(请注意,$websitefilepath 被假定为网站文件的预定义源):
Configuration MyWebConfig
{
# A Configuration block can have zero or more Node blocks
Node "Myservername"
{
# Next, specify one or more resource blocks
# WindowsFeature is one of the built-in resources you can use in a Node block
# This example ensures the Web Server (IIS) role is installed
WindowsFeature MyRoleExample
{
Ensure = "Present" # To uninstall the role, set Ensure to "Absent"
Name = "Web-Server"
}
# File is a built-in resource you can use to manage files and directories
# This example ensures files from the source directory are present in the destination directory
File MyFileExample
{
Ensure = "Present" # You can also set Ensure to "Absent"
Type = "Directory“ # Default is “File”
Recurse = $true
# This is a path that has web files
SourcePath = $WebsiteFilePath
# The path where we want to ensure the web files are present
DestinationPath = "C:\inetpub\wwwroot"
# This ensures that MyRoleExample completes successfully before this block runs
DependsOn = "[WindowsFeature]MyRoleExample"
}
}
}
有关详细信息,请参阅Windows PowerShell 所需状态配置概述和开始使用 Windows PowerShell 所需状态配置。
那么,为什么要使用这个命令而不是简单的 install-windowsfeature 命令呢?使用 DSC 而不是脚本的真正优势在于,我可以定义一个位置,用于存储要推送或拉取的配置(相对于目标机器),请参见推送和拉取配置模式。配置不关心机器是物理的还是虚拟的,但我相信至少需要 2012 年才能让服务器启动并拉动 DSC。
答案2
您可以在 PowerShell 中完成所有操作
Get-WindowsFeature | ? { $_.Installed } | Export-Clixml .\installed.xml
将 xml 复制到需要的位置,即新服务器可以访问的地方。
Import-Clixml <path to xml>\installed.xml | Install-WindowsFeature
答案3
Import-Module servermanager
Install-WindowsFeature Feature,
Feature,
Feature,
etc
以上命令将安装一系列功能。您可以对它们进行硬编码,也可以将它们保存在一个文件中,每行一个,然后使用以下命令安装它们:
Import-Module servermanager
$features = get-content C:\Features.txt
Install-WindowsFeature $features