Windows

使用 Desired State Configuration (DSC) 靜默安裝 Web Deploy 失敗

  • February 26, 2016

對 DSC 來說絕對是全新的,所以我現在真的很困惑。我有一個基本配置,可確保安裝 IIS、.NET 4.5 和 MSMQ。我正在努力配置一個新的 Windows 2012 R2 實例來支持我們的應用程序。目前,我們的應用程序是使用 powershell over Web Deploy 部署的(工件是在 TeamCity 中使用 PSake/MSBuild 建構的)。

因此,我嘗試對 DSC 採取的下一步是在目標伺服器上安裝 Web Deploy。這是一個 MSI 下載,而不是我可以簡單地確保已安裝的“Windows 功能”。

所以我Script在我的 DSC 中有一個自定義項,它嘗試對 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 需要充實,但想減少這裡涉及的變數數量)

知道為什麼這會失敗嗎?(但沒有明顯的錯誤?)

由於您將 DSC 與 msi 文件一起使用,因此我建議您使用 Package Resource。然後,您可以確保它正在安裝而不是使用自定義腳本資源。請注意,名稱和產品 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"
}

引用自:https://serverfault.com/questions/759643