Powershell

如何接受 EULA 以使用 Powershell 通過 SCCM 部署的軟體更新

  • July 9, 2014

我正在嘗試使用Start-CMSoftwareUpdateDeploymentcmdlet 將軟體更新組部署到現有集合。

PS WHO:\> Start-CMSoftwareUpdateDeployment -SoftwareUpdateGroupName "Update Group - Microsoft Updates" -CollectionName `
Eval_OSUpdates -DeploymentType Required -SendWakeUpPacket $true -AllowRestart $true -PersistOnWriteFilterDevice $true `
-DownloadFromMicrosoftUpdate $true -DeploymentName "Evaluation Deployment - Update Group - Microsoft Updates" `
-UserNotification DisplayAll -RestartWorkstation $false -AllowUseMeteredNetwork $true

給出了所有必需的參數,但是我在執行時收到以下錯誤:

Start-CMSoftwareUpdateDeployment : ConfigMgr Error Object:
instance of SMS_ExtendedStatus
{
   Description = "One or more updates are present for which a EULA exists which hasn't been approved.";
   ErrorCode = 1078462208;
   File = "e:\\nts_sccm_release\\sms\\siteserver\\sdk_provider\\smsprov\\sspciassignment.cpp";
   Line = 361;
   Operation = "PutInstance";
   ParameterInfo = "";
   ProviderName = "ExtnProv";
   StatusCode = 2147749889;
};
At line:1 char:1
+ Start-CMSoftwareUpdateDeployment -SoftwareUpdateGroupName "SoM Update Group - Mi ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   + CategoryInfo          : NotSpecified: (Microsoft.Confi...ploymentCommand:StartSoftwareUpdateDeploymentCommand) [Start-CMSoftware
  UpdateDeployment], WqlQueryException
   + FullyQualifiedErrorId : UnhandledExeception,Microsoft.ConfigurationManagement.Cmdlets.Sum.Commands.StartSoftwareUpdateDeployment
  Command

我很確定我知道哪個更新需要 EULA 接受,但是在嘗試自動執行此操作時,最好以程式方式接受任何 EULA,並且在此過程中沒有手動步驟。

我看到了 cmdlet Get-SoftwareUpdateLicense,但所做的只是返回一個血淋淋的 EULA字元串沒有人閱讀。

今天更近一步,我發現了一篇關於 AcceptEULA 方法的MSDN文章,但我不知道如何在更新中呼叫它,因為更新的類型是 SMS_SoftwareUpdate,但是當我通過管道傳輸Get-Member到當然只是試圖隨意呼叫該方法會引發錯誤。

總而言之,這就是我所困的地方:我不知道如何在特定的 SMS_SoftwareUpdate 對像上呼叫此 WMI 方法,如果這會有所不同,請使用 powershell。

好吧,既然沒有人閱讀 EULA,您為什麼不全部接受它們呢?

Get-WmiObject -ComputerName "sccmcs" -Class SMS_SoftwareUpdate -Namespace root\sms\site_ABC | 
   where {$_.EULAExists -eq $true} |
   foreach {$_.AcceptEula($true)}

要驗證您可以在之前和之後執行它

Get-WmiObject -ComputerName "sccmcs" -Class SMS_SoftwareUpdate -Namespace root\sms\site_ABC | 
   where {$_.EULAExists -eq $true} | select LocalizedDisplayName, EULAExists, EULAAccepted, EULASignoffDate, EULASignoffUser | ft

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