Udostępnij za pośrednictwem


Desired State Configuration (DSC) — znane problemy i ograniczenia

Zmiana powodująca niezgodność: certyfikaty używane do szyfrowania/odszyfrowywania haseł w konfiguracjach DSC mogą nie działać po zainstalowaniu programu WMF 5.0 RTM

W wersjach wersji zapoznawczych WMF 4.0 i WMF 5.0 DSC nie zezwala na hasła w konfiguracji o długości więcej niż 121 znaków. DSC zmuszał do używania krótkich haseł, nawet jeśli pożądane było długie i silne hasło. Ta zmiana powodująca niezgodność umożliwia używanie haseł o dowolnej długości w konfiguracji DSC.

Rozdzielczość: Utwórz ponownie certyfikat przy użyciu funkcji Szyfrowanie danych lub Użycie klucza szyfrowania kluczy oraz Rozszerzone użycie 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ą zakończyć się niepowodzeniem po zainstalowaniu programu WMF 5.0 RTM

Start-DscConfiguration i inne polecenia cmdlet DSC mogą zakończyć się niepowodzeniem 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

Rozdzielczość: 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 na platformie WMF 5.0 Production Preview

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

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

Narzędzie LCM może przejść do niestabilnego stanu podczas korzystania z Get-DscConfiguration w trybie DebugMode

Jeśli funkcja LCM jest w trybie DebugMode, naciśnij klawisze CTRL+C, aby zatrzymać przetwarzanie Get-DscConfiguration , może spowodować przejście LCM do niestabilnego stanu, tak aby większość poleceń cmdlet DSC nie działała.

Rozdzielczość: Nie naciskaj klawiszy CTRL+C podczas debugowania Get-DscConfiguration polecenia cmdlet.

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

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

Rozdzielczość: Zakończ debugowanie operacji rozpoczętej zgodnie Get-DscConfiguration z opisem w temacie Debugowanie zasobów DSC.

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

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

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

nie można pobrać operacji Invoke-DscResource za pomocą polecenia cmdlet Get-DscConfigurationStatus

Po użyciu Invoke-DscResource polecenia cmdlet do bezpośredniego wywołania metod zasobów nie można pobrać rekordów takiej operacji za pomocą polecenia Get-DscConfigurationStatus.

Rozdzielczość: Brak.

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

Gdy węzeł jest ustawiony na tryb odświeżania PULL, dla każdej wykonanej Get-DscConfigurationStatus operacji ściągnięcia polecenie cmdlet zgłasza typ operacji jako Spójność zamiast Początkowe

Rozdzielczość: Brak.

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

Polecenie Invoke-DscResource cmdlet nie zwraca pełnych, ostrzegawczych i komunikatów o błędach w kolejności, w której zostały one wygenerowane przez usługę LCM lub zasób DSC.

Rozdzielczość: Brak.

Nie można łatwo debugować zasobów DSC w przypadku użycia z Invoke-DscResource

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

Rozdzielczość: Odnajdywanie i dołączanie do przestrzeni uruchomieniowej przy użyciu poleceń cmdlet Get-PSHostProcessInfo, Enter-PSHostProcessGet-Runspace i Debug-Runspace w celu 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 konfiguracji częściowej 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 wykonywania.

Rozdzielczość: Użyj różnych nazw dla nawet tych samych zasobów w różnych konfiguracjach częściowych.

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

W przypadku korzystania Start-DscConfiguration z parametru UseExisting parametr Credential jest ignorowany. DsC używa domyślnej tożsamości procesu do kontynuowania operacji. Powoduje to błąd, gdy konieczne jest kontynuowanie innego poświadczenia w węźle zdalnym.

Rozdzielczość: Użyj sesji ciągłej integracji 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.

Rozdzielczość: Brak.

Class-Based Debugowanie zasobów DSC

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

Rozdzielczość: Brak.

Zmienne i funkcje zdefiniowane w zakresie $script w usłudze DSC Class-Based Zasób nie są zachowywane w wielu wywołaniach zasobu DSC

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

Rozdzielczość: Zdefiniuj wszystkie zmienne i funkcje w samej klasie zasobów DSC. Brak $script zmiennych/funkcji zakresu.

Debugowanie zasobów DSC, gdy zasób korzysta z polecenia PSDscRunAsCredential

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

Rozdzielczość: Brak.

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

Rozdzielczość: Jeśli jest dostępna, użyj właściwości Credential. Przykładowy zestaw usług i windowsFeatureSet

Get-DscResource — Składnia nie odzwierciedla poprawnie elementu PsDscRunAsCredential

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

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

WindowsOptionalFeature nie jest dostępna w systemie Windows 7

Zasób DSC WindowsOptionalFeature Jest niedostępny w systemie Windows 7. Ten zasób wymaga modułu DISM i poleceń cmdlet DISM, które są dostępne począwszy od Windows 8 i nowszych wersji systemu operacyjnego Windows.

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, Import-DscResource -ModuleVersion nie wybiera określonej wersji i 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

Rozdzielczość: 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'}

Niektóre zasoby DSC, takie jak zasób rejestru, mogą zająć dużo czasu na przetworzenie żądania.

Rozwiązanie 1: Twórca 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'
    }
}