是否可以使用 PowerShell 创建用于安装 Windows 功能的通用配置文件?

是否可以使用 PowerShell 创建用于安装 Windows 功能的通用配置文件?

我目前正在尝试自动构建运行 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

相关内容