В настоящее время я пытаюсь автоматизировать сборку виртуальной машины под управлением Windows Server 2012 R2. На данный момент стоит задача автоматизировать добавление ролей и функций. В мастере ролей и функций есть возможность экспортировать файл конфигурации XML, который можно запустить в PowerShell.
Однако, просмотрев XML-файл, я вижу, что он специфичен для сервера, на котором он запущен - он содержит такие поля, как «ComputerName».
Что, если я хочу запустить сценарий, который устанавливает роли и компоненты на множество виртуальных машин? Мне нужен файл конфигурации, который является обобщенным, а не персонализированным для конкретного компьютера.
У кого-нибудь есть мнение по этому вопросу?
Да, как для Linux, так и для Windows вы можете создавать файлы конфигурации желаемого состояния, которые могут:
Вот пример файла конфигурации, который включит 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 вместо сценария заключается в том, что я могу определить место, где я могу хранить конфигурации, которые будут отправлены или извлечены (по отношению к целевой машине), см. Режимы конфигурации Push and Pull. Конфигурация не заботится о том, является ли машина физической или виртуальной, но я считаю, что для загрузки сервера и получения DSC требуется не менее 2012 года.
Все это можно сделать в PowerShell
Get-WindowsFeature | ? { $_.Installed } | Export-Clixml .\installed.xml
Скопируйте xml туда, куда нужно перейти, где-нибудь новый сервер сможет получить к нему доступ.
Import-Clixml <path to xml>\installed.xml | Install-WindowsFeature
Import-Module servermanager
Install-WindowsFeature Feature,
Feature,
Feature,
etc
Вышеуказанное установит список функций. Вы можете жестко запрограммировать их или просто сохранить в файле, по одному в строке, а затем использовать это для их установки:
Import-Module servermanager
$features = get-content C:\Features.txt
Install-WindowsFeature $features