Get-Test-Set

Si applica a: Windows PowerShell 4.0, Windows PowerShell 5.0

La configurazione dello stato desiderato di PowerShell è costruita su un processo Get, Test e Set. Le risorse DSC contengono ciascuna i metodi per completare ognuna di queste operazioni. In una Configurazione vengono definiti blocchi di risorse in cui inserire chiavi che diventano i parametri per i metodi Get, Test e Set di una risorsa.

Questa è la sintassi per un blocco di risorse Service. La risorsa Service configura i servizi di 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 }]
}

I metodi Get, Test end Set della risorsa Service avranno blocchi di parametri che accettano questi valori.

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

Nota

Il linguaggio e il metodo usati per definire la risorsa determinano come definire i metodi Get, Test e Set.

Poiché la risorsa Service ha solo una chiave necessaria (Name), un blocco di risorse Service può essere semplice come il seguente:

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

Quando si compila la configurazione precedente, i valori specificati per una chiave vengono archiviati nel file .mof generato. Per altre informazioni, vedere MOF.

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

ModuleVersion = "1.0";

 ConfigurationName = "Test";

};

Quando applicata, Gestione configurazione locale leggerà il valore "Spooler" dal file .mof e lo passerà al parametro Name dei metodi Get, Test e Set per l'istanza "MyService" della risorsa Service.

Recupero

Il metodo Get di una risorsa recupera lo stato della risorsa così come è configurata nel nodo di destinazione. Questo stato viene restituito come TabellaHash. Le chiavi della TabellaHash saranno i valori configurabili, o parametri, accettati dalla risorsa.

Il metodo Get esegue il mapping direttamente sul cmdlet Get-DSCConfiguration. Quando si richiama Get-DSCConfiguration, la gestione configurazione locale (LCM) esegue il metodo Get di ciascuna risorsa nella configurazione attualmente applicata. Gestione configurazione locale (LCM) usa i valori di chiave archiviati nel file .mof come parametri per ogni istanza di risorsa corrispondente.

Questo è l'output di esempio di una risorsa Service che configura il servizio "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

L'output mostra le proprietà del valore correnti configurabili dalla risorsa 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

Il metodo Test di una risorsa determina se il nodo di destinazione è attualmente conforme con lo stato desiderato della risorsa. Il metodo Test restituisce $true o $false solo per indicare se il nodo è conforme. Quando si richiama Test-DSCConfiguration la gestione configurazione locale (LCM) richiama il metodo Test di tutte le risorse nella configurazione attualmente applicata. Gestione configurazione locale (LCM) usa i valori di chiave archiviati come parametri nel file "MOF" per ogni istanza di risorsa corrispondente.

Se il risultato di qualsiasi Test di una singola risorsa è $false, Test-DSCConfiguration restituisce $false che indica che il nodo non è conforme. Se tutte i metodi Test della risorsa restituiscono $true, Test-DSCConfiguration restituisce $true per indicare che il nodo è conforme.

Test-DSCConfiguration
True

A partire da PowerShell 5.0, è stato aggiunto il parametro Detailed. Se si specifica Detailed, Test-DSCConfiguration restituisce un oggetto che contiene le raccolte dei risultati relativi alle risorse conformi e non conformi.

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

Per altre informazioni, vedere Test-DSCConfiguration.

Set

Il metodo Set di una risorsa tenta di forzare il nodo affinché diventi conforme con lo stato desiderato della risorsa. Il metodo Set deve essere idempotente, che significa che Set potrebbe essere eseguito più volte e otterrà sempre lo stesso risultato senza errori. Quando si esegue Test-DSCConfiguration la gestione configurazione locale (LCM) passa da una risorsa all'altra nella configurazione attualmente applicata. La gestione configurazione locale recupera i valori di chiave per l'istanza corrente delle risorse dal file "MOF" e li usa come parametri per il metodo Test. Se il metodo Test restituisce $true, il nodo è conforme con la risorsa corrente e il metodo Set viene ignorato. Se Test restituisce $false, il nodo non è conforme. La gestione configurazione locale (LCM) passa i valori di chiave dell'istanza della risorsa come parametri al metodo Set ripristinando la conformità del nodo.

Specificando i parametri Verbose e Wait, è possibile controllare lo stato di avanzamento del cmdlet Start-DSCConfiguration. In questo esempio, il nodo è già conforme. L'output Verbose indica che il metodo Set è stato ignorato.

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

Vedi anche