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