使用所需状态配置 (DSC) 安装 Web Deploy 失败

使用所需状态配置 (DSC) 安装 Web Deploy 失败

我对 DSC 完全陌生,所以我现在真的在摸索着。我有一个基本配置,确保安装了 IIS、.NET 4.5 和 MSMQ。我正在努力配置一个新的 Windows 2012 R2 实例来支持我们的应用程序。目前,我们的应用程序是使用 powershell 通过 Web Deploy 部署的(工件是在 TeamCity 中使用 PSake/MSBuild 构建的)。

因此,我尝试使用 DSC 采取的下一步是在目标服务器上安装 Web Deploy。这是一个 MSI 下载,而不是我可以简单确保已安装的“Windows 功能”。

因此,我在 DSC 中自定义了一个脚本Script,尝试对 Web Deploy MSI 文件进行无人值守安装。该脚本

Script InstallWebDeploy
{
    GetScript =
    {
        $false
    }
    SetScript =
    {
        $cmd = "MSIEXEC /a 'C:\Temp\WebDeploy_amd64_en-US.msi' /passive" # have also tried /qn
        (Start-Process -FilePath "msiexec.exe" -ArgumentList "/a 'C:\Temp\WebDeploy_amd64_en-US.msi' /passive" -Wait -Passthru).ExitCode
    }
    TestScript =
    {
        $false
    }
}

生成 .mof 并使用它之后的结果是:

VERBOSE: [CORAPP4]: LCM:  [ Start  Resource ]  [[Script]InstallWebDeploy]
VERBOSE: [CORAPP4]: LCM:  [ Start  Test     ]  [[Script]InstallWebDeploy]
VERBOSE: [CORAPP4]: LCM:  [ End    Test     ]  [[Script]InstallWebDeploy]  in 0.0000 seconds.
VERBOSE: [CORAPP4]: LCM:  [ Start  Set      ]  [[Script]InstallWebDeploy]
VERBOSE: [CORAPP4]:                            [[Script]InstallWebDeploy] Performing the operation "Set-TargetResource"
 on target "Executing the SetScript with the user supplied credential".
VERBOSE: [CORAPP4]: LCM:  [ End    Set      ]  [[Script]InstallWebDeploy]  in 1.0430 seconds.
VERBOSE: [CORAPP4]: LCM:  [ End    Resource ]  [[Script]InstallWebDeploy]
VERBOSE: [CORAPP4]: LCM:  [ End    Set      ]    in  4.4783 seconds.
VERBOSE: Operation 'Invoke CimMethod' complete.
VERBOSE: Time taken for configuration job to complete is 4.214 seconds

但是,服务器上根本看不到 Web Deploy。(我意识到 Get-Script 和 Test-Script 需要充实,但想减少这里涉及的变量数量)

知道为什么会失败吗?(但没有明显的错误?)

答案1

由于您正在使用带有 msi 文件的 DSC,因此我建议使用包资源。然后您可以确保它正在安装,而不是使用自定义脚本资源。请注意,名称和产品 ID 属性必须与包匹配。我在下面根据您要安装的包提供了一个示例。

包资源文档链接:包资源 MSDN

WindowsFeature WebManagementService
{
    Ensure = "Present"
    Name = "Web-Mgmt-Service"
}

Package WebDeploy
{
     Ensure = "Present"
     Path  = "$Env:SystemDrive\TestFolder\WebDeploy_amd64_en-US.msi"
     Name = "Microsoft Web Deploy 3.5"
     LogPath = "$Env:SystemDrive\TestFolder\logoutput.txt"
     ProductId = "1A81DA24-AF0B-4406-970E-54400D6EC118"
     Arguments = "LicenseAccepted='0' ADDLOCAL=ALL"
}

相关内容