Проблема с шифрованием учетных данных при использовании частичных конфигураций DSC и SqlSetup - PullRequest
0 голосов
/ 13 мая 2019

Я использую 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
        }
    )
}
...