Я использую DSC в режиме push и настроил самозаверяющий сертификат на моей тестовой виртуальной машине для шифрования.Если я компилирую конфигурацию, переменная PSCredential зашифрована в файле MOF, и я могу успешно запустить конфигурацию, если вызову ее напрямую при использовании Start-DSCConfiguration.Если я использую ту же конфигурацию в качестве частичной конфигурации, все успешно компилируется и публикуется, задание запускается, но затем в журналах ошибок DSC я получаю:
Это событие указывает, что сбой происходит, когда LCM обрабатывает конфигурацию.Идентификатор ошибки 0x1.Сведения об ошибке: функция SendConfigurationApply не выполнена. Идентификатор ресурса - [SqlSetup] InstallDefaultInstance, а информация об источнике - C: \ SQL \ DSC \ SQLInstall.ps1 :: 57 :: 13 :: SqlSetup.Сообщение об ошибке: Ресурс PowerShell DSC MSFT_SqlSetup не удалось выполнить функцию Set-TargetResource с сообщением об ошибке: System.Exception: Test-TargetResource возвратил false после вызова Set-TargetResource..
Файл MOF идентичен (кроме зашифрованного пароля) и отлично шифрует для частичной и нормальной конфигурации, поэтому я думаю, что проблема заключается в попытке расшифровать пароль в частичной конфигурации.Переменная данных конфигурации одинакова в обоих случаях, похоже, что она связана с использованием партиалов.
Частичная конфигурация:
[DSCLocalConfigurationManager()]
configuration SQLBuildProcess
{
Node $env:COMPUTERNAME
{
Settings
{
RefreshMode = 'Push'
ActionAfterReboot = 'ContinueConfiguration'
ConfigurationMode = 'ApplyOnly'
RebootNodeIfNeeded = $true
CertificateID = $node.CertificateID
}
PartialConfiguration SQLInstall
{
Description = 'Automated unattended installation of SQL Server, dependent objects and Management Studio'
RefreshMode = 'Push'
}
PartialConfiguration SQLConfigure
{
Description = 'Automated configuration of SQL Server.'
DependsOn = '[PartialConfiguration]SQLInstall'
RefreshMode = 'Push'
}
}
}
Без частичной конфигурации:
[DSCLocalConfigurationManager()]
configuration LCMConfig
{
Node $env:ComputerName
{
Settings
{
RefreshMode = 'Push'
ActionAfterReboot = 'ContinueConfiguration'
ConfigurationMode = 'ApplyOnly'
RebootNodeIfNeeded = $true
CertificateID = $Node.CertificateID
}
}
}
И это переменная данных конфигурации.Он находится в «файле драйвера», который компилирует и публикует конфигурации, а не в файле SQLInstall (я попытался добавить его и получил ту же ошибку).
$ConfigurationData = @{
AllNodes = @(
@{
NodeName = $env:COMPUTERNAME
CertificateId = (Get-SelfSignedCertificateID).Thumbprint
}
)
}