Delen via


Bekende problemen en beperkingen van Desired State Configuration (DSC)

Wijziging die fouten veroorzaakt: Certificaten die worden gebruikt voor het versleutelen/ontsleutelen van wachtwoorden in DSC-configuraties werken mogelijk niet na de installatie van WMF 5.0 RTM

In versies van WMF 4.0 en WMF 5.0 Preview staat DSC niet toe dat wachtwoorden in de configuratie langer zijn dan 121 tekens. DSC dwong het gebruik van korte wachtwoorden af, zelfs als een lang en sterk wachtwoord gewenst was. Door deze wijziging die fouten veroorzaakt, kunnen wachtwoorden een willekeurige lengte hebben in de DSC-configuratie.

Resolutie: Maak het certificaat opnieuw met gegevenscodering of sleutelcoderingssleutelgebruik en gebruik van uitgebreide sleutel voor documentversleuteling (1.3.6.1.4.1.311.80.1). Zie Protect-CmsMessage voor meer informatie.

DSC-cmdlets kunnen mislukken na de installatie van WMF 5.0 RTM

Start-DscConfiguration en andere DSC-cmdlets kunnen mislukken na installatie van WMF 5.0 RTM met de volgende fout:

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

Resolutie: Verwijder DSCEngineCache.mof door de volgende opdracht uit te voeren in een PowerShell-sessie met verhoogde bevoegdheid (uitvoeren als administrator):

Remove-Item -Path $env:SystemRoot\system32\Configuration\DSCEngineCache.mof

DSC-cmdlets werken mogelijk niet als WMF 5.0 RTM is geïnstalleerd boven op WMF 5.0 Production Preview

Resolutie: Voer de volgende opdracht uit in een PowerShell-sessie met verhoogde bevoegdheid (voer uit als administrator):

mofcomp $env:windir\system32\wbem\DscCoreConfProv.mof

LCM kan in een instabiele status gaan tijdens het gebruik van Get-DscConfiguration in DebugMode

Als LCM zich in DebugMode bevindt, kan het drukken op Ctrl+C om de verwerking van Get-DscConfiguration te stoppen, ertoe leiden dat LCM in een instabiele status gaat, zodat de meeste DSC-cmdlets niet werken.

Resolutie: Druk niet op Ctrl+C tijdens het opsporen van fouten Get-DscConfiguration in de cmdlet.

Stop-DscConfiguration reageert mogelijk niet in DebugMode

Als LCM zich in DebugMode bevindt, Stop-DscConfiguration reageert mogelijk niet tijdens het stoppen van een bewerking die is gestart door Get-DscConfiguration

Resolutie: Voltooi de foutopsporing van de bewerking die is gestart door Get-DscConfiguration , zoals beschreven in Foutopsporing van DSC-resources.

Er worden geen uitgebreide foutberichten weergegeven in DebugMode

Als LCM zich in DebugMode bevindt, worden er geen uitgebreide foutberichten weergegeven vanuit DSC-resources.

Resolutie:Schakel DebugMode uit om uitgebreide berichten van de resource weer te geven

Invoke-DscResource bewerkingen kunnen niet worden opgehaald door Get-DscConfigurationStatus cmdlet

Nadat u de cmdlet hebt gebruikt Invoke-DscResource om de methoden van een resource rechtstreeks aan te roepen, kunnen de records van een dergelijke bewerking niet worden opgehaald via Get-DscConfigurationStatus.

Resolutie: Geen.

Get-DscConfigurationStatus retourneert pull-cyclusbewerkingen als type Consistentie

Wanneer een knooppunt is ingesteld op de PULL-vernieuwingsmodus, rapporteert cmdlet voor elke uitgevoerde Get-DscConfigurationStatus pull-bewerking het bewerkingstype als Consistentie in plaats van Initial

Resolutie: Geen.

Invoke-DscResource cmdlet retourneert geen bericht in de volgorde waarin ze zijn geproduceerd

De Invoke-DscResource cmdlet retourneert geen uitgebreide, waarschuwings- en foutberichten in de volgorde waarin ze zijn geproduceerd door LCM of de DSC-resource.

Resolutie: Geen.

DSC-resources kunnen niet eenvoudig worden opgespoord wanneer ze worden gebruikt met Invoke-DscResource

Wanneer LCM wordt uitgevoerd in de foutopsporingsmodus, Invoke-DscResource geeft de cmdlet geen informatie over runspace waarmee verbinding moet worden gemaakt voor foutopsporing. Zie Foutopsporing van DSC-resources voor meer informatie.

