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


Методы Get, Test, Set

Область применения: Windows PowerShell 4.0, Windows PowerShell 5.0

Настройка требуемого состояния (DSC) PowerShell основана на процессе получения, тестирования и настройки. Во всех ресурсах DSC содержатся методы выполнения каждой из этих операций. В конфигурации необходимо определить блоки ресурсов, чтобы заполнить ключи, которые становятся параметрами для методов ресурса Get, Test и Set.

Далее представлен синтаксис для блока ресурса Service. Ресурс Service настраивает службы Windows.

Service [String] #ResourceName
{
    Name = [string]
    [BuiltInAccount = [string]{ LocalService | LocalSystem | NetworkService }]
    [Credential = [PSCredential]]
    [Dependencies = [string[]]]
    [DependsOn = [string[]]]
    [Description = [string]]
    [DisplayName = [string]]
    [Ensure = [string]{ Absent | Present }]
    [Path = [string]]
    [PsDscRunAsCredential = [PSCredential]]
    [StartupType = [string]{ Automatic | Disabled | Manual }]
    [State = [string]{ Running | Stopped }]
}

Методы Get, Test и Set ресурса Service будут содержать блоки параметров, которые принимают эти значения.

param
(
    [parameter(Mandatory = $true)]
    [ValidateNotNullOrEmpty()]
    [System.String]
    $Name,

    [System.String]
    [ValidateSet("Automatic", "Manual", "Disabled")]
    $StartupType,

    [System.String]
    [ValidateSet("LocalSystem", "LocalService", "NetworkService")]
    $BuiltInAccount,

    [System.Management.Automation.PSCredential]
    [ValidateNotNull()]
    $Credential,

    [System.String]
    [ValidateSet("Running", "Stopped")]
    $State="Running",

    [System.String]
    [ValidateNotNullOrEmpty()]
    $DisplayName,

    [System.String]
    [ValidateNotNullOrEmpty()]
    $Description,

    [System.String]
    [ValidateNotNullOrEmpty()]
    $Path,

    [System.String[]]
    [ValidateNotNullOrEmpty()]
    $Dependencies,

    [System.String]
    [ValidateSet("Present", "Absent")]
    $Ensure="Present"
)

Примечание

Язык и метод, используемые для определения ресурса, указывают, как методы Get, Test и Set будут заданы.

Так как у ресурса Service есть только один обязательный ключ (Name), блок ресурса Service может содержать всего пару строк:

Configuration TestConfig
{
    Import-DSCResource -Name Service
    Node localhost
    {
        Service "MyService"
        {
            Name = "Spooler"
        }
    }
}

Если скомпилировать вышеуказанную конфигурацию, значения, указанные для ключа, сохранятся в сгенерированном файле .mof. Дополнительные сведения о MOF-файле.

instance of MSFT_ServiceResource as $MSFT_ServiceResource1ref
{
SourceInfo = "::5::1::Service";
 ModuleName = "PsDesiredStateConfiguration";
 ResourceID = "[Service]MyService";
 Name = "Spooler";

ModuleVersion = "1.0";

 ConfigurationName = "Test";

};

При использовании этого кода локальный диспетчер конфигураций (LCM) считывает из файла .mof значение Spooler и передает его в параметр Name методов Get, Test и Set для экземпляра MyService ресурса Service.

Получить

Метод ресурса Get извлекает состояние ресурса, настроенное на целевом узле. Это состояние возвращается в виде хэш-таблицы. Ключами хэш-таблицы будут настраиваемые значения или параметры, принимаемые ресурсом.

Метод Get отображается непосредственно в командлете Get-DSCConfiguration. При вызове командлета Get-DSCConfiguration LCM запускает метод Get для каждого ресурса в текущей применяемой конфигурации. LCM использует значения ключей, хранящиеся в файле .mof, в качестве параметров для каждого соответствующего экземпляра ресурса.

Ниже приведен пример выходных данных для ресурса Service, который настраивает службу Spooler.

ConfigurationName    : Test
DependsOn            :
ModuleName           : PsDesiredStateConfiguration
ModuleVersion        : 1.1
PsDscRunAsCredential :
ResourceId           : [Service]Spooler
SourceInfo           :
BuiltInAccount       : LocalSystem
Credential           :
Dependencies         : {RPCSS, http}
Description          : This service spools print jobs and handles interaction with the printer.  If you turn off
                       this service, you won't be able to print or see your printers.
DisplayName          : Print Spooler
Ensure               :
Name                 : Spooler
Path                 : C:\WINDOWS\System32\spoolsv.exe
StartupType          : Automatic
State                : Running
Status               :
PSComputerName       :
CimClassName         : MSFT_ServiceResource

В выходных данных содержатся текущие свойства значений, настраиваемые ресурсом Service.

