我对 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"
}