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-DSCConfiguration
kö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$false
returneras 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