Get-Test-Set
Gilt für: Windows PowerShell 4.0, Windows PowerShell 5.0
PowerShell Desired State Configuration ist um einen Get-, Test- und Set-Prozess herum konstruiert. Die DSC-Ressourcen enthalten Methoden, um jeden dieser Vorgänge abzuschließen. In einer Konfiguration definieren Sie Ressourcenblöcke, um Schlüssel auszufüllen, die Parameter für Get-, Test- und Set-Methoden einer Ressource werden.
Dies ist die Syntax für einen Service-Ressourcenblock. Die Service-Ressource konfiguriert Windows-Dienste.
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 }]
}
Die Parameterblöcke der Get-, Test- und Set-Methoden der Service-Ressource akzeptieren diese Werte.
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"
)
Hinweis
Die zum Definieren der Ressource verwendete Sprache und Methode bestimmt, wie die Get-, Test- und Set-Methoden definiert werden.
Da die Service-Ressource nur einen einzigen Schlüssel (Name
) benötigt, könnte eine Service-Blockressource so einfach sein wie folgt:
Configuration TestConfig
{
Import-DSCResource -Name Service
Node localhost
{
Service "MyService"
{
Name = "Spooler"
}
}
}
Beim Kompilieren der obigen Konfiguration werden die Werte, die Sie für einen Schlüssel angeben, in der generierten .mof
-Datei gespeichert. Weitere Informationen finden Sie unter MOF.
instance of MSFT_ServiceResource as $MSFT_ServiceResource1ref
{
SourceInfo = "::5::1::Service";
ModuleName = "PsDesiredStateConfiguration";
ResourceID = "[Service]MyService";
Name = "Spooler";
ModuleVersion = "1.0";
ConfigurationName = "Test";
};
Bei Anwendung liest der lokale Konfigurations-Manager (Local Configuration Manager, LCM) den Wert „Spooler“ aus der .mof
-Datei und übergibt ihn dem Name-Parameter der Get-, Test- und Set-Methode für die Instanz „MyService“ der Service-Ressource.
Herunterladen
Die Get-Methode einer Ressource ruft den Status der Ressource ab, wenn sie auf dem Zielknoten konfiguriert wird. Dieser Status wird als Hashtabelle zurückgegeben. Die Schlüssel der Hashtabelle sind die konfigurierbaren Werte oder Parameter, die die Ressource akzeptiert.
Die Get-Methode wird direkt dem Get-DSCConfiguration-Cmdlet zugeordnet.
Beim Aufruf von Get-DSCConfiguration
führt der LCM die Get-Methoden der einzelnen Ressourcen in der gerade angewendeten Konfiguration aus. Der LCM nutzt die in der .mof
-Datei gespeicherten Schlüsselwerte als Parameter für die jeweils entsprechende Ressourceninstanz.
Dies ist eine Beispielausgabe einer Service-Ressource, die den „Spooler“-Dienst konfiguriert.
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
Die Ausgabe zeigt die aktuellen, mit der Service-Ressource konfigurierbaren Werteigenschaften.
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
Die Test-Methode einer Ressource bestimmt, ob der Zielknoten derzeit mit dem gewünschten Status der Ressource konform ist. Die Test-Methode gibt $true
oder $false
nur zurück, um anzuzeigen, ob der Knoten konform ist. Beim Aufruf von Test-DSCConfiguration ruft der LCM die Test-Methoden der einzelnen Ressourcen in der gerade angewendeten Konfiguration auf. Der LCM nutzt die in der MOF-Datei gespeicherten Schlüsselwerte als Parameter für die jeweilige entsprechende Ressourceninstanz.
Wenn das Ergebnis von Test einer beliebigen einzelnen Ressource $false
ist, gibt Test-DSCConfiguration
$false
zurück, um anzugeben, dass der Knoten nicht konform ist. Wenn die Test-Methoden aller Ressourcen $true
zurückgeben, gibt Test-DSCConfiguration
$true
zurück, um anzugeben, dass der Knoten konform ist.
Test-DSCConfiguration
True
Ab PowerShell 5.0 wurde der Detailed-Parameter hinzugefügt. Die Angabe von Detailed bewirkt, dass Test-DSCConfiguration
ein Objekt zurückgibt, das Sammlungen von Ergebnissen für konforme und nicht konforme Ressourcen enthält.
Test-DSCConfiguration -Detailed
PSComputerName ResourcesInDesiredState ResourcesNotInDesiredState InDesiredState
-------------- ----------------------- -------------------------- --------------
localhost {[Service]Spooler} True
Weitere Informationen finden Sie unter Test-DSCConfiguration.
Set
Die Set-Methode einer Ressource versucht, die Konformität des Knotens mit dem gewünschten Status der Ressource zu erzwingen. Die Set-Methode soll idempotent sein, was bedeutet, dass Set mehrmals ausgeführt werden und immer ohne Fehler das gleiche Ergebnis erzielen könnte. Beim Aufruf von Start-DSCConfiguration durchläuft der LCM die einzelnen Ressourcen in der gerade angewendeten Konfiguration. Der LCM ruft Schlüsselwerte für die aktuelle Ressourceninstanz aus der MOF-Datei ab und verwendet sie als Parameter für die Test-Methode. Wenn die Test-Methode $true
zurückgibt, ist der Knoten mit der aktuellen Ressource konform, und die Set-Methode wird übersprungen. Wenn der Test$false
zurückgibt, ist der Knoten nicht konform. Der LCM übergibt die Schlüsselwerte der Ressourceninstanz als Parameter an die Set-Methode der Ressource und stellt dabei die Konformität des Knotens wieder her.
Durch Angabe der Parameter Verbose und Wait können Sie den Fortschritt des Start-DSCConfiguration
-Cmdlets verfolgen. In diesem Beispiel ist der Knoten bereits konform. Die Verbose
-Ausgabe gibt an, dass die Set-Methode übersprungen wurde.
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