Настройка опрашивающего SMB-сервера DSC
Область применения: Windows PowerShell 4.0, Windows PowerShell 5.0
Важно!
Опрашивающий сервер (компонент Windows служба DSC) — поддерживаемый компонент Windows Server, но реализация новых функций и возможностей для него не планируется. Мы хотели бы, чтобы вы знали, что более новая версия DSC теперь общедоступна и управляется функцией Политика Azure с именем гостевой конфигурации. Служба гостевой конфигурации сочетает в себе функции расширения DSC, служба автоматизации Azure State Configuration и наиболее часто запрашиваемые функции из отзывов клиентов. Гостевая конфигурация также включает поддержку гибридных компьютеров через серверы с поддержкой Arc.
Опрашивающий SMB-сервер DSC — это, компьютер, размещающий файловый ресурс SMB, который делает конфигурации DSC или ресурсы DSC доступными для целевых узлов, когда эти узлы запрашивают их.
Для использования опрашивающего SMB-сервера DSC необходимо выполнить следующее:
- Настроить файловый SMB-ресурс на сервере, с PowerShell 4.0 или более поздней версии.
- Настроить клиент с PowerShell 4.0 или более поздней версии для получения данных с этого файлового SMB-ресурса.
Использование ресурса xSmbShare для создания файлового SMB-ресурса
Существует несколько способов настройки файлового SMB-ресурса. Давайте рассмотрим, как это можно сделать с помощью DSC.
Установка ресурса xSmbShare
Для установки модуля xSmbShare используйте командлет Install-Module.
Примечание
Install-Module
включен в модуль PowerShellGet, содержащийся в PowerShell 5.0.
xSmbShare содержит ресурс DSC xSmbShare, с помощью которого можно создать файловый ресурс SMB.
Создание файлового ресурса и каталога
В следующей конфигурации ресурс File используется для создания каталога для ресурса, а ресурс xSmbShare — для настройки ресурса SMB:
Configuration SmbShare
{
Import-DscResource -ModuleName PSDesiredStateConfiguration
Import-DscResource -ModuleName xSmbShare
Node localhost
{
File CreateFolder
{
DestinationPath = 'C:\DscSmbShare'
Type = 'Directory'
Ensure = 'Present'
}
xSMBShare CreateShare
{
Name = 'DscSmbShare'
Path = 'C:\DscSmbShare'
FullAccess = 'administrator'
ReadAccess = 'myDomain\Contoso-Server$'
FolderEnumerationMode = 'AccessBased'
Ensure = 'Present'
DependsOn = '[File]CreateFolder'
}
}
}
Конфигурация создает каталог C:\DscSmbShare
, если его еще не существует, и затем использует этот каталог в качестве общего ресурса SMB. Разрешение FullAccess должно предоставляться любой учетной записи, которой необходимо записывать или удалять данные на общем ресурсе. Разрешение ReadAccess необходимо предоставить всем узлам клиента, которые получают конфигурации и ресурсы DSC из общего ресурса.
Примечание
DSC по умолчанию выполняется с системной учетной записью, поэтому у самого компьютера должен быть доступ к общему ресурсу.
Предоставление файловой системе доступа к опрашивающему клиенту
Предоставление разрешения ReadAccess клиенту узла позволяет этому узлу обращаться к SMB-ресурсу, но не к файлам или папкам в этом ресурсе. Следует явно предоставить узлам клиента доступ к папке и вложенным папкам общего ресурса SMB. Сделать это можно с помощью DSC, используя ресурс cNtfsPermissionEntry, который содержится в модуле CNtfsAccessControl. Следующая конфигурация добавляет блок cNtfsPermissionEntry, который предоставляет разрешение ReadAndExecute опрашивающему клиенту:
Configuration DSCSMB
{
Import-DscResource -ModuleName PSDesiredStateConfiguration
Import-DscResource -ModuleName xSmbShare
Import-DscResource -ModuleName cNtfsAccessControl
Node localhost
{
File CreateFolder
{
DestinationPath = 'C:\DscSmbShare'
Type = 'Directory'
Ensure = 'Present'
}
xSMBShare CreateShare
{
Name = 'DscSmbShare'
Path = 'C:\DscSmbShare'
FullAccess = 'administrator'
ReadAccess = 'myDomain\Contoso-Server$'
FolderEnumerationMode = 'AccessBased'
Ensure = 'Present'
DependsOn = '[File]CreateFolder'
}
cNtfsPermissionEntry PermissionSet1
{
Ensure = 'Present'
Path = 'C:\DscSmbShare'
Principal = 'myDomain\Contoso-Server$'
AccessControlInformation = @(
cNtfsAccessControlInformation
{
AccessControlType = 'Allow'
FileSystemRights = 'ReadAndExecute'
Inheritance = 'ThisFolderSubfoldersAndFiles'
NoPropagateInherit = $false
}
)
DependsOn = '[File]CreateFolder'
}
}
}
Размещение конфигураций и ресурсов
Сохраните все MOF-файлы конфигурации и ресурсы DSC, к которым должны обращаться клиентские узлы, в общей папке SMB.
Любой MOF-файл конфигурации должен иметь имя <ConfigurationID>.mof
, где <ConfigurationID>
— это значение свойства ConfigurationID LCM целевого узла. Дополнительные сведения о настройке опрашивающих клиентов см. в разделе Настройка опрашивающего клиента с помощью идентификатора конфигурации.
Примечание
При использовании опрашивающего SMB-сервера необходимо использовать идентификаторы конфигурации. Имена конфигураций не поддерживаются SMB.
Каждый модуль ресурса необходимо упаковать в ZIP-архив и переименовать согласно следующему шаблону: {Module Name}_{Module Version}.zip
. Например, модуль с именем xWebAdminstration с версией модуля 3.1.2.0 будет иметь имя xWebAdministration_3.2.1.0.zip
. Каждая версия модуля должна находиться в собственном ZIP-файле. Отдельные версии модуля в ZIP-файле не поддерживаются.
Перед упаковкой модулей ресурсов DSC для опрашиваемого сервера необходимо внести небольшое изменение в структуру каталогов.
Формат модулей, содержащих ресурсы DSC, в WMF 5.0 по умолчанию таков: {Module Folder}\{Module Version}\DscResources\{DSC Resource Folder}\
.
Перед упаковкой для опрашиваемого сервера просто удалите папку {Module version}
, чтобы путь стал таким: {Module Folder}\DscResources\{DSC Resource Folder}\
. Выполнив это изменение, упакуйте папку в ZIP-архив, как описано выше, и поместите ZIP-архивы в папку общего ресурса SMB.
Создание контрольной суммы MOF
MOF-файл конфигурации необходимо сопоставить с файлом контрольной суммы, чтобы LCM на целевом узле мог проверить конфигурацию. Для вычисления контрольной суммы вызовите командлет New-DSCCheckSum. Командлет принимает параметр Path
, указывающий папку, в которой располагается MOF-файл конфигурации. Командлет создает файл контрольной суммы ConfigurationMOFName.mof.checksum
, где ConfigurationMOFName
— имя MOF-файла конфигурации. Если в указанной папке есть несколько MOF-файлов конфигурации, контрольная сумма создается для каждой конфигурации в папке.
Файл контрольной суммы должен находиться в том же каталоге, что и MOF-файл конфигурации ($env:PROGRAMFILES\WindowsPowerShell\DscService\Configuration
по умолчанию), и иметь то же имя, что и у добавленного расширения .checksum
.
Примечание
Если вы измените MOF-файл конфигурации каким-либо образом, потребуется повторно создать файл контрольной суммы.
Настройка опрашивающего клиента для SMB
Чтобы определить клиент, запрашивающий конфигурации и (или) ресурсы из общей папки SMB, настройте для локального диспетчера конфигураций (LCM) клиента блоки ConfigurationRepositoryShare и ResourceRepositoryShare, указывающие общую папку для извлечения данных.
Дополнительные сведения о настройке LCM см. в разделе Настройка опрашивающего клиента с помощью идентификатора конфигурации.
Примечание
Для простоты в этом примере используется PSDscAllowPlainTextPassword, чтобы разрешить передачу пароля в формате открытого текста в параметр Credential. Сведения о более безопасной передачи учетных данных см. в разделе Параметры учетных данных в данных конфигурации. Следует указать ConfigurationID в блоке Settings метаконфигурации опрашивающего сервера SMB, даже если вы просто извлекаете ресурсы.
$secpasswd = ConvertTo-SecureString "Pass1Word" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ("TestUser", $secpasswd)
[DSCLocalConfigurationManager()]
configuration SmbCredTest
{
Node $AllNodes.NodeName
{
Settings
{
RefreshMode = 'Pull'
RefreshFrequencyMins = 30
RebootNodeIfNeeded = $true
ConfigurationID = '16db7357-9083-4806-a80c-ebbaf4acd6c1'
}
ConfigurationRepositoryShare SmbConfigShare
{
SourcePath = '\\WIN-E0TRU6U11B1\DscSmbShare'
Credential = $mycreds
}
ResourceRepositoryShare SmbResourceShare
{
SourcePath = '\\WIN-E0TRU6U11B1\DscSmbShare'
Credential = $mycreds
}
}
}
$ConfigurationData = @{
AllNodes = @(
@{
#the "*" means "all nodes named in ConfigData" so we don't have to repeat ourselves
NodeName="localhost"
PSDscAllowPlainTextPassword = $true
})
}
Благодарности
Выражаю особую благодарность:
- Майку Ф. Роббинсу, чьи записи об использовании SMB для DSC помогли в составлении этой статьи. Ссылка на его блог — Майк Ф. Роббинс.
- Сергею Николайчуку, который создал модуль cNtfsAccessControl. Исходный код этого модуля доступен по ссылке cNtfsAccessControl.
См. также раздел
Обзор Windows PowerShell Desired State Configuration
Настройка опрашивающего клиента с помощью идентификатора конфигурации