Известные проблемы и ограничения настройки требуемого состояния (DSC)
Критическое изменение: сертификаты, используемые для шифрования и расшифровки паролей в конфигурациях DSC, могут не работать после установки WMF 5.0 RTM
В выпусках WMF 4.0 и WMF 5.0 Preview DSC не позволял использовать в конфигурациях пароли длиннее 121 символов. DSC требовал использования коротких паролей даже в тех случаях, когда были нужны длинные и надежные пароли. Это критическое изменение позволяет использовать в конфигурации DSC пароли произвольной длины.
Решение. Повторно создайте сертификат с использованием шифрования ключа или данных и расширенного ключа шифрования документов (1.3.6.1.4.1.311.80.1). Дополнительные сведения см. в статье Protect-CmsMessage.
После установки WMF 5.0 RTM может произойти сбой командлетов DSC
Start-DscConfiguration
и другие командлеты DSC могут завершаться со сбоем после установки WMF 5.0 RTM, выдавая следующую ошибку:
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
Решение. Удалите DSCEngineCache.mof, выполнив следующую команду в сеансе PowerShell с повышенными правами ("Запуск от имени администратора"):
Remove-Item -Path $env:SystemRoot\system32\Configuration\DSCEngineCache.mof
Командлеты DSC могут не работать в случае установки WMF 5.0 RTM поверх WMF 5.0 Production Preview
Решение. Выполните следующую команду в сеансе PowerShell с повышенными правами ("Запуск от имени администратора"):
mofcomp $env:windir\system32\wbem\DscCoreConfProv.mof
LCM может перейти в нестабильное состояние при использовании Get-DscConfiguration в DebugMode
Когда LCM работает в режиме DebugMode, нажатие клавиш CTRL+C для остановки обработки Get-DscConfiguration
может привести к переключению LCM в нестабильное состояние, в котором не работает большинство командлетов DSC.
Решение. Не нажимайте клавиши CTRL+C во время отладки командлета Get-DscConfiguration
.
STOP-DscConfiguration может не отвечать в DebugMode
Когда LCM находится в режиме DebugMode, Stop-DscConfiguration
может не отвечать при попытке остановить операцию, запущенную Get-DscConfiguration
Решение. Завершите отладку операции, запущенной Get-DscConfiguration
, как описано в статье Отладка ресурсов DSC.
В DebugMode не отображаются подробные сообщения об ошибках
Когда LCM находится в режиме DebugMode, не отображаются подробные сообщения об ошибках из ресурсов DSC.
Решение. Отключите DebugMode для просмотра подробных сообщений из ресурсов.
Командлету Get-DscConfigurationStatus не удается получить операции Invoke-DscResource
После использования командлета Invoke-DscResource
для прямого вызова методов любого ресурса записи такой операции не удается извлечь с помощью Get-DscConfigurationStatus
.
Решение. Нет.
Get-DscConfigurationStatus возвращает операции цикла извлечения с типом Consistency
Когда узел переведен в режим обновления PULL, для каждой выполненной операции извлечения командлет Get-DscConfigurationStatus
сообщает тип операции, как Consistency, а не Initial.
Решение. Нет.
Командлет Invoke-DscResource не возвращает сообщения в том порядке, в котором они были созданы
Командлет Invoke-DscResource
не возвращает подробные сообщения, предупреждения и сообщения об ошибках в том порядке, в котором они были созданы LCM или ресурсом DSC.
Решение. Нет.
Невозможна простая отладка ресурсов DSC при использовании Invoke-DscResource
Когда LCM работает в режиме отладки, командлет Invoke-DscResource
не предоставляет сведения о пространстве выполнения, к которому нужно подключиться для отладки. Дополнительные сведения см. в разделе Отладка ресурсов DSC.
Решение. Найдите пространство выполнения и подключитесь к нему с помощью командлетов Get-PSHostProcessInfo
, Enter-PSHostProcess
, Get-Runspace
и Debug-Runspace
для отладки ресурса 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
Различные документы неполной конфигурации для одного узла не могут иметь одинаковые имена ресурсов
Идентичные имена ресурсов для нескольких неполных конфигураций, развернутых на одном узле, приводят к ошибке во время выполнения.
Решение. Используйте разные имена для одинаковых ресурсов в различных неполных конфигурациях.
Start-DscConfiguration –UseExisting не работает с параметром -Credential
При использовании Start-DscConfiguration
с параметром UseExisting параметр Credential игнорируется. DSC использует удостоверение процесса по умолчанию для продолжения операции. Это вызывает ошибку, если для продолжения работы на удаленном узле требуются другие учетные данные.
Решение. Используйте сеанс CIM для удаленных операций DSC:
$session = New-CimSession -ComputerName $node -Credential $credential
Start-DscConfiguration -UseExisting -CimSession $session
IPv6-адреса в качестве имен узлов в конфигурациях DSC
В этом выпуске не поддерживается использование IPv6-адресов в качестве имен узлов в сценариях конфигурации DSC.
Решение. Нет.
Отладка ресурсов DSC Class-Based
В этом выпуске отладка ресурсов DSC на основе классов не поддерживается.
Решение. Нет.
Переменные и функции, определенные в области $script, основанной на классе ресурса DSC, не сохраняются между несколькими вызовами ресурса DSC
Несколько последовательных вызовов Start-DSCConfiguration
завершаются ошибкой, если конфигурация использует любой ресурс на основе класса, у которого переменные или функции определены в области $script
.
Решение. Определите все переменные и функции в самом классе ресурса DSC. Переменных и функций области $script
быть не должно.
Отладка ресурсов DSC, когда ресурс использует PSDscRunAsCredential
В этом выпуске отладка ресурсов DSC, когда ресурс использует свойство PSDscRunAsCredential в конфигурации, не поддерживается.
Решение. Нет.
PsDscRunAsCredential не поддерживается для составных ресурсов DSC
Решение. Используйте свойство Credential, если оно доступно. Например, ServiceSet и WindowsFeatureSet.
Get-DscResource -Syntax неправильно отражает PsDscRunAsCredential
Параметр Synta отражает PsDscRunAsCredential неправильно, когда ресурс помечает его как обязательный или не поддерживает его.
Решение. Нет. Однако создание конфигурации в интегрированной среде сценариев отражает правильные метаданные о свойстве PsDscRunAsCredential при использовании технологии IntelliSense.
WindowsOptionalFeature недоступен в Windows 7
Ресурс DSC WindowsOptionalFeature недоступен в Windows 7. Он требует наличия модуля и командлетов DISM, которые доступны только в Windows 8 и более поздних выпусках.
Для ресурсов DSC на основе классов командлет Import-DscResource -ModuleVersion может не работать, как ожидалось
Если у узла компиляции несколько версий модуля ресурса DSC на основе класса, Import-DscResource -ModuleVersion
не может получить указанную версию и вызывает следующую ошибку компиляции.
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
Решение. Импортируйте требуемую версию, определив объект ModuleSpecification параметра ModuleName с ключом RequiredVersion, указанным следующим образом:
Import-DscResource -ModuleName @{ModuleName='MyModuleName';RequiredVersion='1.2'}
Для обработки запросов некоторым ресурсам DSC, например ресурсу реестра, может требоваться много времени.
Решение 1. Создайте запланированную задачу, которая периодически очищает папку.
$env:windir\system32\config\systemprofile\AppData\Local\Microsoft\Windows\PowerShell\CommandAnalysis
Решение 2. Измените конфигурацию DSC так, чтобы очистка папки CommandAnalysis выполнялась в конце конфигурации.
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'
}
}