SCCM-使用PowerShell更改现有部署截止日期

SCCM-使用PowerShell更改现有部署截止日期,powershell,sccm,Powershell,Sccm,我们使用SCCM 2016安装Microsoft更新,并有多个部署,最后期限为过去日期。我希望能够使用脚本将这些截止日期推到将来的某个日期,因为使用GUI手动更改每个部署非常耗时 此命令显示感兴趣的部署: Get-CMDeployment | Select-Object -Property * | Where-Object {` $_.SoftwareName -like '*SecurityUpdates*' -and $_.CollectionName -like '*Servers*'

我们使用SCCM 2016安装Microsoft更新,并有多个部署,最后期限为过去日期。我希望能够使用脚本将这些截止日期推到将来的某个日期,因为使用GUI手动更改每个部署非常耗时

此命令显示感兴趣的部署:

Get-CMDeployment | Select-Object -Property * | Where-Object {`
$_.SoftwareName -like '*SecurityUpdates*' -and $_.CollectionName -like '*Servers*'
}
我的研究表明,我应该使用
设置CMSoftwareUpdateDeployment
来修改现有部署的截止日期。然而,这就是我被困的地方。根据下面的线程,我应该使用参数来定义新的截止日期是
DeploymentExpireDay
DeploymentExpireTime
,并确保部署设置为required:

不确定如何构造工作命令,我查阅了cmdlet的MS文档:

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

我像这样连接到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
$date = (Get-Date).AddDays(20)
Set-CMSoftwareUpdateDeployment `
-DeploymentName "Deployment Name" `
-DeploymentType Required `
-DeploymentExpireDateTime $date
但我明白了:

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
cmdlet Set-CMSoftwareUpdateDeployment at command pipeline position 1
Supply values for the following parameters:
InputObject: 
PS SCM:\>
所以我试了一下:

$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
$date = (Get-Date).AddDays(20)
Set-CMSoftwareUpdateDeployment `
-DeploymentName "Deployment Name" `
-DeploymentType Required `
-DeploymentExpireDateTime $date
但我明白了:

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
cmdlet Set-CMSoftwareUpdateDeployment at command pipeline position 1
Supply values for the following parameters:
InputObject: 
PS SCM:\>

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

您可能需要更多信息,而不仅仅是DeploymentName,以使其易于识别。尝试指定参数-SoftwareUpdateGroupName以及-DeploymentName so

$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即可,而且可以以不同的方式调用它,因此我使用另一个路由编辑了我的答案(请确认您是否工作!!!:())())非常感谢你的帮助!