Get-Test-Set
Aplica-se a: Windows PowerShell 4.0, Windows PowerShell 5.0
O PowerShell Desired State Configuration é construído em torno de um processo Get, Test e Set. Cada um dos recursos do DSC contém métodos para concluir cada uma destas operações. Numa Configuração, define blocos de recursos para preencher chaves que se tornam parâmetros para os métodos Get, Test e Set de um recurso.
Esta é a sintaxe de um bloco de recursos do Serviço . O recurso Serviço configura os serviços do 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 }]
}
Os métodos Get, Test e Set do recurso do Serviço terão blocos de parâmetros que aceitam estes valores.
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
A linguagem e o método utilizados para definir o recurso determina a forma como os métodos Get, Test e Set serão definidos.
Uma vez que o recurso do Serviço tem apenas uma chave necessária (Name
), um recurso de Bloco de serviço pode ser tão simples como este:
Configuration TestConfig
{
Import-DSCResource -Name Service
Node localhost
{
Service "MyService"
{
Name = "Spooler"
}
}
}
Quando compila a Configuração acima, os valores que especificar para uma chave são armazenados no .mof
ficheiro que é gerado. Para obter mais informações, veja 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 aplicado, o Configuration Manager Local (LCM) irá ler o valor "Spooler" do .mof
ficheiro e transmiti-lo ao parâmetro Name dos métodos Get, Test e Set para a instância "MyService" do recurso do Serviço.
Get
O método Get de um recurso obtém o estado do recurso à medida que está configurado no Nó de destino. Este estado é devolvido como uma tabela hash. As chaves da tabela hash serão os valores configuráveis, ou parâmetros, que o recurso aceita.
O método Get mapeia diretamente para o cmdlet Get-DSCConfiguration .
Quando chama Get-DSCConfiguration
, o LCM executa o método Get de cada recurso na configuração atualmente aplicada. O LCM utiliza os valores de chave armazenados no .mof
ficheiro como parâmetros para cada instância de recurso correspondente.
Este é o resultado de exemplo de um recurso do Serviço que configura o serviço "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
O resultado mostra as propriedades do valor atual configuráveis pelo recurso do Serviço .
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 }]
}
Teste
O método De teste de um recurso determina se o nó de destino está atualmente em conformidade com o estado pretendido do recurso. O método Test devolve $true
ou $false
apenas para indicar se o Nó está em conformidade. Quando chama Test-DSCConfiguration, o LCM chama o método Test de cada recurso na configuração atualmente aplicada. O LCM utiliza os valores de chave armazenados no ficheiro ".mof" como parâmetros para cada instância de recurso correspondente.
Se o resultado do Teste de qualquer recurso individual for $false
, Test-DSCConfiguration
devolve $false
a indicação de que o Nó não está em conformidade. Se todos os métodos de Teste de todos os recursos devolverem $true
, Test-DSCConfiguration
devolve $true
para indicar que o Nó está em conformidade.
Test-DSCConfiguration
True
A partir do PowerShell 5.0, foi adicionado o parâmetro Detalhado . Especificar causas detalhadasTest-DSCConfiguration
para devolver um objeto que contém coleções de resultados para recursos conformes e não conformes.
Test-DSCConfiguration -Detailed
PSComputerName ResourcesInDesiredState ResourcesNotInDesiredState InDesiredState
-------------- ----------------------- -------------------------- --------------
localhost {[Service]Spooler} True
Para obter mais informações, veja Test-DSCConfiguration.
Definir
O método Set de um recurso tenta forçar o Nó a ficar em conformidade com o estado pretendido do recurso. O método Set destina-se a ser idempotente, o que significa que Set pode ser executado várias vezes e obter sempre o mesmo resultado sem erros. Quando executa Start-DSCConfiguration, o LCM percorre cada recurso na configuração atualmente aplicada. O LCM obtém valores chave para a instância de recurso atual a partir do ficheiro ".mof" e utiliza-os como parâmetros para o método Test . Se o método Test devolver $true
, o Nó está em conformidade com o recurso atual e o método Set é ignorado. Se o Teste devolver $false
, o Nó não está em conformidade. O LCM transmite os valores chave da instância de recurso como parâmetros para o método Set do recurso, restaurando o Nó para conformidade.
Ao especificar os parâmetros Verboso e Aguardar, pode watch o progresso do Start-DSCConfiguration
cmdlet. Neste exemplo, o Nó já está em conformidade. O Verbose
resultado indica que o método Set foi ignorado.
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