Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 GetScriptSetScripte 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
TestScripte 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.