Delen via


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

Zie ook