Get-Test-Set
Platí pro: Windows PowerShell 4.0, Windows PowerShell 5.0
Desired State Configuration PowerShellu je vytvořený kolem procesů Get, Test a Set. Každý z prostředků DSC obsahuje metody pro dokončení každé z těchto operací. V konfiguraci definujete bloky prostředků, které vyplní klíče, které se stanou parametry pro metody Get, Test a Set prostředku.
Toto je syntaxe bloku prostředků služby . Prostředek služby konfiguruje služby Systému 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 a Set prostředku služby budou obsahovat bloky parametrů, které tyto hodnoty přijímají.
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"
)
Poznámka
Jazyk a metoda použitá k definování prostředku určuje, jak budou definovány metody Get, Test a Set .
Vzhledem k tomu, že prostředek služby má pouze jeden požadovaný klíč (Name
), prostředek bloku služby může být stejně jednoduchý jako tento:
Configuration TestConfig
{
Import-DSCResource -Name Service
Node localhost
{
Service "MyService"
{
Name = "Spooler"
}
}
}
Při kompilaci výše uvedené konfigurace se hodnoty zadané pro klíč uloží do .mof
vygenerovaného souboru. Další informace najdete v tématu MOF.
instance of MSFT_ServiceResource as $MSFT_ServiceResource1ref
{
SourceInfo = "::5::1::Service";
ModuleName = "PsDesiredStateConfiguration";
ResourceID = "[Service]MyService";
Name = "Spooler";
ModuleVersion = "1.0";
ConfigurationName = "Test";
};
Když se použije, místní Configuration Manager (LCM) přečte ze souboru hodnotu "Služba zařazování" .mof
a předá ji do parametru Name metod Get, Test a Set pro instanci MyService prostředku služby.
Get
Metoda Get prostředku načte stav prostředku tak, jak je nakonfigurovaný na cílovém uzlu. Tento stav se vrátí jako zatřiďovací tabulka. Klíči hashtable budou konfigurovatelné hodnoty neboli parametry, které prostředek přijímá.
Metoda Get se mapuje přímo na rutinu Get-DSCConfiguration .
Když zavoláte Get-DSCConfiguration
, LCM spustí metodu Get pro každý prostředek v aktuálně použité konfiguraci. LCM používá hodnoty klíčů uložené v .mof
souboru jako parametry pro každou odpovídající instanci prostředku.
Toto je ukázkový výstup z prostředku služby , který konfiguruje službu zařazování.
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
Výstup zobrazuje vlastnosti aktuální hodnoty konfigurovatelné prostředkem služby .
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
Metoda Test prostředku určuje, jestli cílový uzel aktuálně vyhovuje požadovanému stavu prostředku. Metoda Test vrátí $true
nebo $false
pouze k označení, zda uzel vyhovuje předpisům. Při volání Test-DSCConfiguration volá LCM metodu Test každého prostředku v aktuálně použité konfiguraci. LCM používá hodnoty klíčů uložené v souboru ".mof" jako parametry pro každou odpovídající instanci prostředku.
Pokud je $false
výsledek testu libovolného jednotlivého prostředku , Test-DSCConfiguration
vrátí hodnotu $false
označující, že uzel není kompatibilní. Pokud všechny metody Test prostředku vrátí $true
hodnotu , Test-DSCConfiguration
vrátí hodnotu $true
označující, že uzel vyhovuje předpisům.
Test-DSCConfiguration
True
Od PowerShellu 5.0 se přidal parametr Detailed . Určení podrobných příčin Test-DSCConfiguration
pro vrácení objektu obsahujícího kolekce výsledků pro vyhovující a nevyhovující prostředky.
Test-DSCConfiguration -Detailed
PSComputerName ResourcesInDesiredState ResourcesNotInDesiredState InDesiredState
-------------- ----------------------- -------------------------- --------------
localhost {[Service]Spooler} True
Další informace najdete v tématu Test-DSCConfiguration.
Set
Metoda Set prostředku se pokusí vynutit, aby uzel odpovídal požadovanému stavu prostředku. Metoda Set je určena jako idempotentní, což znamená, že set lze spustit vícekrát a vždy získat stejný výsledek bez chyb. Když spustíte Start-DSCConfiguration, LCM prochází každý prostředek v aktuálně použité konfiguraci. LCM načte hodnoty klíče pro aktuální instanci prostředku ze souboru ".mof" a použije je jako parametry pro metodu Test . Pokud metoda Test vrátí $true
, uzel je kompatibilní s aktuálním prostředkem a metoda Set se přeskočí. Pokud test vrátí $false
, uzel nedodržuje předpisy. LCM předá klíčové hodnoty instance prostředku jako parametry do metody Set prostředku a obnoví node do dodržování předpisů.
Zadáním parametrů Verbose a Wait můžete watch průběh rutinyStart-DSCConfiguration
. V tomto příkladu je uzel již kompatibilní. Výstup Verbose
označuje, že metoda Set byla vynechána.
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