Partager via


Get-Test-Set

S’applique à : Windows PowerShell 4.0, Windows PowerShell 5.0

PowerShell Desired State Configuration est construit autour d’un processus Get, Test et Set. Chaque ressource DSC contient des méthodes pour effectuer chacune de ces opérations. Dans une configuration, vous définissez des blocs de ressources pour renseigner des clés qui deviennent des paramètres pour les méthodes Get, Test et Set d’une ressource.

Voici la syntaxe d’un bloc de ressources Service. La ressource Service configure les services 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 }]
}

Les méthodes Get, Test et Set de la ressource Service incluront des blocs de paramètres qui acceptent ces valeurs.

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

Notes

Le langage et la méthode utilisés pour définir la ressource déterminent comment les méthodes Get, Test et Set seront définies.

Comme la ressource Service contient uniquement une clé requise (Name), une ressource de bloc Service peut être aussi simple que cela :

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

Lorsque vous compilez la configuration ci-dessus, les valeurs que vous spécifiez pour une clé sont stockées dans le fichier .mof généré. Pour plus d’informations, consultez MOF.

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

ModuleVersion = "1.0";

 ConfigurationName = "Test";

};

Lorsqu’il est utilisé, le gestionnaire de configuration local lit la valeur « Spooler » du fichier .mof et la transmet au paramètre Name des méthodes Get, Test et Set pour l’instance « MyService » de la ressource Service.

Obtenir

La méthode Get d’une ressource récupère l’état de la ressource telle qu’elle est configurée sur le nœud cible. Cet état est retourné sous la forme d’une table de hachage. Les clés de la table de hachage sont les valeurs configurables, ou paramètres, que la ressource accepte.

La méthode Get est directement mappée à l’applet de commande Get-DSCConfiguration. Lorsque vous appelez Get-DSCConfiguration, le LCM exécute la méthode Get de chaque ressource dans la configuration actuellement appliquée. Le LCM utilise les valeurs de clé stockées dans le fichier .mof comme paramètres pour chaque instance de ressource correspondante.

Voici un exemple de résultat provenant d’une ressource Service qui configure le service « Spooler ».

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

Le résultat indique les propriétés de valeurs actuelles configurables par la ressource Service.

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

La méthode Test d’une ressource détermine si le nœud cible est actuellement conforme à l’état souhaité de la ressource. La méthode Test retourne $true ou $false uniquement pour indiquer si le nœud est conforme. Lorsque vous appelez Test-DSCConfiguration, le LCM appelle la méthode Test de chaque ressource dans la configuration actuellement appliquée. Le LCM utilise les valeurs de clé stockées dans le fichier « .mof » comme paramètres pour chaque instance de ressource correspondante.

Si le résultat du test d’une ressource individuelle affiche $false, Test-DSCConfiguration retourne $false indiquant que le nœud n’est pas conforme. Si toutes les méthodes Test d’une ressource retournent $true, Test-DSCConfiguration retourne $true pour indiquer que le nœud est conforme.

Test-DSCConfiguration
True

À compter de PowerShell 5.0, le paramètre Detailed a été ajouté. En spécifiant Detailed, Test-DSCConfiguration retourne un objet contenant des ensembles de résultats pour les ressources conformes et non conformes.

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

Pour plus d’informations, consultez Test-DSCConfiguration.

Définissez

La méthode Set d’une ressource tente de forcer le nœud à être conforme avec l’état souhaité de la ressource. La méthode Set est prévue pour être idempotente, ce qui signifie que Set peut être exécutée plusieurs fois et générer toujours le même résultat sans erreurs. Lorsque vous exécutez Start-DSCConfiguration, le LCM est appliqué en boucle sur chaque ressource dans la configuration actuellement appliquée. Le LCM récupère les valeurs des clés pour l’instance actuelle de la ressource à partir du fichier « .mof » et les utilise comme paramètres pour la méthode Test. Si la méthode Test retourne $true, le nœud est conforme à la ressource actuelle et la méthode Set est ignorée. Si le test retourne $false, le nœud n’est pas conforme. Le LCM transmet les valeurs de clés de l’instance la ressource en tant que paramètres à la méthode Set de la ressource, restaurant ainsi la conformité du nœud.

En spécifiant les paramètres Verbose et Wait, vous pouvez surveiller la progression de l’applet de commande Start-DSCConfiguration. Dans cet exemple, le nœud est déjà conforme. Le résultat Verbose indique que la méthode Set a été ignorée.

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

Voir aussi