Поделиться через


Ресурсы DSC

Обзор

Ресурсы DSC предоставляют стандартизированный интерфейс для управления параметрами системы. Ресурс DSC определяет свойства, которые можно управлять и содержать код PowerShell, который Invoke-DscResource вызывает "сделать это так".

Ресурс DSC может моделировать что-то универсальное как файл или как определенный параметр сервера IIS. Группы связанных ресурсов DSC объединяются в модули PowerShell. Модули предоставляют переносимый, версияемый пакет для ресурсов DSC и включают метаданные и документацию по ним.

Каждый ресурс DSC имеет схему, которая определяет синтаксис, необходимый для использования ресурса DSC с Invoke-DscResource или в конфигурации. Схема ресурса DSC определяется следующими способами:

  • <Resource Name>.psm1 файл: ресурсы DSC на основе классов определяют свою схему в определении класса. Элементы синтаксиса обозначаются как свойства класса. Дополнительные сведения см. в about_Classes.
  • Schema.Mof файл: ресурсы DSC на основе MOF определяют свою схему в файле schema.mof с помощью формата управляемых объектов.

Чтобы получить синтаксис ресурса DSC, используйте командлет Get-DSCResource с параметром синтаксиса. Это похоже на использование Get-Command с параметром синтаксиса для получения синтаксиса командлета. В выходных данных показан шаблон, используемый для блока ресурсов DSC в конфигурации DSC.

Get-DscResource -Syntax Service
Service [String] #ResourceName
{
    Name = [string]
    [BuiltInAccount = [string]{ LocalService | LocalSystem | NetworkService }]
    [Credential = [PSCredential]]
    [Dependencies = [string[]]]
    [DependsOn = [string[]]]
    [Description = [string]]
    [DesktopInteract = [bool]]
    [DisplayName = [string]]
    [Ensure = [string]{ Absent | Present }]
    [Path = [string]]
    [PsDscRunAsCredential = [PSCredential]]
    [StartupTimeout = [UInt32]]
    [StartupType = [string]{ Automatic | Disabled | Manual }]
    [State = [string]{ Ignore | Running | Stopped }]
    [TerminateTimeout = [UInt32]]
}

Как и синтаксис командлета, ключи в квадратных скобках являются необязательными. Типы указывают тип данных, который ожидает каждый ключ.

Чтобы убедиться, что служба Spooler запущена:

$SharedDscParameters = @{
    Name = 'Service'
    ModuleName = 'PSDscResources'
    Property = @{
        Name  = 'Spooler'
        State = 'Running'
    }
}
$TestResult = Invoke-DscResource -Method Test @SharedDscParameters
if ($TestResult.InDesiredState) {
    Write-Host -ForegroundColor Cyan -Object 'Already in desired state.'
} else {
    Write-Host -ForegroundColor Magenta -Object 'Enforcing desired state.'
    Invoke-DscResource -Method Set @SharedDscParameters
}

Переменная $SharedDscParameters — это хэш-таблица, содержащая параметры, используемые при вызове теста и Методы Set ресурса с Invoke-DscResource. Первый вызов Invoke-DscResource использует метод теста для проверки того, запущена ли служба Spooler и сохраняет результат в переменной $TestResult.

Следующий шаг зависит от того, находится ли служба в требуемом состоянии. Рекомендуется всегда проверять требуемое состояние перед применением и вызывать только метод Set при необходимости. В примере скрипт записывает сообщение в консоль о том, находится ли ресурс DSC в нужном состоянии. Затем, если служба не запущена, она вызывает Invoke-DscResource с методом set Set для принудительного применения требуемого состояния.