Desired State Configuration (DSC) Znane problemy i ograniczenia

Zmiana przerywana: Certyfikaty używane do szyfrowania/odszyfrowywania haseł w konfiguracjach DSC mogą nie działać po zainstalowaniu programu WMF 5.0 RTM

W wersjach zapoznawczych programu WMF 4.0 i WMF 5.0 konfiguracja DSC nie zezwala na hasła o długości większej niż 121 znaków. DsC był wymuś użycie krótkich haseł, nawet jeśli wymagane było długie i silne hasło. Ta zmiana przerywania umożliwia hasła o dowolnej długości w konfiguracji DSC.

Rozwiązanie: Utwórz ponownie certyfikat przy użyciu szyfrowania danych lub klucza szyfrowania i rozszerzonego użycia klucza szyfrowania dokumentów (1.3.6.1.4.1.311.80.1). Aby uzyskać więcej informacji, zobacz Protect-CmsMessage.

Polecenia cmdlet DSC mogą się nie powieść po zainstalowaniu programu WMF 5.0 RTM

Start-DscConfiguration i inne polecenia cmdlet DSC mogą ulec awarii po zainstalowaniu programu WMF 5.0 RTM z następującym błędem:

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

Rozwiązanie: Usuń plik DSCEngineCache.mof, uruchamiając następujące polecenie w sesji programu PowerShell z podwyższonym poziomem uprawnień (Uruchom jako administrator):

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

Polecenia cmdlet DSC mogą nie działać, jeśli program WMF 5.0 RTM jest zainstalowany w wersji produkcyjnej programu WMF 5.0

Rozwiązanie: Uruchom następujące polecenie w sesji programu PowerShell z podwyższonym poziomem uprawnień (uruchom jako administrator):

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

LcM może przejść w stan niestabilny podczas korzystania z Get-DscConfiguration w trybie DebugMode

Jeśli tryb LCM jest w trybie DebugMode, naciśnięcie kombinacji klawiszy CTRL +C w celu zatrzymania przetwarzania może spowodować niestabilność narzędzia LCM w taki sposób, że większość polecenia Get-DscConfiguration cmdlet DSC nie będzie działać.

Rozwiązanie: Nie naciskaj klawiszy CTRL+C podczas debugowania Get-DscConfiguration polecenia cmdlet.

Stop-DscConfiguration może nie odpowiadać w trybie DebugMode

Jeśli lcm jest w trybie DebugMode, może nie odpowiadać podczas próby Stop-DscConfiguration zatrzymania operacji uruchomionej przez Get-DscConfiguration

Rozwiązanie: Zakończ debugowanie operacji rozpoczętej przez , Get-DscConfiguration jak opisano w części Debugowanie zasobów DSC.

W trybie DebugMode nie są wyświetlane żadne pełne komunikaty o błędach

Jeśli lcm jest w trybie DebugMode, nie są wyświetlane żadne pełne komunikaty o błędach z zasobów DSC.

Rozwiązanie: Wyłącz tryb DebugMode, aby wyświetlić pełne komunikaty z zasobu

Invoke-DscResource nie można pobrać operacji przy Get-DscConfigurationStatus cmdlet

Po użyciu polecenia cmdlet do bezpośredniego wywoływania metod dowolnego zasobu nie można pobrać rekordów takiej operacji za Invoke-DscResource pośrednictwem metody Get-DscConfigurationStatus .

Rozwiązanie: Brak.

Get-DscConfigurationStatus zwraca operacje cyklu ściągania jako typ Spójność

Gdy węzeł jest ustawiony na tryb odświeżania ŚCIĄGANIA, dla każdej wykonanej operacji ściągania polecenie cmdlet zgłasza typ operacji Get-DscConfigurationStatus jako Spójność zamiast Initial

Rozwiązanie: Brak.

Invoke-DscResource cmdlet nie zwraca komunikatu w kolejności ich produkcji

Polecenie cmdlet nie zwraca pełnych, ostrzegawczych i komunikatów o błędach w kolejności, w których zostały one wytłane przez Invoke-DscResource lcm lub zasób DSC.

Rozwiązanie: Brak.

Zasobów DSC nie można łatwo debugować w przypadku korzystania z Invoke-DscResource

Gdy narzędzie LCM jest uruchomione w trybie debugowania, polecenie cmdlet nie zawiera informacji o przestrzeni uruchamiania, z którym ma nawiązać połączenie Invoke-DscResource na potrzeby debugowania. Aby uzyskać więcej informacji, zobacz Debugowanie zasobów DSC.

