Ressource de script DSC
S’applique à : Windows PowerShell 4.0, Windows PowerShell 5.x
La ressource Script
dans Windows PowerShell Desired State Configuration (DSC) fournit un mécanisme permettant d’exécuter des blocs de script Windows PowerShell sur des nœuds cibles. La ressource Script
utilise GetScript
SetScript
et TestScript
propriétés qui contiennent des blocs de script que vous définissez pour effectuer les opérations d’état DSC correspondantes.
Pourboire
Si possible, il est recommandé d’utiliser une ressource DSC définie au lieu de celle-ci. La ressource Script
présente des inconvénients qui rendent plus difficile le test, la maintenance et la prédiction.
Contrairement à d’autres ressources DSC, chaque propriété d’une ressource
Avant d’utiliser la ressource Script
, déterminez si vous pouvez créer une ressource à la place.
L’utilisation de ressources DSC bien définies rend vos configurations plus lisibles et gérables.
Note
Cette documentation de cette ressource DSC couvre la version incluse avec PowerShell antérieure à la version 7.2. Le module PSDscResources contient des ressources DSC nouvelles et mises à jour qui sont officiellement prises en charge par Microsoft. Le module PSDscResources est disponible à partir de PowerShell Gallery.
Pour plus d’informations et la documentation mise à jour, consultez la documentation de référence PSDscResources.
Syntaxe
Script [string] #ResourceName
{
GetScript = [string]
SetScript = [string]
TestScript = [string]
[ Credential = [PSCredential] ]
[ DependsOn = [string[]] ]
[ PsDscRunAsCredential = [PSCredential] ]
}
Note
GetScript
TestScript
et les blocs SetScript
sont stockés sous forme de chaînes.
Propriétés
Propriété | Description |
---|---|
GetScript | Bloc de script qui retourne l’état actuel du nœud. |
SetScript | Bloc de script que DSC utilise pour appliquer la conformité lorsque le nœud n’est pas dans l’état souhaité. |
TestScript | Bloc de script qui détermine si le nœud est dans l’état souhaité. |
Credential | Indique les informations d’identification à utiliser pour l’exécution de ce script, si des informations d’identification sont requises. |
Propriétés communes
Propriété | Description |
---|---|
DependsOn | Indique que la configuration d’une autre ressource doit s’exécuter avant la configuration de cette ressource. |
PsDscRunAsCredential | Définit les informations d’identification pour l’exécution de la ressource entière en tant que. |
Note
La propriété commune PsDscRunAsCredential a été ajoutée dans WMF 5.0 pour autoriser l’exécution de n’importe quelle ressource DSC dans le contexte d’autres informations d’identification. Pour plus d’informations, consultez Utiliser des informations d’identification avec des ressources DSC.
Informations supplémentaires
GetScript
DSC n’utilise pas la sortie de GetScript
l’applet de commande Get-DscConfiguration exécute GetScript
pour récupérer l’état actuel d’un nœud. Une valeur de retour n’est pas requise à partir de GetScript
Si vous spécifiez une valeur de retour, il doit s’agir d’une table de hachage contenant une clé Result dont la valeur est une chaîne.
TestScript
DSC exécute TestScript
pour déterminer si SetScript
doit être exécuté. Si TestScript
retourne $false
, DSC exécute SetScript
pour ramener le nœud à l’état souhaité. Elle doit retourner une valeur booléenne. Un résultat de $true
indique que le nœud est conforme et SetScript
ne doit pas s’exécuter.
L’applet de commande test-DscConfiguration SetScript
ne s’exécute pas, peu importe ce que TestScript
bloc retourne.
Note
Toute la sortie de votre TestScript
fait partie de sa valeur de retour. PowerShell interprète la sortie non décompressée comme non nulle, ce qui signifie que votre TestScript
retourne $true
quel que soit l’état de votre nœud. Cela entraîne des résultats imprévisibles, des faux positifs et provoque des difficultés lors du dépannage.
SetScript
SetScript
modifie le nœud pour appliquer l’état souhaité. DSC appelle SetScript
si le bloc de script TestScript
retourne $false
. La SetScript
ne doit pas avoir de valeur de retour.
Exemples
Exemple 1 : Écrire un exemple de texte à l’aide d’une ressource de script
Cet exemple teste l’existence de C:\TempFolder\TestFile.txt
sur chaque nœud. S’il n’existe pas, il le crée à l’aide de l'SetScript
. La GetScript
retourne le contenu du fichier et sa valeur de retour n’est pas utilisée.
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) } }
}
}
}
Exemple 2 : Comparer les informations de version à l’aide d’une ressource de script
Cet exemple récupère les informations de version conformes à partir d’un fichier texte sur l’ordinateur de création et les stocke dans la variable $version
. Lors de la génération du fichier MOF du nœud, DSC remplace les variables $using:version
dans chaque bloc de script par la valeur de la variable $version
. Pendant l’exécution, la version conforme est stockée dans un fichier texte sur chaque nœud et comparée et mise à jour lors des exécutions suivantes.
$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')
}
}
}
}
Exemple 3 : Utilisation de paramètres dans une ressource de script
Cet exemple accède aux paramètres à partir de la ressource script en utilisant l’étendue using
.
ConfigurationData sont accessibles de manière similaire. Par exemple 2, l’implémentation s’attend à ce qu’une version soit stockée dans un fichier local sur le nœud cible. Le chemin local et la version sont configurables, découplant le code des données de configuration.
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
}
}
}
}
Le fichier MOF résultant inclut les variables et leurs valeurs accessibles via l’étendue using
.
Ils sont injectés dans chaque scriptblock, qui utilise les variables. Les scripts de test et de définition sont supprimés pour la concision :
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 = ...;
};
Limitations connues
- Les informations d’identification transmises dans une ressource de script ne sont pas toujours fiables lors de l’utilisation d’un modèle de serveur pull ou push. Utilisez une ressource complète plutôt que d’utiliser une ressource de script dans ce cas.