如何使用 Powershell 接受通过 SCCM 部署的软件更新的 EULA

如何使用 Powershell 接受通过 SCCM 部署的软件更新的 EULA

我正在尝试使用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 方法的文章,但我不知道如何在更新时调用它,因为更新的类型为 SMS_SoftwareUpdate,但是当我通过管道传输到时该方法未列出Get-Member,当然,只是随意尝试调用该方法会引发错误。

总而言之,这就是我所遇到的问题:我不知道如何在特定的 SMS_SoftwareUpdate 对象上调用此 WMI 方法,如果这有区别的话,使用 powershell 也是如此。

答案1

那么,既然没人阅读 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

相关内容