SCCM - 使用 PowerShell 更改现有的部署期限
SCCM - Change existing deployment deadlines with PowerShell
我们使用 SCCM 2016 安装 Microsoft 更新,并且有多个部署的截止日期是过去的日期。我希望能够使用脚本将这些截止日期推迟到未来的某个日期,因为使用 GUI 手动更改每个部署非常耗时。
此命令显示了我感兴趣的部署:
Get-CMDeployment | Select-Object -Property * | Where-Object {`
$_.SoftwareName -like '*SecurityUpdates*' -and $_.CollectionName -like '*Servers*'
}
我的研究表明我应该使用 Set-CMSoftwareUpdateDeployment
来修改现有部署的截止日期。然而,这就是我被困的地方。根据以下线程,我应该用来定义新截止日期的参数是 DeploymentExpireDay
和 DeploymentExpireTime
,并确保部署设置为必需:
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
查看 doco,参数列表中未列出 DeploymentExpireDay
和 DeploymentExpireTime
。列表中只有 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:\>
谁能告诉我我做错了什么?提前致谢!
您可能需要比 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)
我们使用 SCCM 2016 安装 Microsoft 更新,并且有多个部署的截止日期是过去的日期。我希望能够使用脚本将这些截止日期推迟到未来的某个日期,因为使用 GUI 手动更改每个部署非常耗时。
此命令显示了我感兴趣的部署:
Get-CMDeployment | Select-Object -Property * | Where-Object {`
$_.SoftwareName -like '*SecurityUpdates*' -and $_.CollectionName -like '*Servers*'
}
我的研究表明我应该使用 Set-CMSoftwareUpdateDeployment
来修改现有部署的截止日期。然而,这就是我被困的地方。根据以下线程,我应该用来定义新截止日期的参数是 DeploymentExpireDay
和 DeploymentExpireTime
,并确保部署设置为必需:
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
查看 doco,参数列表中未列出 DeploymentExpireDay
和 DeploymentExpireTime
。列表中只有 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:\>
谁能告诉我我做错了什么?提前致谢!
您可能需要比 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)