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 script di Windows PowerShell nei nodi di destinazione. La risorsa Script
usa le proprietà GetScript
,SetScript
e TestScript
che contengono blocchi di script definiti per eseguire le operazioni per lo stato DSC corrispondente.
Suggerimento
Laddove possibile, è consigliabile usare una risorsa DSC definita anziché questa. La Script
risorsa presenta svantaggi che rendono più difficile testare, gestire e prevedere.
A differenza di altre risorse DSC, ogni proprietà per una Script
risorsa è 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 funzionerà 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 Script
risorsa, 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 è disponibile da PowerShell Gallery.
Per altre informazioni e la documentazione aggiornata, vedere la documentazione di riferimento di PSDscResources.
Sintassi
Script [string] #ResourceName
{
GetScript = [string]
SetScript = [string]
TestScript = [string]
[ Credential = [PSCredential] ]
[ DependsOn = [string[]] ]
[ PsDscRunAsCredential = [PSCredential] ]
}
Nota
GetScript
TestScript
i blocchi e 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 dello script, se sono necessarie credenziali. |
Proprietà comuni
Proprietà | Descrizione |
---|---|
DependsOn | Indica che prima di configurare la risorsa è necessario eseguire la configurazione di un'altra risorsa. |
PsDscRunAsCredential | Imposta le credenziali per l'esecuzione dell'intera risorsa. |
Nota
La proprietà comune PsDscRunAsCredential è 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 del GetScript
cmdlet Get-DscConfiguration eseguito GetScript
per recuperare lo stato corrente di un nodo. Un valore restituito non è obbligatorio da GetScript
Se si specifica un valore restituito, deve essere una tabella hash contenente una chiave Result il cui valore è String.
TestScript
DSC viene eseguito TestScript
per determinare se SetScript
deve essere eseguito. Se TestScript
restituisce $false
, DSC esegue SetScript
per riportare il nodo allo stato desiderato. Deve restituire un valore booleano. Un risultato indica $true
che il nodo è conforme e SetScript
non deve essere eseguito.
Il cmdlet Test-DscConfiguration viene eseguito TestScript
per recuperare la conformità dei nodi alle Script
risorse. In questo caso, tuttavia, SetScript
non viene eseguito, indipendentemente dal TestScript
valore restituito dal blocco.
Nota
Tutto l'output restituito da TestScript
fa parte del valore restituito. PowerShell interpreta l'output non compresso come diverso da zero, il che significa che restituisce TestScript
$true
indipendentemente dallo stato del nodo. Questo comportamento provoca risultati imprevedibili, falsi positivi e difficoltà durante la risoluzione dei problemi.
SetScript
SetScript
modifica il nodo per applicare lo stato desiderato. DSC chiama SetScript
se il TestScript
blocco di script restituisce $false
. SetScript
non deve avere alcun valore restituito.
Esempi
Esempio 1: Scrivere testo di esempio tramite una risorsa Script
Questo esempio testa la presenza di C:\TempFolder\TestFile.txt
in ogni nodo. Se non esiste, lo crea usando .SetScript
restituisce GetScript
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 tramite una risorsa Script
Questo esempio recupera informazioni sulla versione conforme da un file di testo nel computer di creazione e le archivia nella variabile $version
. Durante la generazione del 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 viene archiviata in un file di testo in ogni nodo e confrontata e aggiornata nelle esecuzioni successive.
$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 di parametri in una risorsa Script
Questo esempio consente di accedere ai parametri all'interno della risorsa Script usando l'ambito using
. È possibile accedere a ConfigurationData 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, separando 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 a cui si accede 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. In questo caso, usare una risorsa completa anziché usare una risorsa script.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per