none
Удаление Software Update Groups Deployment через powershell RRS feed

  • Вопрос

  • Всем доброго времени суток.

    Задача состоит в том, чтобы периодически удалять старые Software Update Groups Deployment через powershell.

    На данный момент пытаюсь сделать это таким скриптом

    $softupdgrplist=Get-CMSoftwareUpdateGroup |where-object {($_.LocalizedDisplayName -match "SomeName") -and ($_.IsDeployed -eq $True)} |Select LocalizedDisplayName
    foreach ($softupd in $softupdgrplist){Get-CMDeployment |Where-Object {$_.SoftwareName -eq $softupd.LocalizedDisplayName}|Remove-CMDeployment }
    

    Однако он не работает, по причине того что Remove-CMDeployment не работает через pipeline после Get-CMDeployment. Также в качестве параметров Remove-CMDeployment хочет получать ApplicationName, который невозможно получить через Get-CMDeployment.

    Какие будут соображения по данному вопросу ?

Ответы

Все ответы

  • Привет,

    Посмотрите скрипт по ссылке внизу:

    ConfigMgr: Cleanup Software Updates Objects

    Модератор
  • Не часто пользуюсь PowerShell в ConfigMgr... Попробуйте так:

    $SoftwareUpdateGroups = Get-CMSoftwareUpdateGroup | ? {($_.LocalizedDisplayName -match "SomeName") -and ($_.IsDeployed -eq $True)}
    Foreach ($SoftwareUpdateGroup in $SoftwareUpdateGroups) {
    	$Deployment = Get-CMDeployment | ? {$_.CI_ID -eq $SoftwareUpdateGroup.CI_ID)
    	If ($Deployment) {Remove-CMDeployment -DeploymentId $Deployment.DeploymentID}
    }


    Vladimir Zelenov | http://systemcenter4all.wordpress.com

    Отвечающий
  • Привет,

    Посмотрите скрипт по ссылке внизу:

    ConfigMgr: Cleanup Software Updates Objects


    Спасибо за ссылку. В общем это не совсем то, но в указанном вами скрипте нашел указание на то, куда двигаться. Жаль что это нельзя целиком выполнить через командлеты Powershell.
  • Remove-CMDeployment вполне достаточно DeploymentId. В своем скрипте вы можете поправить строчку так:

    foreach ($softupd in $softupdgrplist){Get-CMDeployment | ? {$_.SoftwareName -eq $softupd.LocalizedDisplayName}| % {Remove-CMDeployment -DeploymentId $_.DeploymentId}}


    Vladimir Zelenov | http://systemcenter4all.wordpress.com

    Отвечающий
  • Remove-CMDeployment вполне достаточно DeploymentId. В своем скрипте вы можете поправить строчку так:

    foreach ($softupd in $softupdgrplist){Get-CMDeployment | ? {$_.SoftwareName -eq $softupd.LocalizedDisplayName}| % {Remove-CMDeployment -DeploymentId $_.DeploymentId}}


    Vladimir Zelenov | http://systemcenter4all.wordpress.com


    Владимир, командлет Remove-CMDeployment имеет 2 обязательных параметра (ApplicationName и DeplymentID/DeplymentName) Удалить CMdepoyment указав только DeploymentID не представляется возможным(как оказывается ApplicationName в Remove-CMDeployment полностью совпадает с SoftwareName в Get-CMDeployment). Плюс вот здесь есть фраза о том, что Remove-CMDeployment работает только для приложений и не работает для Task Sequence и как оказывается для SoftwareUpdateDeplyment (проверил на мой системе деплой приложения удаляется, а все остальное нет).
    Пришлось работать через WMI
  • Странно, проверю.

    Vladimir Zelenov | http://systemcenter4all.wordpress.com

    Отвечающий
  • В общем пообщался с разработчиками и получил вопрос "насколько оно сильно надо и как часто вы проделываете эту операцию?". Я рекомендую вам завести тикет на https://connect.microsoft.com с сообщением что-то вроде "добавить командлет remove-cmupdatedeployment". Если вы соберете достаточно голосов, то вполне возможно, что в ближайшее время его добавят.

    Vladimir Zelenov | http://systemcenter4all.wordpress.com

    Отвечающий
  • Владимир, спасибо за рекомендацию.

    На самом деле ничего особенного вводить не надо, достаточно научить Remove-CMDeployment работать не только с программами, но и с обновлениями.

    Пока же модуль Powershell для SCCM на мой взгляд убогий и до того же Exchange ему еще расти и расти