Rozwiązanie: Odnajdywanie i dołączanie do przestrzeni uruchamiania przy użyciu polecenia cmdlet , i w celu Get-PSHostProcessInfo Enter-PSHostProcess Get-Runspace Debug-Runspace debugowania zasobu 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

Różne dokumenty częściowej konfiguracji dla tego samego węzła nie mogą mieć identycznych nazw zasobów

W przypadku kilku częściowych konfiguracji wdrożonych w jednym węźle identyczne nazwy zasobów powodują błąd czasu działania.

Rozwiązanie: Użyj różnych nazw dla tych samych zasobów w różnych konfiguracjach częściowych.

Start-DscConfiguration — useExisting nie działa z -Credential

W przypadku Start-DscConfiguration korzystania z parametru UseExisting parametr Credential jest ignorowany. DsC używa domyślnej tożsamości procesu, aby kontynuować operację. Powoduje to błąd, gdy do kontynuowania pracy w węźle zdalnym jest wymagane inne poświadczenie.

Rozwiązanie: Użyj sesji modelu CIM dla zdalnych operacji DSC:

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

Adresy IPv6 jako nazwy węzłów w konfiguracjach DSC

Adresy IPv6 jako nazwy węzłów w skryptach konfiguracji DSC nie są obsługiwane w tej wersji.

Rozwiązanie: Brak.

Debugowanie Class-Based zasobów DSC

Debugowanie zasobów DSC opartych na klasach nie jest obsługiwane w tej wersji.

Rozwiązanie: Brak.

Zmienne i funkcje zdefiniowane w zakresie $script w zasobie Class-Based DSC nie są zachowywane w wielu wywołaniach zasobu DSC

Wiele kolejnych wywołań kończy się niepowodzeniem, jeśli konfiguracja używa dowolnego zasobu opartego na klasie, który ma zmienne Start-DSCConfiguration lub funkcje zdefiniowane w $script zakresie.

Rozwiązanie: Zdefiniuj wszystkie zmienne i funkcje w samej klasie zasobów DSC. Brak $script zmiennych/funkcji zakresu.

Debugowanie zasobów DSC, gdy zasób używa klasy PSDscRunAsCredential

Debugowanie zasobów DSC, gdy zasób używa właściwości PSDscRunAsCredential w konfiguracji, nie jest obsługiwane w tej wersji.

Rozwiązanie: Brak.

Element PsDscRunAsCredential nie jest obsługiwany w przypadku zasobów złożonych DSC

Rozwiązanie: Użyj właściwości Credential, jeśli jest dostępna. Przykładowe zestawy usług i zestaw WindowsFeatureSet

Get-DscResource - Składnia nie odzwierciedla Poprawnie PsDscRunAsCredential

Parametr Składnia nie odzwierciedla poprawnie parametru PsDscRunAsCredential, gdy zasób oznacza go jako obowiązkowy lub go nie obsługuje.

Rozwiązanie: Brak. Jednak konfiguracja tworzenia w programie ISE odzwierciedla poprawne metadane dotyczące właściwości PsDscRunAsCredential podczas korzystania z funkcji IntelliSense.

Funkcja WindowsOptionalFeature nie jest dostępna w wersji Windows 7

Zasób DSC WindowsOptionalFeature nie jest dostępny w wersji Windows 7. Ten zasób wymaga modułu DISM i polecenia cmdlet DISM, które są dostępne w Windows 8 i nowszej wersji Windows operacyjnego.

W przypadku zasobów DSC opartych na klasach Import-DscResource -ModuleVersion może nie działać zgodnie z oczekiwaniami

Jeśli węzeł kompilacji ma wiele wersji modułu zasobów DSC opartego na klasie, program nie wybiera określonej wersji i Import-DscResource -ModuleVersion powoduje następujący błąd kompilacji.

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

Rozwiązanie: Zaimportuj wymaganą wersję, definiując obiekt ModuleSpecification do parametru ModuleName z kluczem RequiredVersion określonym w następujący sposób:

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

Przetwarzanie żądania przez niektóre zasoby DSC, takie jak zasób rejestru, może zająć dużo czasu.

Rozwiązanie 1: Utwórz zadanie harmonogramu, które okresowo czyści następujący folder.

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

Rozwiązanie 2. Zmień konfigurację DSC, aby wyczyścić folder CommandAnalysis na końcu konfiguracji.

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