Problèmes connus liés à la Configuration d’état souhaité (DSC)
Changement cassant : Les certificats utilisés pour chiffrer/déchiffrer les mots de passe dans les configurations DSC peuvent ne pas fonctionner après l’installation de WMF 5.0 RTM
Dans les versions WMF 4.0 et WMF 5.0 Preview, DSC n’autorisait pas les mots de passe de plus de 121 caractères dans la configuration. DSC forçait l’utilisation de mots de passe courts même si des mots de passe forts et longs étaient souhaités. Cette modification avec rupture autorise les mots de passe de longueur arbitraire dans la configuration DSC.
Résolution : Recréez le certificat avec l’attribut Data Encipherment ou Key Encipherment Key Usage, et avec l’attribut Document Encryption Enhanced Key Usage (1.3.6.1.4.1.311.80.1). Pour plus d’informations, voir Protect-CmsMessage.
Les applets de commande DSC peuvent échouer après l’installation de WMF 5.0 RTM
Start-DscConfiguration
et d’autres cmdlets DSC risquent d’échouer sur l’erreur suivante après l’installation de WMF 5.0 RTM :
LCM failed to retrieve the property PendingJobStep from the object of class dscInternalCache .
+ CategoryInfo : ObjectNotFound: (root/Microsoft/...gurationManager:String) [], CimException
+ FullyQualifiedErrorId : MI RESULT 6
+ PSComputerName : localhost
Résolution : Supprimez DSCEngineCache.mof en exécutant la commande suivante dans une session PowerShell avec élévation de privilèges (Exécuter en tant qu’administrateur) :
Remove-Item -Path $env:SystemRoot\system32\Configuration\DSCEngineCache.mof
Les applets de commande DSC peuvent ne pas fonctionner si WMF 5.0 RTM est installé sur WMF 5.0 Production Preview
Résolution : Exécutez la commande suivante dans une session PowerShell avec élévation de privilèges (Exécuter en tant qu’administrateur) :
mofcomp $env:windir\system32\wbem\DscCoreConfProv.mof
Le gestionnaire de configuration local peut basculer dans un état instable lors de l’utilisation de Get-DscConfiguration en DebugMode
Si vous appuyez sur Ctrl+C pour arrêter le traitement de Get-DscConfiguration
alors que le gestionnaire de configuration local est en DebugMode, ce dernier risque de basculer dans un état instable dans lequel la plupart des cmdlets DSC ne fonctionnent pas.
Résolution : N’appuyez pas sur Ctrl+C lors du débogage de la cmdlet Get-DscConfiguration
.
Stop-DscConfiguration peut ne pas répondre en DebugMode
Si vous tentez d’arrêter une opération lancée par Get-DscConfiguration
alors que le gestionnaire de configuration local est en DebugMode, Stop-DscConfiguration
risque de ne pas répondre.
Résolution : Terminez le débogage de l’opération lancée par Get-DscConfiguration
en suivant la procédure Déboguer des ressources DSC.
Aucun message d’erreur détaillé n’est affiché en DebugMode
Si le gestionnaire de configuration local est en DebugMode, aucun message d’erreur détaillé ne s’affiche à partir des ressources DSC.
Résolution : Désactivez DebugMode pour afficher les messages détaillés à partir de la ressource
Les opérations Invoke-DscResource ne peuvent pas être récupérées par l’applet de commande Get-DscConfigurationStatus
Si la cmdlet Invoke-DscResource
est utilisée pour appeler directement les méthodes d’une ressource, il n’est pas possible de récupérer les enregistrements de cette opération avec Get-DscConfigurationStatus
.
Résolution : Aucun.
Get-DscConfigurationStatus retourne les opérations de cycle d’extraction en tant que type Consistency
Quand un nœud est configuré en mode d’actualisation par extraction, la cmdlet Get-DscConfigurationStatus
indique pour chaque opération d’extraction effectuée que son type est Consistency au lieu de Initial.
Résolution : Aucun.
L’applet de commande Invoke-DscResource ne retourne pas les messages dans l’ordre dans lequel ils ont été générés
La cmdlet Invoke-DscResource
ne retourne pas les messages détaillés, d’avertissement et d’erreur dans l’ordre dans lequel ils ont été produits par le gestionnaire de configuration local ou la ressource DSC.
Résolution : Aucun.
Les ressources DSC ne peuvent pas être déboguées facilement en cas d’utilisation avec Invoke-DscResource
Quand le gestionnaire de configuration local s’exécute en mode débogage, la cmdlet Invoke-DscResource
ne donne pas d’informations sur l’instance d’exécution à laquelle il faut se connecter pour le débogage. Pour plus d’informations, consultez Débogage des ressources DSC.
Résolution : Découvrez et joignez l’instance d’exécution à l’aide des cmdlets Get-PSHostProcessInfo
, Enter-PSHostProcess
, Get-Runspace
et Debug-Runspace
pour déboguer la ressource DSC.
# Find all the processes hosting PowerShell
Get-PSHostProcessInfo
ProcessName ProcessId AppDomainName
----------- --------- -------------
powershell 3932 DefaultAppDomain
powershell_ise 2304 DefaultAppDomain
WmiPrvSE 3396 DscPsPluginWkr_AppDomain
# Enter the process that is hosting DSC engine (WMI process with DscPsPluginWkr_Appdomain)
Enter-PSHostProcess -Id 3396 -AppDomainName DscPsPluginWkr_AppDomain
# Find all the available rusnspaces in that process
Get-Runspace
Id Name ComputerName Type State Availability
-- ---- ------------ ---- ----- ------------
2 Runspace2 localhost Local Opened InBreakpoint
5 RemoteHost localhost Local Opened Busy
# Debug the runspace that is in **InBreakpoint** availability state
Debug-Runspace -Id 2
Différents documents de configuration partielle pour le même nœud ne peuvent pas avoir des noms de ressources identiques
Pour plusieurs configurations partielles déployées sur un même nœud, des noms de ressources identiques provoquent des erreurs au moment de l’exécution.
Résolution : Utilisez des noms différents pour les mêmes ressources dans différentes configurations partielles.
Start-DscConfiguration –UseExisting ne fonctionne pas avec -Credential
Si Start-DscConfiguration
est utilisé avec le paramètre UseExisting, le paramètre Credential est ignoré. DSC utilise l’identité de processus par défaut pour continuer l’opération. Cela provoque une erreur quand des informations d’identification différentes sont nécessaires pour continuer sur le nœud distant.
Résolution : Utilisez une session CIM pour les opérations DSC à distance :
$session = New-CimSession -ComputerName $node -Credential $credential
Start-DscConfiguration -UseExisting -CimSession $session
Adresses IPv6 en tant que noms de nœuds dans les configurations DSC
Les adresses IPv6 en tant que noms de nœuds dans les scripts de configuration DSC ne sont pas prises en charge dans cette version.
Résolution : Aucun.
Débogage de ressources DSC Class-Based
Le débogage des ressources DSC basées sur une classe n’est pas pris en charge dans cette version.
Résolution : Aucun.
Les variables et fonctions définies dans la portée $script d’une ressource DSC basée sur une classe ne sont pas conservées d’un appel à une ressource DSC à l’autre
Plusieurs appels successifs à Start-DSCConfiguration
échouent si la configuration utilise une ressource basée sur une classe comportant des variables ou des fonctions définies dans la portée $script
.
Résolution : Définissez toutes les variables et fonctions dans la classe de ressources DSC proprement dite. Aucune variable/fonction de portée $script
.
Débogage de ressources DSC quand une ressource utilise PSDscRunAsCredential
Le débogage d’une ressource DSC qui utilise la propriété PSDscRunAsCredential dans la configuration n’est pas pris en charge dans cette version.
Résolution : Aucun.
PsDscRunAsCredential n’est pas pris en charge pour les ressources DSC composites
Résolution : Utilisez si possible une propriété Credential. Exemple de ServiceSet et WindowsFeatureSet
Get-DscResource -Syntax ne reflète pas correctement PsDscRunAsCredential
Le paramètre Syntax ne reflète pas correctement PsDscRunAsCredential quand la ressource la marque comme étant obligatoire ou ne la prend pas en charge.
Résolution : Aucun. Cependant, la création de configuration dans ISE reflète les bonnes métadonnées de la propriété PsDscRunAsCredential si IntelliSense est utilisé.
WindowsOptionalFeature n’est pas disponible dans Windows 7
La ressource DSC WindowsOptionalFeature n’est pas disponible sur Windows 7. Cette ressource nécessite le module DISM et les applets de commande DISM qui sont disponibles à partir de Windows 8 et des versions plus récentes du système d’exploitation Windows.
Pour les ressources DSC basées sur une classe, Import-DscResource -ModuleVersion peut ne pas fonctionner comme prévu
Si le nœud de compilation comporte plusieurs versions d’un module de ressources DSC basé sur une classe, Import-DscResource -ModuleVersion
ne choisit pas la version spécifiée et génère l’erreur de compilation suivante.
ImportClassResourcesFromModule : Exception calling "ImportClassResourcesFromModule" with "3" argument(s):
"Keyword 'MyTestResource' already defined in the configuration."
At C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSDesiredStateConfiguration\PSDesiredStateConfiguration.psm1:2035 char:35
+ ... rcesFound = ImportClassResourcesFromModule -Module $mod -Resources $r ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [ImportClassResourcesFromModule], MethodInvocationException
+ FullyQualifiedErrorId : PSInvalidOperationException,ImportClassResourcesFromModule
Résolution : Importez ainsi la version requise en définissant l’objet ModuleSpecification sur le paramètre ModuleName avec la clé RequiredVersion spécifiée :
Import-DscResource -ModuleName @{ModuleName='MyModuleName';RequiredVersion='1.2'}
Certaines ressources DSC comme une ressource du Registre peuvent commencer à prendre beaucoup de temps pour traiter la demande.
Résolution 1 : Créez une tâche planifiée qui nettoie le dossier suivant régulièrement.
$env:windir\system32\config\systemprofile\AppData\Local\Microsoft\Windows\PowerShell\CommandAnalysis
Résolution 2 : Modifiez la configuration DSC pour nettoyer le dossier CommandAnalysis à la fin de la configuration.
Configuration $configName
{
# User Data
Registry SetRegisteredOwner
{
Ensure = 'Present'
Force = $True
Key = $Node.RegisteredKey
ValueName = $Node.RegisteredOwnerValue
ValueType = 'String'
ValueData = $Node.RegisteredOwnerData
}
#
# Script to delete the config
#
script DeleteCommandAnalysisCache
{
DependsOn = "[Registry]SetRegisteredOwner"
getscript = "@{}"
testscript = 'Remove-Item -Path $env:windir\system32\config\systemprofile\AppData\Local\Microsoft\Windows\PowerShell\CommandAnalysis -Force -Recurse -ErrorAction SilentlyContinue -ErrorVariable ev | out-null;$true'
setscript = '$true'
}
}