Udostępnij za pośrednictwem


Get-Test-Set

Dotyczy: Windows PowerShell 4.0, Windows PowerShell 5.0

Program PowerShell Desired State Configuration jest konstruowany wokół procesu Get, Test i Set. Zasoby DSC każdy zawiera metody do ukończenia każdej z tych operacji. W konfiguracji zdefiniujesz bloki zasobów, aby wypełnić klucze, które stają się parametrami dla metod Get, Test i Set zasobu.

Jest to składnia bloku zasobów usługi . Zasób usługi konfiguruje usługi systemu 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 }]
}

Metody Get, Test i Set zasobu usługi będą miały bloki parametrów, które akceptują te wartości.

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

Uwaga

Język i metoda używana do definiowania zasobu określa sposób definiowania metod Get, Test i Set .

Ponieważ zasób usługi ma tylko jeden wymagany klucz (Name), zasób bloku usługi może być tak prosty, jak w następujący sposób:

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

Po skompilowaniu powyższej konfiguracji wartości określone dla klucza są przechowywane w .mof wygenerowanym pliku. Aby uzyskać więcej informacji, zobacz MOF.

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

ModuleVersion = "1.0";

 ConfigurationName = "Test";

};

Po zastosowaniu .mofConfiguration Manager local (LCM) odczytuje wartość "Bufor" z pliku i przekaże ją do parametru Name dla wystąpienia "MyService" zasobu usługi.

Get

Metoda Get zasobu pobiera stan zasobu, ponieważ jest on skonfigurowany w docelowym węźle docelowym. Ten stan jest zwracany jako tabela skrótu. Klucze tabeli skrótu będą konfigurowalnymi wartościami lub parametrami, które akceptuje zasób.

Metoda Get mapuje bezpośrednio na polecenie cmdlet Get-DSCConfiguration . Po wywołaniu metody Get-DSCConfigurationLCM uruchamia metodę Get każdego zasobu w aktualnie zastosowanej konfiguracji. Narzędzie LCM używa wartości kluczy przechowywanych w .mof pliku jako parametrów dla każdego odpowiedniego wystąpienia zasobu.

Jest to przykładowe dane wyjściowe z zasobu usługi , który konfiguruje usługę "Bufor".

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

Dane wyjściowe przedstawiają właściwości bieżącej wartości konfigurowalne przez zasób usługi .

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 }]
}

Testowanie

Metoda Test zasobu określa, czy węzeł docelowy jest obecnie zgodny z żądanym stanem zasobu. Metoda Test zwraca $true wartość lub $false tylko w celu wskazania, czy węzeł jest zgodny. Po wywołaniu polecenia Test-DSCConfiguration LCM wywołuje metodę Test każdego zasobu w aktualnie zastosowanej konfiguracji. Narzędzie LCM używa wartości kluczy przechowywanych w pliku mof jako parametrów dla każdego odpowiedniego wystąpienia zasobu.

Jeśli wynik testu dowolnego zasobu pojedynczego to $false, Test-DSCConfiguration zwraca wartość $false wskazującą, że węzeł nie jest zgodny. Jeśli wszystkie metody testowe zasobu zwracają $truewartość , zwraca wartość $true , Test-DSCConfiguration aby wskazać, że węzeł jest zgodny.

Test-DSCConfiguration
True

Począwszy od programu PowerShell 5.0, dodano parametr Szczegółowy . Określanie szczegółowych przyczyn Test-DSCConfiguration zwracania obiektu zawierającego kolekcje wyników dla zgodnych i niezgodnych zasobów.

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

Aby uzyskać więcej informacji, zobacz Test-DSCConfiguration.

Set

Metoda Set zasobu próbuje wymusić zgodność węzła z żądanym stanem zasobu. Metoda Set ma być idempotentna, co oznacza, że zestaw może być uruchamiany wiele razy i zawsze uzyskać ten sam wynik bez błędów. Po uruchomieniu polecenia Start-DSCConfiguration narzędzie LCM przechodzi przez każdy zasób w aktualnie zastosowanej konfiguracji. Narzędzie LCM pobiera wartości klucza dla bieżącego wystąpienia zasobu z pliku ".mof" i używa ich jako parametrów metody Test . Jeśli metoda Test zwraca $truewartość , węzeł jest zgodny z bieżącym zasobem, a metoda Set zostanie pominięta. Jeśli test zwróci $falsewartość , węzeł jest niezgodny. Narzędzie LCM przekazuje wartości klucza wystąpienia zasobu jako parametry do metody Set zasobu, przywracając zgodność węzła.

Określając parametry Pełne i Oczekiwanie, można watch postęp Start-DSCConfiguration polecenia cmdlet. W tym przykładzie węzeł jest już zgodny. Dane Verbose wyjściowe wskazują, że metoda Set została pominięta.

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

Zobacz też