我在推送模式下使用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
}
)
}