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


Ресурсы DSC

Общие сведения

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

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

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

  • <Resource Name>.psm1 file: ресурсы DSC на основе классов определяют свою схему в определении класса. Элементы синтаксиса обозначаются как свойства класса. Дополнительные сведения см. в статье About Classes and Desired State Configuration (О классах и настройке требуемого состояния).
  • Schema.Moffile: ресурсы DSC на основе MOF определяют свою схему в файле с помощью формата управляемогоschema.mof объекта.

Чтобы получить синтаксис для ресурса DSC, используйте командлет Get-DSCResource с параметром Syntax . Это похоже на использование Командлета 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 представляет собой хэш-таблицу, содержащую параметры, используемые при вызове методов Test и Set ресурса с Invoke-DscResource. Первый вызов использует Invoke-DscResource метод Test , чтобы проверить, запущена ли Spooler служба, и сохраняет результат в переменной $TestResult .

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