Resolutie: Detecteer en koppel deze aan de runspace met behulp van cmdlets Get-PSHostProcessInfo, Enter-PSHostProcess en Get-RunspaceDebug-Runspace om fouten in de DSC-resource op te sporen.

# 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

Verschillende gedeeltelijke configuratiedocumenten voor hetzelfde knooppunt mogen geen identieke resourcenamen hebben

Voor verschillende gedeeltelijke configuraties die zijn geïmplementeerd op één knooppunt, veroorzaken identieke namen van resources een uitvoeringsfout.

Resolutie: Gebruik verschillende namen voor dezelfde resources in verschillende gedeeltelijke configuraties.

Start-DscConfiguration – UseExisting werkt niet met -Credential

Bij gebruik Start-DscConfiguration met de parameter UseExisting wordt de parameter Credential genegeerd. DSC maakt gebruik van de standaardprocesidentiteit om de bewerking voort te zetten. Dit veroorzaakt een fout wanneer een andere referentie nodig is om door te gaan op een extern knooppunt.

Resolutie: CIM-sessie gebruiken voor externe DSC-bewerkingen:

$session = New-CimSession -ComputerName $node -Credential $credential
Start-DscConfiguration -UseExisting -CimSession $session

IPv6-adressen als knooppuntnamen in DSC-configuraties

IPv6-adressen als knooppuntnamen in DSC-configuratiescripts worden niet ondersteund in deze release.

Resolutie: Geen.

Foutopsporing van Class-Based DSC-resources

Foutopsporing van dsc-resources op basis van klassen wordt niet ondersteund in deze release.

Resolutie: Geen.

Variabelen en functies die zijn gedefinieerd in $script bereik in DSC Class-Based Resource blijven niet behouden bij meerdere aanroepen naar een DSC-resource

Meerdere opeenvolgende aanroepen naar Start-DSCConfiguration mislukken als de configuratie gebruikmaakt van een op klassen gebaseerde resource waarvoor variabelen of functies zijn gedefinieerd in $script het bereik.

Resolutie: Definieer alle variabelen en functies in de DSC-resourceklasse zelf. Geen $script bereikvariabelen/functies.

DSC-resourceopsporing wanneer een resource PSDscRunAsCredential gebruikt

Foutopsporing van DSC-resources wanneer een resource de eigenschap PSDscRunAsCredential in de configuratie gebruikt, wordt niet ondersteund in deze release.

Resolutie: Geen.

PsDscRunAsCredential wordt niet ondersteund voor samengestelde DSC-resources

Resolutie: Gebruik de eigenschap Credential indien beschikbaar. Voorbeeld van ServiceSet en WindowsFeatureSet

Get-DscResource -Syntaxis geeft PsDscRunAsCredential niet correct weer

De syntaxisparameter geeft PsDscRunAsCredential niet correct weer wanneer de resource deze als verplicht markeert of deze niet ondersteunt.

Resolutie: Geen. De ontwerpconfiguratie in ISE weerspiegelt echter de juiste metagegevens over de eigenschap PsDscRunAsCredential bij gebruik van IntelliSense.

WindowsOptionalFeature is niet beschikbaar in Windows 7

De DSC-resource WindowsOptionalFeature is niet beschikbaar in Windows 7. Voor deze resource zijn de DISM-module en DISM-cmdlets vereist die beschikbaar zijn vanaf Windows 8 en nieuwere versies van het Windows-besturingssysteem.

Voor DSC-resources op basis van klassen werkt Import-DscResource -ModuleVersion mogelijk niet zoals verwacht

Als het compilatieknooppunt meerdere versies van een op klassen gebaseerde DSC-resourcemodule heeft, Import-DscResource -ModuleVersion kiest niet de opgegeven versie en resulteert in de volgende compilatiefout.

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

Resolutie: Importeer de vereiste versie door het object ModuleSpecification te definiëren in de parameter ModuleName met de requiredVersion-sleutel die als volgt is opgegeven:

Import-DscResource -ModuleName @{ModuleName='MyModuleName';RequiredVersion='1.2'}

Voor sommige DSC-resources, zoals registerresources, kan het lang duren voordat de aanvraag is verwerkt.

Oplossing 1: Creatie een planningstaak waarmee de volgende map periodiek wordt opgeschoond.

$env:windir\system32\config\systemprofile\AppData\Local\Microsoft\Windows\PowerShell\CommandAnalysis

Oplossing 2: Wijzig de DSC-configuratie om de map CommandAnalysis aan het einde van de configuratie op te schonen.

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'
    }
}