Risorsa script DSC
Si applica a: Windows PowerShell 4.0, Windows PowerShell 5.x
La risorsa Script
in Windows PowerShell DSC (Desired State Configuration) fornisce un meccanismo per eseguire blocchi di script di Windows PowerShell nei nodi di destinazione. La risorsa Script
usa GetScript
SetScript
e TestScript
proprietà che contengono blocchi di script definiti per eseguire le operazioni di stato DSC corrispondenti.
Mancia
Laddove possibile, è consigliabile usare una risorsa DSC definita anziché questa. La risorsa Script
presenta svantaggi che rendono più difficile testare, gestire e prevedere.
A differenza di altre risorse DSC, ogni proprietà per una risorsa Script
è una proprietà chiave e il metodo Get per questa risorsa può restituire solo una singola stringa per lo stato corrente. Non ci sono garanzie che questa risorsa venga implementata in modo idempotente o che funzioni come previsto in qualsiasi sistema perché usa codice personalizzato. Non può essere testato senza essere richiamato in un sistema di destinazione.
Prima di usare la risorsa Script
, valutare se è possibile creare una risorsa.
L'uso di risorse DSC ben definite rende le configurazioni più leggibili e gestibili.
Nota
Questa documentazione di questa risorsa DSC illustra la versione inclusa in PowerShell prima della versione 7.2. Il modulo PSDscResources contiene risorse DSC nuove e aggiornate supportate ufficialmente da Microsoft. Il modulo PSDscResources
Per altre informazioni e documentazione aggiornata, vedere la documentazione di riferimento PSDscResources.
Sintassi
Script [string] #ResourceName
{
GetScript = [string]
SetScript = [string]
TestScript = [string]
[ Credential = [PSCredential] ]
[ DependsOn = [string[]] ]
[ PsDscRunAsCredential = [PSCredential] ]
}
Nota
GetScript
TestScript
e i blocchi di SetScript
vengono archiviati come stringhe.
Proprietà
Proprietà | Descrizione |
---|---|
GetScript | Blocco di script che restituisce lo stato corrente del nodo. |
SetScript | Blocco di script usato da DSC per applicare la conformità quando il nodo non è nello stato desiderato. |
TestScript | Blocco di script che determina se il nodo è nello stato desiderato. |
Credenziale | Indica le credenziali da usare per l'esecuzione di questo script, se sono necessarie le credenziali. |
Proprietà comuni
Proprietà | Descrizione |
---|---|
DependsOn | Indica che la configurazione di un'altra risorsa deve essere eseguita prima della configurazione di questa risorsa. |
PsDscRunAsCredential | Imposta le credenziali per l'esecuzione dell'intera risorsa come . |
Nota
La PsDscRunAsCredential proprietà comune è stata aggiunta in WMF 5.0 per consentire l'esecuzione di qualsiasi risorsa DSC nel contesto di altre credenziali. Per altre informazioni, vedere Usare credenziali con risorse DSC.
Informazioni aggiuntive
GetScript
DSC non usa l'output di
TestScript
DSC esegue TestScript
per determinare se deve essere eseguito SetScript
. Se TestScript
restituisce $false
, DSC esegue SetScript
per riportare il nodo allo stato desiderato. Deve restituire un valore booleano. Un risultato di $true
indica che il nodo è conforme e SetScript
non deve essere eseguito.
Il cmdlet Test-DscConfiguration SetScript
non viene eseguito, indipendentemente dal TestScript
blocco restituito.
Nota
Tutto l'output del TestScript
fa parte del valore restituito. PowerShell interpreta l'output non compresso come diverso da zero, il che significa che il TestScript
restituisce $true
indipendentemente dallo stato del nodo. Ciò comporta risultati imprevedibili, falsi positivi e causa difficoltà durante la risoluzione dei problemi.
SetScript
SetScript
modifica il nodo per applicare lo stato desiderato. DSC chiama SetScript
se il blocco di script TestScript
restituisce $false
. Il SetScript
non deve avere alcun valore restituito.
Esempi
Esempio 1: Scrivere testo di esempio usando una risorsa Script
In questo esempio viene verificata l'esistenza di C:\TempFolder\TestFile.txt
in ogni nodo. Se non esiste, lo crea usando il SetScript
. Il GetScript
restituisce il contenuto del file e il relativo valore restituito non viene usato.
Configuration ScriptTest
{
Import-DscResource -ModuleName 'PSDesiredStateConfiguration'
Node localhost
{
Script ScriptExample
{
SetScript = {
$sw = New-Object System.IO.StreamWriter("C:\TempFolder\TestFile.txt")
$sw.WriteLine("Some sample string")
$sw.Close()
}
TestScript = { Test-Path "C:\TempFolder\TestFile.txt" }
GetScript = { @{ Result = (Get-Content C:\TempFolder\TestFile.txt) } }
}
}
}
Esempio 2: Confrontare le informazioni sulla versione usando una risorsa Script
Questo esempio recupera le informazioni sulla versione conformi da un file di testo nel computer di creazione e lo archivia nella variabile $version
. Quando si genera il file MOF del nodo, DSC sostituisce le variabili $using:version
in ogni blocco di script con il valore della variabile $version
. Durante l'esecuzione, la versione conforme
$version = Get-Content 'version.txt'
Configuration ScriptTest
{
Import-DscResource -ModuleName 'PSDesiredStateConfiguration'
Node localhost
{
Script UpdateConfigurationVersion
{
GetScript = {
$currentVersion = Get-Content (Join-Path -Path $env:SYSTEMDRIVE -ChildPath 'version.txt')
return @{ 'Result' = "$currentVersion" }
}
TestScript = {
# Create and invoke a scriptblock using the $GetScript automatic variable, which contains a string representation of the GetScript.
$state = [scriptblock]::Create($GetScript).Invoke()
if( $state.Result -eq $using:version )
{
Write-Verbose -Message ('{0} -eq {1}' -f $state.Result,$using:version)
return $true
}
Write-Verbose -Message ('Version up-to-date: {0}' -f $using:version)
return $false
}
SetScript = {
$using:version | Set-Content -Path (Join-Path -Path $env:SYSTEMDRIVE -ChildPath 'version.txt')
}
}
}
}
Esempio 3: Utilizzo dei parametri in una risorsa Script
Questo esempio accede ai parametri dall'interno della risorsa Script usando l'ambito using
.
ConfigurationData è accessibile in modo analogo. Come nell'esempio 2, l'implementazione prevede che una versione venga archiviata all'interno di un file locale nel nodo di destinazione. Sia il percorso locale che la versione sono configurabili, disaccoppiando il codice dai dati di configurazione.
Configuration ScriptTest
{
param
(
[Version]
$Version,
[string]
$FilePath
)
Import-DscResource -ModuleName 'PSDesiredStateConfiguration'
Node localhost
{
Script UpdateConfigurationVersion
{
GetScript = {
$currentVersion = Get-Content -Path $using:FilePath
return @{ 'Result' = "$currentVersion" }
}
TestScript = {
# Create and invoke a scriptblock using the $GetScript automatic variable,
# which contains a string representation of the GetScript.
$state = [scriptblock]::Create($GetScript).Invoke()
if( $state['Result'] -eq $using:Version )
{
Write-Verbose -Message ('{0} -eq {1}' -f $state['Result'],$using:version)
return $true
}
Write-Verbose -Message ('Version up-to-date: {0}' -f $using:version)
return $false
}
SetScript = {
Set-Content -Path $using:FilePath -Value $using:Version
}
}
}
}
Il file MOF risultante include le variabili e i relativi valori accessibili tramite l'ambito using
.
Vengono inseriti in ogni blocco di script, che usa le variabili. Gli script di test e set vengono rimossi per brevità:
instance of MSFT_ScriptResource as $MSFT_ScriptResource1ref
{
GetScript = "$FilePath ='C:\\Config.ini'\n\n $currentVersion = Get-Content -Path $FilePath\n return @{ 'Result' = \"$currentVersion\" }\n";
TestScript = ...;
SetScript = ...;
};
Limitazioni note
- Le credenziali passate all'interno di una risorsa script non sono sempre affidabili quando si usa un modello di server pull o push. Usare una risorsa completa anziché usare una risorsa script in questo caso.