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 .mof
Configuration 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-DSCConfiguration
LCM 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ą $true
wartość , 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 $true
wartość , węzeł jest zgodny z bieżącym zasobem, a metoda Set zostanie pominięta. Jeśli test zwróci $false
wartość , 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