Dela via


Get-Test-Set

Gäller för: Windows PowerShell 4.0, Windows PowerShell 5.0

PowerShell-Desired State Configuration är konstruerad kring en Get-, Test- och Set-process. DSC-resurser innehåller metoder för att slutföra var och en av dessa åtgärder. I en konfiguration definierar du resursblock för att fylla i nycklar som blir parametrar för en resurss get-, test- och set-metoder .

Det här är syntaxen för ett tjänstresursblock . Tjänstresursen konfigurerar Windows-tjänster.

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 }]
}

Metoderna Get, Test och Set för tjänstresursen har parameterblock som accepterar dessa värden.

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

Anteckning

Språket och metoden som används för att definiera resursen avgör hur metoderna Get, Test och Set ska definieras.

Eftersom tjänstresursen bara har en nödvändig nyckel (Name) kan en tjänstblockeringsresurs vara så enkel som den här:

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

När du kompilerar konfigurationen ovan lagras de värden som du anger för en nyckel i filen .mof som genereras. Mer information finns i MOF.

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

ModuleVersion = "1.0";

 ConfigurationName = "Test";

};

När det tillämpas läser local Configuration Manager (LCM) värdet "Spooler" från .mof filen och skickar det till parametern Namn för metoderna Get, Test och Set för "MyService"-instansen av tjänstresursen.

Hämta

Metoden Get för en resurs hämtar tillståndet för resursen när den konfigureras på målnoden. Det här tillståndet returneras som en hash-tabell. Hashtabellens nycklar är de konfigurerbara värdena eller parametrarna som resursen accepterar.

Metoden Get mappar direkt till cmdleten Get-DSCConfiguration . När du anropar Get-DSCConfigurationkör LCM metoden Get för varje resurs i den aktuella konfigurationen. LCM använder nyckelvärdena som lagras i .mof filen som parametrar för varje motsvarande resursinstans.

Det här är exempelutdata från en tjänstresurs som konfigurerar "Spooler"-tjänsten.

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

Utdata visar de aktuella värdeegenskaper som kan konfigureras av tjänstresursen .

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

Testmetoden för en resurs avgör om målnoden för närvarande är kompatibel med resursens önskade tillstånd. Testmetoden returnerar $true eller $false bara för att ange om noden är kompatibel. När du anropar Test-DSCConfiguration anropar LCM testmetoden för varje resurs i den aktuella konfigurationen. LCM använder nyckelvärdena som lagras i ".mof"-filen som parametrar för varje motsvarande resursinstans.

Om resultatet av en enskild resurs test är$falsereturneras Test-DSCConfiguration$false som anger att noden inte är kompatibel. Om alla resursens testmetoder returnerar $true, Test-DSCConfiguration returneras $true för att indikera att noden är kompatibel.

Test-DSCConfiguration
True

Från och med PowerShell 5.0 lades den detaljerade parametern till. Ange Detaljerade orsaker Test-DSCConfiguration till att returnera ett objekt som innehåller samlingar med resultat för kompatibla och icke-kompatibla resurser.

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

Mer information finns i Test-DSCConfiguration.

Ange

Metoden Set för en resurs försöker tvinga noden att bli kompatibel med resursens önskade tillstånd. Set-metoden är avsedd att vara idempotent, vilket innebär att Set kan köras flera gånger och alltid få samma resultat utan fel. När du kör Start-DSCConfiguration växlar LCM genom varje resurs i den aktuella konfigurationen. LCM hämtar nyckelvärden för den aktuella resursinstansen från filen ".mof" och använder dem som parametrar för testmetoden . Om testmetoden returnerar $trueär Node kompatibel med den aktuella resursen och metoden Set hoppas över. Om testet returnerar $falseär noden inkompatibel. LCM skickar resursinstansens nyckelvärden som parametrar till resursens Set-metod och återställer Noden till kompatibilitet.

Genom att ange parametrarna Verbose och Wait kan du watch förloppet för cmdletenStart-DSCConfiguration. I det här exemplet är Node redan kompatibel. Utdata Verbose anger att metoden Set hoppades över.

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

Se även