Get-Test-Set
Van toepassing op: Windows PowerShell 4.0, Windows PowerShell 5.0
PowerShell Desired State Configuration is opgebouwd rond een proces voor ophalen, testen en instellen. DSC-resources bevatten elk methoden om elk van deze bewerkingen uit te voeren. In een configuratie definieert u resourceblokken om sleutels in te vullen die parameters worden voor de methoden Ophalen, Testen en Instellen van een resource.
Dit is de syntaxis voor een serviceresourceblok. De serviceresource configureert Windows-services.
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 }]
}
De methoden Ophalen, Testen en Instellen van de serviceresource hebben parameterblokken die deze waarden accepteren.
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"
)
Notitie
De taal en methode die worden gebruikt om de resource te definiëren, bepalen hoe de methoden Ophalen, Testen en Instellen worden gedefinieerd.
Omdat de serviceresource slechts één vereiste sleutel () heeft,Name
kan een serviceblokresource zo eenvoudig zijn als:
Configuration TestConfig
{
Import-DSCResource -Name Service
Node localhost
{
Service "MyService"
{
Name = "Spooler"
}
}
}
Wanneer u de bovenstaande configuratie compileert, worden de waarden die u voor een sleutel opgeeft, opgeslagen in het .mof
bestand dat wordt gegenereerd. Zie MOF voor meer informatie.
instance of MSFT_ServiceResource as $MSFT_ServiceResource1ref
{
SourceInfo = "::5::1::Service";
ModuleName = "PsDesiredStateConfiguration";
ResourceID = "[Service]MyService";
Name = "Spooler";
ModuleVersion = "1.0";
ConfigurationName = "Test";
};
Indien toegepast, leest de Local Configuration Manager (LCM) de waarde 'Spooler' uit het .mof
bestand en geeft deze door aan de parameter Name van de methoden Get, Test en Set voor het exemplaar 'MyService' van de serviceresource.
Ophalen
Met de methode Get van een resource wordt de status van de resource opgehaald zoals deze is geconfigureerd op het doelknooppunt. Deze status wordt geretourneerd als een hashtabel. De sleutels van de hashtabel zijn de configureerbare waarden of parameters die de resource accepteert.
De methode Get wordt rechtstreeks toegewezen aan de cmdlet Get-DSCConfiguration .
Wanneer u aanroept Get-DSCConfiguration
, voert de LCM de methode Get uit van elke resource in de momenteel toegepaste configuratie. De LCM gebruikt de sleutelwaarden die zijn opgeslagen in het .mof
bestand als parameters voor elk corresponderend resource-exemplaar.
Dit is voorbeelduitvoer van een serviceresource waarmee de Spooler-service wordt geconfigureerd.
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
De uitvoer toont de huidige waarde-eigenschappen die kunnen worden geconfigureerd door de 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 }]
}
Testen
De testmethode van een resource bepaalt of het doelknooppunt momenteel compatibel is met de gewenste status van de resource. De testmethode retourneert $true
of $false
alleen om aan te geven of het knooppunt compatibel is. Wanneer u Test-DSCConfiguration aanroept, roept de LCM de testmethode aan van elke resource in de momenteel toegepaste configuratie. De LCM gebruikt de sleutelwaarden die zijn opgeslagen in het bestand .mof als parameters voor elk corresponderend resource-exemplaar.
Als het resultaat van de test van een afzonderlijke resource is, retourneert $false
$false
dit Test-DSCConfiguration
om aan te geven dat het knooppunt niet compatibel is. Als alle testmethoden van de resource retourneren $true
, Test-DSCConfiguration
wordt geretourneerd $true
om aan te geven dat het knooppunt compatibel is.
Test-DSCConfiguration
True
Vanaf PowerShell 5.0 is de parameter Detailed toegevoegd. Gedetailleerde oorzaken Test-DSCConfiguration
opgeven voor het retourneren van een object met verzamelingen resultaten voor compatibele en niet-compatibele resources.
Test-DSCConfiguration -Detailed
PSComputerName ResourcesInDesiredState ResourcesNotInDesiredState InDesiredState
-------------- ----------------------- -------------------------- --------------
localhost {[Service]Spooler} True
Zie Test-DSCConfiguration voor meer informatie.
Instellen
De methode Set van een resource probeert af te dwingen dat het knooppunt voldoet aan de gewenste status van de resource. De methode Set is bedoeld als idempotent, wat betekent dat Set meerdere keren kan worden uitgevoerd en altijd hetzelfde resultaat zonder fouten krijgt. Wanneer u Start-DSCConfiguration uitvoert, doorloopt de LCM elke resource in de momenteel toegepaste configuratie. De LCM haalt sleutelwaarden voor het huidige resource-exemplaar op uit het bestand .mof en gebruikt deze als parameters voor de testmethode . Als de testmethode retourneert $true
, is het knooppunt compatibel met de huidige resource en wordt de methode Set overgeslagen. Als de test retourneert $false
, is het knooppunt niet-compatibel. De LCM geeft de sleutelwaarden van het resource-exemplaar door als parameters aan de methode Set van de resource, zodat het knooppunt wordt hersteld naar naleving.
Door de parameters Uitgebreid en Wachten op te geven, kunt u de voortgang van de Start-DSCConfiguration
cmdlet watch. In dit voorbeeld is het knooppunt al compatibel. De Verbose
uitvoer geeft aan dat de methode Set is overgeslagen.
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