Service [String] #ResourceName
{
    Name = [string]
    [BuiltInAccount = [string]{ LocalService | LocalSystem | NetworkService }]
    [Credential = [PSCredential]]
    [Dependencies = [string[]]]
    [DependsOn = [string[]]]
    [Description = [string]]
    [DisplayName = [string]]
    [Ensure = [string]{ Absent | Present }]
    [Path = [string]]
    [PsDscRunAsCredential = [PSCredential]]
    [StartupType = [string]{ Automatic | Disabled | Manual }]
    [State = [string]{ Running | Stopped }]
}

Тест

Метод ресурса Test определяет, соответствует ли сейчас целевой узел требуемому состоянию ресурса. Метод Test возвращает значение $true или $false только, чтобы указать, соответствует ли узел. При вызове командлета Test-DSCConfiguration LCM вызывает метод Test для каждого ресурса в текущей применяемой конфигурации. LCM использует значения ключей, хранящиеся в MOF-файле, в качестве параметров для каждого соответствующего экземпляра ресурса.

Если в результате применения какого-либо отдельного метода Test ресурса возвращается значение $false, командлет Test-DSCConfiguration возвращает значение $false, указывая, что узел не соответствует текущему ресурсу. Если все методы Test ресурса возвращают значение $true, Test-DSCConfiguration возвращает значение $true, чтобы указать, что узел соответствует текущему ресурсу.

Test-DSCConfiguration
True

Начиная с PowerShell 5.0, был добавлен параметр Detailed. Если указать параметр Detailed, это приведет к тому, что командлет Test-DSCConfiguration вернет объект, содержащий коллекции результатов для совместимых и несовместимых ресурсов.

Test-DSCConfiguration -Detailed
PSComputerName  ResourcesInDesiredState        ResourcesNotInDesiredState     InDesiredState
--------------  -----------------------        --------------------------     --------------
localhost       {[Service]Spooler}                                            True

Дополнительные сведения о командлете Test-DSCConfiguration.

Присвойте параметру

Метод Set ресурса пытается сделать узел совместимым с требуемым состоянием ресурса. Метод Set должен быть идемпотентным. Это означает, что при любом запуске Set всегда будет получен один и тот же результат без ошибок. При запуске командлета Start-DSCConfiguration LCM циклически перебирает каждый ресурс в текущей применяемой конфигурации. LCM извлекает значения ключей текущего экземпляра ресурса из MOF-файла и использует их как параметры метода Test. Если метод Test возвращает значение $true, узел соответствует текущему ресурсу, а метод Set не вызывается. Если Test возвращает значение $false, значит, узел не соответствует текущему ресурсу. LCM передает значения ключей экземпляра ресурса в качестве параметров методу Set ресурса, восстанавливая соответствие узла.

Указав параметры Verbose и Wait, можно наблюдать за ходом выполнения командлета Start-DSCConfiguration. В этом примере узел уже соответствует текущему ресурсу. Параметр Verbose в выходных данных указывает, что метод Set не вызывался.

PS> Start-DSCConfiguration -Verbose -Wait -UseExisting

VERBOSE: Perform operation 'Invoke CimMethod' with following parameters, ''methodName' =
ApplyConfiguration,'className' = MSFT_DSCLocalConfigurationManager,'namespaceName' =
root/Microsoft/Windows/DesiredStateConfiguration'.
VERBOSE: An LCM method call arrived from computer SERVER01 with user sid
S-1-5-21-124525095-708259637-1543119021-1282804.
VERBOSE: [SERVER01]:                            [] Starting consistency engine.
VERBOSE: [SERVER01]:                            [] Checking consistency for current configuration.
VERBOSE: [SERVER01]:                            [DSCEngine] Importing the module
C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\PSDesiredStateConfiguration\DscResources\MSFT_ServiceResource\MSFT
_ServiceResource.psm1 in force mode.
VERBOSE: [SERVER01]: LCM:  [ Start  Resource ]  [[Service]Spooler]
VERBOSE: [SERVER01]: LCM:  [ Start  Test     ]  [[Service]Spooler]
VERBOSE: [SERVER01]:                            [[Service]Spooler] Importing the module MSFT_ServiceResource in
force mode.
VERBOSE: [SERVER01]: LCM:  [ End    Test     ]  [[Service]Spooler]  in 0.2540 seconds.
VERBOSE: [SERVER01]: LCM:  [ Skip   Set      ]  [[Service]Spooler]
VERBOSE: [SERVER01]: LCM:  [ End    Resource ]  [[Service]Spooler]
VERBOSE: [SERVER01]:                            [] Consistency check completed.
VERBOSE: Operation 'Invoke CimMethod' complete.
VERBOSE: Time taken for configuration job to complete is 1.379 seconds

См. также раздел