Get-Test-Set

適用先: Windows PowerShell 4.0、Windows PowerShell 5.0

PowerShell の Desired State Configuration は、GetTest、および Set プロセスを中心に構成されています。 DSC の各リソースには、これらの各操作を完了するためのメソッドが含まれています。 「構成」では、リソースの GetTest、および 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 }]
}

Service リソースの GetTest、および Set メソッドには、その値を受け入れるパラメーター ブロックがあります。

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"
)

Note

リソースの定義に使用される言語とメソッドによって、GetTest、および Set の各メソッドの定義方法が決まります。

Service リソースには必要なキーが 1 つしかないため (Name)、 Service ブロック リソースは次のように単純になる可能性があります。

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

上記の Configuration をコンパイルすると、キーに指定した値は、生成された .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" が読み取られ、それが Service リソースの "MyService" インスタンスの Get メソッド、Test メソッド、Set メソッドの Name パラメーターに渡されます。

取得

リソースの Get メソッドでは、ターゲット ノードに構成されているリソースの状態を取得します。 この状態はハッシュテーブルとして返されます。 ハッシュテーブルのキーは、リソースが受け入れる構成可能な値、つまりパラメーターになります。

Get メソッドは、Get-DSCConfiguration コマンドレットに直接マップします。 Get-DSCConfiguration を呼び出すと、LCM では現在適用されている構成内の各リソースの Get メソッドを実行します。 LCM では、.mof ファイルに格納されているキー値を、対応する各リソース インスタンスへのパラメーターとして使用します。

これは、"Spooler" サービスを構成する Service リソースの出力例です。

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 メソッドは、Node が準拠しているかどうかのみを示す $true または $false を返します。 Test-DSCConfiguration を呼び出すと、LCM では現在適用されている構成内の各リソースの Test メソッドを呼び出します。 LCM は、".mof" ファイルに格納されているキー値を、対応する各リソース インスタンスへのパラメーターとして使用します。

個々のリソースの Test の結果が $false の場合、Test-DSCConfiguration は Node が準拠していないことを示す $false を返します。 すべてのリソースの Test メソッドが $true を返す場合、Test-DSCConfiguration は Node が準拠していることを示す $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 メソッドは、Node がリソースの "望ましい状態" に準拠した状態になるように試行します。 Set メソッドはべき等であるように意図されています。つまり、Set を複数回実行し、エラーなしで常に同じ結果を取得することができます。 Start-DSCConfiguration を実行すると、LCM では現在適用されている構成内の各リソースが循環処理されます。 LCM では ".mof" ファイルから現在のリソース インスタンスのキー値を取得し、それらを Test メソッドのパラメーターとして使用します。 Test メソッドが $true を返した場合、Node は現在のリソースに準拠しているため、Set メソッドはスキップされます。 Test$false を返した場合、Node は準拠していません。 LCM はリソース インスタンスのキー値をパラメーターとしてリソースの Set メソッドに渡し、Node を準拠状態に復元します。

Verbose パラメーターと Wait パラメーターを指定することで、Start-DSCConfiguration コマンドレットの進行状況を確認できます。 この例では、Node は既に準拠しています。 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

関連項目