【问题标题】:SCCM - Change existing deployment deadlines with PowerShellSCCM - 使用 PowerShell 更改现有的部署期限
【发布时间】:2018-10-10 18:36:46
【问题描述】:

我们使用 SCCM 2016 来安装 Microsoft 更新并进行多个部署,但截止日期已过。我希望能够使用脚本将这些截止日期推迟到未来的日期,因为使用 GUI 手动更改每个部署非常耗时。

这个命令显示了我感兴趣的部署:

Get-CMDeployment | Select-Object -Property * | Where-Object {`
$_.SoftwareName -like '*SecurityUpdates*' -and $_.CollectionName -like '*Servers*'
}

我的研究表明我应该使用Set-CMSoftwareUpdateDeployment 来修改现有部署的截止日期。然而,这就是我卡住的地方。根据以下线程,我应该用来定义新期限的参数是DeploymentExpireDayDeploymentExpireTime,并确保部署设置为必需: https://social.technet.microsoft.com/Forums/ie/en-US/11f977f4-09d1-4127-b8ce-7cdb19c88d1b/update-deployment-installation-deadlines-via-powershell?forum=configmanagersecurity

不确定如何构造一个工作命令,我查阅了 cmdlet 的 MS 文档:https://docs.microsoft.com/en-us/powershell/module/configurationmanager/set-cmsoftwareupdatedeployment?view=sccm-ps

查看文档,DeploymentExpireDayDeploymentExpireTime 未在参数列表中列出。只有DeploymentExpireDateTime 在列表中。然而,为了增加混淆,这两个参数包含在示例中,而 DeploymentExpireDateTime 没有。

我这样连接到 SCCM:

#Load Configuration Manager PowerShell Module
Import-module ($Env:SMS_ADMIN_UI_PATH.Substring(0,$Env:SMS_ADMIN_UI_PATH.Length-5) + '\ConfigurationManager.psd1')

#Get SiteCode and set Powershell Drive
$SiteCode = (Get-PSDrive -PSProvider CMSITE).Name
Push-Location "$($SiteCode):\"    

我试过了:

$DeadlineDay = Get-Date -Month 11 -Day 08 -Year 2018
$DeadlineTime = Get-Date -Hour 16 -Minute 0 -Second 0

Set-CMSoftwareUpdateDeployment `
-DeploymentName "Deployment Name" `
-DeploymentType Required `
-DeploymentExpireDay $DeadlineDay `
-DeploymentExpireTime $DeadlineTime

但我明白了:

Set-CMSoftwareUpdateDeployment : A parameter cannot be found that matches parameter name 'DeploymentExpireDay'.
At line:1 char:104
+ ... ment Name" -DeploymentType Required -DeploymentExpireDay $Deadli ...
+                                              ~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Set-CMSoftwareUpdateDeployment], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.ConfigurationManagement.Cmdlets.Deployments.Commands.SetSoftwareUpdateDeploymentCommand

所以我尝试了这个:

$date = (Get-Date).AddDays(20)
Set-CMSoftwareUpdateDeployment `
-DeploymentName "Deployment Name" `
-DeploymentType Required `
-DeploymentExpireDateTime $date

但我明白了:

cmdlet Set-CMSoftwareUpdateDeployment at command pipeline position 1
Supply values for the following parameters:
InputObject: 
PS SCM:\>

谁能告诉我我做错了什么?提前致谢!

【问题讨论】:

    标签: powershell sccm


    【解决方案1】:

    除了 DeploymentName 之外,您可能还需要更多信息才能使其可识别。尝试指定参数 -SoftwareUpdateGroupName 以及 -DeploymentName 所以

    $date = (Get-Date).AddDays(20)
    Set-CMSoftwareUpdateDeployment `
    -DeploymentName "Deployment Name" `
    -SoftwareUpdateGroupName "Software Update Group Name" `
    -DeploymentType Required `
    -DeploymentExpireDateTime $date
    

    如果您不知道软件更新组名称,我会走完全不同的路线。

    首先获取部署

    Get-CMSoftwareUpdateDeployment 
    

    我认为在您的情况下,无论如何您都会想要所有这些,但如果不是,您可能必须使用“where”进行过滤,因为 -Name 参数似乎已损坏。

    然后使用您获得的对象作为 Set-CMSoftwareUpdateDeployment 的 InputObject 输入名称并修改时间:

    Get-CMSoftwareUpdateDeployment | where {$_.AssignmentName -eq "Deployment Name"}
    | Set-CMSoftwareUpdateDeployment -DeploymentExpireDateTime (Get-Date).AddDays(20)
    

    【讨论】:

    • 谢谢,但如何获取现有部署的软件更新组名称?我知道 Get-CMSoftwareUpdateGroup 为我提供了 SCCM 中的软件更新组,但我需要知道现有部署的那些,以便我可以使用 SoftwareUpdateGroupName 使用相同的值而不是新的值来更新部署。
    • 我刚刚注意到 softwareupdategroup 在 cmdlet 中没有指向 softwareupdatedeployment 的链接。我认为可以通过 wmi 获得此连接,但因为它只是调用 cmdlet 并且可以以不同的方式调用它,所以我用备用路由编辑了我的答案
    • 谢谢你的工作!!! :))))) 非常感谢您的大力帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 2017-12-10
    • 2016-10-13
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多