SCCM - измените существующие сроки развертывания с помощью PowerShell - PullRequest
0 голосов
/ 10 октября 2018

Мы используем SCCM 2016 для установки обновлений Microsoft и осуществляем несколько развертываний со сроками прошлых дат.Я хотел бы иметь возможность перенести эти сроки на будущую дату с помощью сценария, поскольку изменение вручную для каждого развертывания с помощью графического интерфейса занимает много времени.

enter image description here

Эта команда показывает мне интересующие развертывания:

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

Не знаете, как создатьРаботая команда, я обратился к документации MS командлета: https://docs.microsoft.com/en-us/powershell/module/configurationmanager/set-cmsoftwareupdatedeployment?view=sccm-ps

Глядя на документ, 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:\>

Может кто-нибудьСкажите мне, что я делаю не так?Заранее спасибо!

1 Ответ

0 голосов
/ 10 октября 2018

Возможно, вам нужно больше информации, чем просто DeploymentName, чтобы сделать это узнаваемым.Попробуйте указать параметр -SoftwareUpdateGroupName, также как -DeploymentName, поэтому

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

Если вы не знаете имя группы обновлений программного обеспечения, я бы пошел совершенно другим путем.

Сначала получитеразвертывания с

Get-CMSoftwareUpdateDeployment 

Я думаю, что в любом случае вам все равно понадобятся все из них, но если нет, то вам, вероятно, придется фильтровать с ", где ", потому что параметр -Name кажетсяне работает.

Затем используйте объекты, которые вы получаете как InputObject для Set-CMSoftwareUpdateDeployment, вставив имя и изменив время:

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