取得 -Test-Set

適用対象: Windows PowerShell 4.0、Windows PowerShell 5.0

PowerShell の望ましい状態構成は、 GetTestおよび Set プロセスを中心に構築されます。 DSC リソース には、それぞれ、これらの各操作を完了するためのメソッドが含まれています。 構成では、リソースの GetTestおよび Set メソッドのパラメーターとなるキーを入力するリソースブロックを定義します。

これは、 サービス ・リソース・ブロックの構文です。 サービス リソースは、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"
)

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

サービス リソースには必要なキー (Name) が 1 つしかないため、サービス ブロック リソースは次のように単純にすることができます。

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" を読み取り、Service リソースの "MyService" インスタンスの GetTestおよび Set メソッドの Name パラメーターに渡します。

取得

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

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

これは、"スプーラー" サービスを構成する サービス リソースからの出力例です。

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

個々のリソースの テスト の結果が $falseの場合、 Test-DSCConfiguration ノードが準拠していないことを示す $false が返されます。 すべてのリソースの テスト メソッドが $trueを返す場合、 Test-DSCConfiguration ノードが準拠していることを示すために $true を返します。

Test-DSCConfiguration
True

PowerShell 5.0 以降では、 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 を返す場合、Node は現在のリソースに準拠しており、Set メソッドはスキップされます。 テスト$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

こちらも参照ください