다음을 통해 공유


Get-Test-Set

적용 대상: Windows PowerShell 4.0, Windows PowerShell 5.0

PowerShell Desired State Configuration은 Get, TestSet 프로세스 주위에 생성됩니다. DSC 리소스에는 각각 이와 같은 각 작업을 완료하는 메서드가 포함됩니다. 구성에서 리소스 블록을 정의하여 리소스의 Get, TestSet 메서드에 대한 매개 변수가 되는 키를 입력합니다.

이 구문은 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 리소스의 Get, TestSet 메서드에는 이 값을 허용하는 매개 변수 블록이 포함됩니다.

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, TestSet 메서드를 정의하는 방법이 결정됩니다.

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” 값을 읽고 Service 리소스의 “MyService” 인스턴스에 대한 Get, TestSetName 매개 변수에 해당 값을 전달합니다.

가져오기

리소스의 Get 메서드는 대상 노드에서 구성되어 있는 리소스의 상태를 검색합니다. 이 상태는 해시 테이블로 반환됩니다. 해시 테이블의 키는 구성 가능한 값이거나 리소스가 허용하는 매개 변수입니다.

Get 메서드는 Get-DSCConfiguration cmdlet에 직접 매핑됩니다. 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 메서드는 $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 메서드는 멱등성(idempotent)이 되어야 합니다. 이는 Set이 여러 번 실행되고 오류 없이 항상 동일한 결과를 가져올 수 있음을 의미합니다. Start-DSCConfiguration을 실행하면 LCM은 현재 적용된 구성에서 각 리소스를 순환합니다. LCM은 “.mof” 파일에서 현재 리소스 인스턴스의 키 값을 검색하고 Test 메서드의 매개 변수로 이 값을 사용합니다. Test 메서드가 $true를 반환하면 노드는 현재 리소스를 준수하고 Set 메서드를 건너뜁니다. Test$false를 반환하면 노드는 비준수 상태입니다. LCM은 리소스 인스턴스의 키 값을 매개 변수로 리소스의 Set 메서드에 전달하여 노드를 준수 상태로 복원합니다.

VerboseWait 매개 변수를 지정하여 Start-DSCConfiguration cmdlet의 진행 상태를 확인할 수 있습니다. 이 예제에서 노드는 이미 준수 상태입니다. 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

참조