使用 Start-DSCConfiguration 将参数传递给脚本

Pass parameters to script using Start-DSCConfiguration

我的 DSC 配置如下所示

configuration DBServer
{
  param(
    [PSCredential]$SqlAdminCredential
  )

  node "localhost"
  {
    Script ConfigureSSRS {
      SetScript = {
        & sqlcmd -S $RSConnection -i $DBCreateFile -U $SQLAdminCredential.UserName -P $SQLAdminCredential.GetNetworkCredential().Password

我 运行 它在 Azure VM 上使用 JSON 模板部署和包含此 Properties 节点的 DSC 扩展:

"Properties": {
    "SqlAdminCredential": {
        "userName": "PrivateSettingsRef:SQLAdmin",
        "password": "PrivateSettingsRef:SQLAdminPass"
    },

这两个值确实在protectedSettings节点中定义:

"SQLAdmin": "[parameters('sqlAuthenticationLogin')]",
"SQLAdminPass": "[parameters('sqlAuthenticationPassword')]"

但是每当我尝试使用凭据时,上面列出的代码中都会出现空引用异常。我试过 $using:SqlAdminCredential,我相信昨天我也试过 $global:SqlAdminCredential

我目前正在尝试对此进行故障排除,但我不喜欢更改我的配置然后花费 15 分钟等待部署以查看它是否有效。但是,我无法弄清楚如何使用 Start-DscConfiguration 传递此凭据对象参数以便在现有 VM 上对其进行故障排除。我该怎么做?

如果你能解决我的实际问题并告诉我如何从 ConfigureSSRS.SetScript

内部访问 $SqlAdimCredential 加分

目前,我决定表现不佳并这样做:

configuration DBServer
{
  param(
    [PSCredential]$SqlAdminCredential
  )

  node "localhost"
  {
    $adminCreds = $SqlAdminCredential #a hack

    Script ConfigureSSRS {
      SetScript = {
        $SqlAdminCredential = $using:adminCreds

我会等待更好的解决方案,但这似乎有效。

您有以下选择:

  1. 如果您需要整个脚本在单个用户下 运行,请使用脚本资源的 PSDSCRunAsCredential。

  2. 创建您自己的使用 PSCredential 参数的 DSC 资源。