Bekannte Probleme und Einschränkungen bei DSC (Desired State Configuration)
Breaking Change: Zertifikate zum Verschlüsseln und Entschlüsseln von Kennwörtern in DSC-Konfigurationen funktionieren nach der Installation von WMF 5.0 RTM ggf. nicht
In den Versionen WMF 4.0 und WMF 5.0 Preview lässt DSC in der Konfiguration keine Kennwörter mit mehr als 121 Zeichen zu. DSC erzwang das Verwenden kurzer Kennwörter, auch wenn längere und sichere Kennwörter gewünscht waren. Dank dieser wichtigen Änderungen können Kennwörter in der DSC-Konfiguration nun eine beliebige Länge haben.
Lösung: Erstellen Sie das Zertifikat mit der Schlüsselverwendung für die Daten- oder Schlüsselchiffrierung und der erweiterten Schlüsselverwendung für die Dokumentverschlüsselung (1.3.6.1.4.1.311.80.1). Weitere Informationen finden Sie unter Protect-CmsMessage.
DSC-Cmdlets funktionieren nach Installation von WMF 5.0 RTM ggf. nicht mehr
Start-DscConfiguration
und andere DSC-Cmdlets funktionieren ggf. nach der Installation von WMF 5.0 RTM nicht mehr, und der folgende Fehler wird angezeigt:
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
Lösung: Löschen Sie „DSCEngineCache.mof“, indem Sie den folgenden Befehl mit erhöhten Rechten in einer PowerShell-Sitzung ausführen (Als Administrator ausführen):
Remove-Item -Path $env:SystemRoot\system32\Configuration\DSCEngineCache.mof
DSC-Cmdlets funktionieren ggf. nicht, wenn die WMF 5.0 RTM-Version zusätzlich zur WMF 5.0 Production Preview-Version installiert wird
Lösung: Führen Sie den folgenden Befehl mit erhöhten Rechten in einer PowerShell-Sitzung aus (Als Administrator ausführen):
mofcomp $env:windir\system32\wbem\DscCoreConfProv.mof
Der LCM kann bei Verwenden von „Get-DscConfiguration“ im Debugmodus instabil werden
Wenn der LCM im Debugmodus ist, kann das Drücken von STRG+C zum Bearbeiten von Get-DscConfiguration
bewirken, dass der LCM so instabil wird, dass die Mehrheit der DSC-Cmdlets nicht funktioniert.
Lösung: Drücken Sie während des Debuggens des Cmdlets Get-DscConfiguration
nicht STRG+C.
Das Cmdlet „Stop-DscConfiguration“ reagiert im Debugmodus möglicherweise nicht.
Wenn der lokale Konfigurations-Manager im Debugmodus ist, reagiert Stop-DscConfiguration
möglicherweise nicht beim Versuch, einen Vorgang zu beenden, der mit Get-DscConfiguration
gestartet wurde.
Lösung: Beenden Sie das Debuggen des mit Get-DscConfiguration
gestarteten Vorgangs gemäß der Anweisungen unter Debuggen von DSC-Ressourcen.
Im Debugmodus werden keine ausführlichen Fehlermeldungen angezeigt
Wenn der LCM im DebugMode (Debugmodus) ist, werden von DSC-Ressourcen keine ausführlichen Fehlermeldungen angezeigt.
Lösung: Deaktivieren Sie den Debugmodus, um ausführliche Meldungen der Ressource anzuzeigen.
„Invoke-DscResource“-Vorgänge können vom Cmdlet „Get-DscConfigurationStatus“ nicht abgerufen werden
Nach Verwenden des Cmdlets Invoke-DscResource
zum direkten Aufrufen von Methoden einer Ressource können die Datensätze eines solchen Vorgangs später nicht mit Get-DscConfigurationStatus
abgerufen werden.
Lösung: Keine.
„Get-DscConfigurationStatus“ gibt Pullzyklusvorgänge mit dem Typ Consistency zurück
Wenn ein Knoten auf den PULL-Aktualisierungsmodus festgelegt ist, meldet das Cmdlet Get-DscConfigurationStatus
den Vorgangstyp als Consistency anstatt als Initial.
Lösung: Keine.
Das Cmdlet „Invoke-DscResource“ gibt Meldungen nicht in der Reihenfolge ihrer Erstellung zurück
Das Cmdlet Invoke-DscResource
gibt ausführliche, Warn- und Fehlermeldungen nicht in der Reihenfolge zurück, in der sie vom LCM oder der DSC-Ressource erstellt wurden.
Lösung: Keine.
Bei Verwendung mit „Invoke-DscResource“ ist das Debuggen von DSC-Ressourcen nicht einfach
Wenn der LCM im Debugmodus ausgeführt wird, bietet das Cmdlet Invoke-DscResource
keine Informationen zum Runspace, mit dem zum Debuggen eine Verbindung hergestellt werden soll. Weitere Informationen finden Sie unter Debuggen von DSC-Ressourcen.
Lösung: Ermitteln und Anfügen an den Runspace mithilfe der Cmdlets Get-PSHostProcessInfo
, Enter-PSHostProcess
, Get-Runspace
und Debug-Runspace
zum Debuggen der DSC-Ressource.
# 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
Verschiedene Teilkonfigurationsdokumente für denselben Knoten dürfen keine identischen Ressourcennamen aufweisen
Wenn mehrere Teilkonfigurationen, die auf einem einzelnen Knoten bereitgestellt sind, identische Ressourcennamen aufweisen, kann ein Laufzeitfehler auftreten.
Lösung: Verwenden Sie auch für die gleichen Ressourcen in verschiedenen Teilkonfigurationen verschiedene Namen.
„Start-DscConfiguration –UseExisting“ funktioniert nicht mit „-Credential“
Bei Verwendung von Start-DscConfiguration
mit dem UseExisting wird der Parameter Credential ignoriert. DSC verwendet die Standardprozessidentität, um den Vorgang fortzusetzen. Dies bewirkt einen Fehler, wenn für das Fortsetzen auf einem Remoteknoten andere Anmeldeinformationen benötigt werden.
Lösung: Verwenden Sie eine CIM-Sitzung für DSC-Remotevorgänge:
$session = New-CimSession -ComputerName $node -Credential $credential
Start-DscConfiguration -UseExisting -CimSession $session
IPv6-Adressen als Knotennamen in DSC-Konfigurationen
IPv6-Adressen als Knotennamen in DSC-Konfigurationsskripts werden in dieser Version nicht unterstützt.
Lösung: Keine.
Debuggen von Class-Based
DSC-Ressourcen
Das Debuggen klassenbasierter DSC-Ressourcen wird in dieser Version nicht unterstützt.
Lösung: Keine.
Variablen und Funktionen, die im Bereich „$script“ in klassenbasierten DSC-Ressourcen definiert werden, bleiben bei mehreren Aufrufen einer DSC-Ressource nicht erhalten.
Mehrere aufeinander folgende Aufrufe von Start-DSCConfiguration
misslingen, wenn die Konfiguration klassenbasierte Ressourcen mit im Bereich $script
definierten Variablen oder Funktionen verwendet.
Lösung: Definieren Sie alle Variablen und Funktionen in der DSC-Ressourcenklasse selbst. Keine Variablen/Funktionen aus dem Bereich $script
.
Debuggen von DSC-Ressourcen, wenn eine Ressource „PSDscRunAsCredential“ verwendet
Das Debuggen von DSC-Ressourcen, wenn eine Ressource PSDscRunAsCredential in der Konfiguration verwendet, wird in dieser Version nicht unterstützt.
Lösung: Keine.
„PsDscRunAsCredential“ wird für zusammengesetzte DSC-Ressourcen nicht unterstützt
Lösung: Verwenden Sie, falls verfügbar, die Eigenschaft „Credential“. Beispiel für „ServiceSet“ und „WindowsFeatureSet“
„-Syntax“ von „Get-DscResource“ spiegelt „PsDscRunAsCredential“ nicht ordnungsgemäß wider
Der Parameter Syntax spiegelt PsDscRunAsCredential nicht ordnungsgemäß wider, wenn ihn eine Ressource als erforderlich kennzeichnet oder nicht unterstützt.
Lösung: Keine. Die Erstellungskonfiguration in ISE spiegelt jedoch ordnungsgemäße Metadaten zur PsDscRunAsCredential-Eigenschaft wider, wenn IntelliSense verwendet wird.
„WindowsOptionalFeature“ ist unter Windows 7 nicht verfügbar
Die DSC-Ressource WindowsOptionalFeature ist unter Windows 7 nicht verfügbar. Diese Ressource erfordert das DISM-Modul und DISM-Cmdlets, die ab Windows 8 und in neueren Versionen des Windows-Betriebssystems verfügbar sind.
Bei klassenbasierten DSC-Ressourcen funktioniert „Import-DscResource-ModuleVersion“ möglicherweise nicht wie erwartet
Falls der Kompilierungsknoten mehrere Versionen eines klassenbasierten DSC-Ressourcenmoduls aufweist, wählt Import-DscResource -ModuleVersion
nicht die angegebene Version aus und folgender Kompilierungsfehler wird zurückgegeben.
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
Lösung: Importieren Sie die erforderliche Version, indem Sie das ModuleSpecification-Objekt auf den ModuleName-Parameter definieren, mit dem Schlüssel RequiredVersion festgelegt wie folgt :
Import-DscResource -ModuleName @{ModuleName='MyModuleName';RequiredVersion='1.2'}
Bei einigen DSC-Ressourcen, wie z. B. der Registrierungsressource, kann das Starten der Verarbeitung der Anforderung lange dauern.
Lösung 1: Erstellen Sie eine geplante Aufgabe zum regelmäßigen Bereinigen des folgenden Ordners.
$env:windir\system32\config\systemprofile\AppData\Local\Microsoft\Windows\PowerShell\CommandAnalysis
Lösung 2: Ändern Sie die DSC-Konfiguration so, dass der Ordner CommandAnalysis am Ende der Konfiguration bereinigt wird.
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'
}
}