使用DSC部分配置和SqlSetup

时间:2019-05-13 08:48:57

标签: sql-server dsc

我在推送模式下使用DSC,并已在测试VM上配置了自签名证书以进行加密。如果我编译配置,则PSCredential变量将在MOF文件中加密,如果在使用Start-DSCConfiguration时直接调用它,则可以成功启动该配置。如果我使用与部分配置相同的配置,那么所有内容都可以成功编译并成功发布,则该作业可以运行,但是在DSC错误日志中,我得到:

此事件指示LCM处理配置时发生故障。错误ID为0x1。错误详细信息是SendConfigurationApply函数未成功。。资源ID为[SqlSetup] InstallDefaultInstance,源信息为C:\ SQL \ DSC \ SQLInstall.ps1 :: 57 :: 13 :: SqlSetup。错误消息是PowerShell DSC资源MSFT_SqlSetup无法执行Set-TargetResource功能,并显示错误消息:System.Exception:调用Set-TargetResource后,Test-TargetResource返回false。

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
        }
    )
}

0 个答案:

没有答案