From c5c1d9500b5f6d936d6bfc07e63f6f2fcbfc0511 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mieszko=20=C5=9Alusarczyk?= Date: Wed, 29 May 2019 08:30:19 -0500 Subject: [PATCH 1/8] Actually remove content from DPs --- SCCM/Retire-CMApplication.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SCCM/Retire-CMApplication.ps1 b/SCCM/Retire-CMApplication.ps1 index 4de8ba6..a85de5a 100644 --- a/SCCM/Retire-CMApplication.ps1 +++ b/SCCM/Retire-CMApplication.ps1 @@ -36,7 +36,7 @@ function Retire-CMApplication { # remove content from all dp's and dpg's Write-Host -NoNewline "Removing content from all distribution points" - $DPs = Get-CMDistributionPoint + $DPs = Get-CMDistributionPoint -AllSite foreach ($DP in $DPs) { Write-Host -NoNewline "." try { From b048314911008af3b9f6e8af2674b7a0a2e711d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mieszko=20=C5=9Alusarczyk?= Date: Wed, 29 May 2019 09:05:51 -0500 Subject: [PATCH 2/8] Make content removal actually work --- SCCM/Retire-CMApplication.ps1 | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/SCCM/Retire-CMApplication.ps1 b/SCCM/Retire-CMApplication.ps1 index a85de5a..a32ecea 100644 --- a/SCCM/Retire-CMApplication.ps1 +++ b/SCCM/Retire-CMApplication.ps1 @@ -37,11 +37,16 @@ function Retire-CMApplication { # remove content from all dp's and dpg's Write-Host -NoNewline "Removing content from all distribution points" $DPs = Get-CMDistributionPoint -AllSite - foreach ($DP in $DPs) { + foreach ($DP in $DPs) + { + $dpNetworkOSPath = $dp.NetworkOSPath #TODO: unify 2 variables + $dpName = ($dp.NetworkOSPath).Substring(2,$dpNetworkOSPath.Length-2) Write-Host -NoNewline "." - try { - Remove-CMContentDistribution -Application $RetiringApp -DistributionPointName ($DP).NetworkOSPath -Force -EA SilentlyContinue - } catch { } + try + { + Remove-CMContentDistribution -ApplicationName "$RetiringApp" -DistributionPointName $dpName -Force -EA SilentlyContinue + } + catch { } } Write-Host Write-Host -NoNewline "Removing content from all distribution point groups" From 0b0a1ad12b62c9b70c378eeb54c9e6aa70b3e0ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mieszko=20=C5=9Alusarczyk?= Date: Wed, 29 May 2019 09:06:12 -0500 Subject: [PATCH 3/8] Variable name changes --- SCCM/Retire-CMApplication.ps1 | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/SCCM/Retire-CMApplication.ps1 b/SCCM/Retire-CMApplication.ps1 index a32ecea..4fefa8e 100644 --- a/SCCM/Retire-CMApplication.ps1 +++ b/SCCM/Retire-CMApplication.ps1 @@ -13,15 +13,15 @@ function Retire-CMApplication { cd "$($PSD):" # for each provided app name, remove deployments, rename, and retire - foreach ($app in $RetiringApps) { - if ($RetiringApp = Get-CMApplication -Name $app) { - Write-Host "So long, $app!" + foreach ($RetiringApp in $RetiringApps) { + if ($RetiringApp = Get-CMApplication -Name $RetiringApp) { + Write-Host "So long, $RetiringApp!" # checking retired status, setting to active so that we can make changes if ($RetiringApp.IsExpired) { - $appWMI = gwmi -Namespace Root\SMS\Site_$PSD -class SMS_ApplicationLatest -Filter "LocalizedDisplayName = '$app'" - $appWMI.SetIsExpired($false) | Out-Null - Write-Host "Setting Status of $app to Active so that changes can be made." + $RetiringAppWMI = gwmi -Namespace Root\SMS\Site_$PSD -class SMS_ApplicationLatest -Filter "LocalizedDisplayName = '$RetiringApp'" + $RetiringAppWMI.SetIsExpired($false) | Out-Null + Write-Host "Setting Status of $RetiringApp to Active so that changes can be made." } $oldDeploys = Get-CMDeployment -SoftwareName $RetiringApp.LocalizedDisplayName @@ -29,9 +29,9 @@ function Retire-CMApplication { # remove all deployments for the app if ($oldDeploys) { $oldDeploys | ForEach-Object { - Remove-CMDeployment -ApplicationName $app -DeploymentId $_.DeploymentID -Force + Remove-CMDeployment -ApplicationName $RetiringApp -DeploymentId $_.DeploymentID -Force } - Write-Host "Removed $($oldDeploys.Count) deployments of $app." + Write-Host "Removed $($oldDeploys.Count) deployments of $RetiringApp." } # remove content from all dp's and dpg's @@ -54,17 +54,17 @@ function Retire-CMApplication { foreach ($DPG in $DPGs) { Write-Host -NoNewline "." try { - Remove-CMContentDistribution -Application $RetiringApp -DistributionPointGroupName ($DPG).Name -Force -EA SilentlyContinue + Remove-CMContentDistribution -ApplicationName $RetiringApp -DistributionPointGroupName ($DPG).Name -Force -EA SilentlyContinue } catch { } } Write-Host # rename the app - $app = $app.Replace('Retired-', '') + $RetiringApp = $RetiringApp.Replace('Retired-', '') try { - Set-CMApplication -Name $app -NewName "Retired-$app" + Set-CMApplication -Name $RetiringApp -NewName "Retired-$RetiringApp" } catch { } - Write-Host "Renamed to Retired-$app." + Write-Host "Renamed to Retired-$RetiringApp." # move the app according to category if ($RetiringApp.LocalizedCategoryInstanceNames -eq "Mac") { @@ -77,8 +77,8 @@ function Retire-CMApplication { # retire the app if (!$RetiringApp.IsExpired) { - $appWMI = gwmi -Namespace Root\SMS\Site_$PSD -class SMS_ApplicationLatest -Filter "LocalizedDisplayName = 'Retired-$app'" - $appWMI.SetIsExpired($true) | Out-Null + $RetiringAppWMI = gwmi -Namespace Root\SMS\Site_$PSD -class SMS_ApplicationLatest -Filter "LocalizedDisplayName = 'Retired-$RetiringApp'" + $RetiringAppWMI.SetIsExpired($true) | Out-Null Write-Host "Set status to Retired." } else { Write-Host "Status was already set to Retired." @@ -90,7 +90,7 @@ function Retire-CMApplication { Write-Host "Don't forget to delete the source files from $loc." } else { - Write-Host "$app was not found. No actions performed." + Write-Host "$RetiringApp was not found. No actions performed." } } } From 6dfbcc26ed83d32b3dc691d802926a0eb230bd02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mieszko=20=C5=9Alusarczyk?= Date: Wed, 29 May 2019 09:12:29 -0500 Subject: [PATCH 4/8] Rename variables again --- SCCM/Retire-CMApplication.ps1 | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/SCCM/Retire-CMApplication.ps1 b/SCCM/Retire-CMApplication.ps1 index 4fefa8e..3395092 100644 --- a/SCCM/Retire-CMApplication.ps1 +++ b/SCCM/Retire-CMApplication.ps1 @@ -13,15 +13,15 @@ function Retire-CMApplication { cd "$($PSD):" # for each provided app name, remove deployments, rename, and retire - foreach ($RetiringApp in $RetiringApps) { - if ($RetiringApp = Get-CMApplication -Name $RetiringApp) { + foreach ($RetiringAppName in $RetiringApps) { + if ($RetiringAppName = Get-CMApplication -Name $RetiringApp) { Write-Host "So long, $RetiringApp!" # checking retired status, setting to active so that we can make changes if ($RetiringApp.IsExpired) { $RetiringAppWMI = gwmi -Namespace Root\SMS\Site_$PSD -class SMS_ApplicationLatest -Filter "LocalizedDisplayName = '$RetiringApp'" $RetiringAppWMI.SetIsExpired($false) | Out-Null - Write-Host "Setting Status of $RetiringApp to Active so that changes can be made." + Write-Host "Setting Status of $RetiringAppName to Active so that changes can be made." } $oldDeploys = Get-CMDeployment -SoftwareName $RetiringApp.LocalizedDisplayName @@ -29,7 +29,7 @@ function Retire-CMApplication { # remove all deployments for the app if ($oldDeploys) { $oldDeploys | ForEach-Object { - Remove-CMDeployment -ApplicationName $RetiringApp -DeploymentId $_.DeploymentID -Force + Remove-CMDeployment -ApplicationName $RetiringAppName -DeploymentId $_.DeploymentID -Force } Write-Host "Removed $($oldDeploys.Count) deployments of $RetiringApp." } @@ -54,15 +54,15 @@ function Retire-CMApplication { foreach ($DPG in $DPGs) { Write-Host -NoNewline "." try { - Remove-CMContentDistribution -ApplicationName $RetiringApp -DistributionPointGroupName ($DPG).Name -Force -EA SilentlyContinue + Remove-CMContentDistribution -ApplicationName $RetiringAppName -DistributionPointGroupName ($DPG).Name -Force -EA SilentlyContinue } catch { } } Write-Host # rename the app - $RetiringApp = $RetiringApp.Replace('Retired-', '') + $RetiringAppName = $RetiringApp.Replace('Retired-', '') try { - Set-CMApplication -Name $RetiringApp -NewName "Retired-$RetiringApp" + Set-CMApplication -Name $RetiringAppName -NewName "Retired-$RetiringApp" } catch { } Write-Host "Renamed to Retired-$RetiringApp." @@ -90,7 +90,7 @@ function Retire-CMApplication { Write-Host "Don't forget to delete the source files from $loc." } else { - Write-Host "$RetiringApp was not found. No actions performed." + Write-Host "$RetiringAppName was not found. No actions performed." } } } From 7f3b3ef290729a2d7ce60ae7a1e06a6f5f3445d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mieszko=20=C5=9Alusarczyk?= Date: Wed, 29 May 2019 10:33:58 -0500 Subject: [PATCH 5/8] Properly retire/re-instate apps --- SCCM/Retire-CMApplication.ps1 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/SCCM/Retire-CMApplication.ps1 b/SCCM/Retire-CMApplication.ps1 index 3395092..283bf37 100644 --- a/SCCM/Retire-CMApplication.ps1 +++ b/SCCM/Retire-CMApplication.ps1 @@ -18,9 +18,9 @@ function Retire-CMApplication { Write-Host "So long, $RetiringApp!" # checking retired status, setting to active so that we can make changes - if ($RetiringApp.IsExpired) { - $RetiringAppWMI = gwmi -Namespace Root\SMS\Site_$PSD -class SMS_ApplicationLatest -Filter "LocalizedDisplayName = '$RetiringApp'" - $RetiringAppWMI.SetIsExpired($false) | Out-Null + if ($RetiringApp.IsExpired) + { + Resume-CMApplication -Name "$RetiringAppName" Write-Host "Setting Status of $RetiringAppName to Active so that changes can be made." } From b53a91647853ceb167286e9fc011cc3f01acbb1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mieszko=20=C5=9Alusarczyk?= Date: Wed, 29 May 2019 10:41:24 -0500 Subject: [PATCH 6/8] Make renaming optional --- SCCM/Retire-CMApplication.ps1 | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/SCCM/Retire-CMApplication.ps1 b/SCCM/Retire-CMApplication.ps1 index 283bf37..273c000 100644 --- a/SCCM/Retire-CMApplication.ps1 +++ b/SCCM/Retire-CMApplication.ps1 @@ -2,7 +2,9 @@ function Retire-CMApplication { [CmdletBinding()] param ( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] - $RetiringApps = @() + $RetiringApps = @(), + [Parameter(Mandatory = $false)] + $rename = $false ) # import cm module @@ -61,6 +63,7 @@ function Retire-CMApplication { # rename the app $RetiringAppName = $RetiringApp.Replace('Retired-', '') + If ($rename){ try { Set-CMApplication -Name $RetiringAppName -NewName "Retired-$RetiringApp" } catch { } @@ -74,6 +77,7 @@ function Retire-CMApplication { Move-CMObject -FolderPath "Application\Retired" -InputObject $RetiringApp Write-Host "Moved to Retired." } + } # retire the app if (!$RetiringApp.IsExpired) { From 65c4222ae0d5f46ff816ada12ab7358f7a5ef7aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mieszko=20=C5=9Alusarczyk?= Date: Wed, 29 May 2019 10:42:36 -0500 Subject: [PATCH 7/8] Various fixes --- SCCM/Retire-CMApplication.ps1 | 57 ++++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 25 deletions(-) diff --git a/SCCM/Retire-CMApplication.ps1 b/SCCM/Retire-CMApplication.ps1 index 273c000..ed26a9f 100644 --- a/SCCM/Retire-CMApplication.ps1 +++ b/SCCM/Retire-CMApplication.ps1 @@ -16,8 +16,10 @@ function Retire-CMApplication { # for each provided app name, remove deployments, rename, and retire foreach ($RetiringAppName in $RetiringApps) { - if ($RetiringAppName = Get-CMApplication -Name $RetiringApp) { - Write-Host "So long, $RetiringApp!" + + if ($RetiringApp = Get-CMApplication -Name $RetiringAppName) + { + Write-Host "So long, $RetiringAppName!" # checking retired status, setting to active so that we can make changes if ($RetiringApp.IsExpired) @@ -41,12 +43,15 @@ function Retire-CMApplication { $DPs = Get-CMDistributionPoint -AllSite foreach ($DP in $DPs) { - $dpNetworkOSPath = $dp.NetworkOSPath #TODO: unify 2 variables - $dpName = ($dp.NetworkOSPath).Substring(2,$dpNetworkOSPath.Length-2) + #$dpNetworkOSPath = $dp.NetworkOSPath #TODO: unify 2 variables + $dpName = ($dp.NetworkOSPath).Substring(2) + + + Write-Verbose "Removing $RetiringAppName from $dpName" Write-Host -NoNewline "." try { - Remove-CMContentDistribution -ApplicationName "$RetiringApp" -DistributionPointName $dpName -Force -EA SilentlyContinue + Remove-CMContentDistribution -ApplicationName "$RetiringAppName" -DistributionPointName $dpName -Force -EA SilentlyContinue #TODO: parallelize this } catch { } } @@ -56,35 +61,37 @@ function Retire-CMApplication { foreach ($DPG in $DPGs) { Write-Host -NoNewline "." try { - Remove-CMContentDistribution -ApplicationName $RetiringAppName -DistributionPointGroupName ($DPG).Name -Force -EA SilentlyContinue + Remove-CMContentDistribution -ApplicationName "$RetiringAppName" -DistributionPointGroupName ($DPG).Name -Force -EA SilentlyContinue #TODO: parallelize this } catch { } } Write-Host - # rename the app - $RetiringAppName = $RetiringApp.Replace('Retired-', '') If ($rename){ - try { - Set-CMApplication -Name $RetiringAppName -NewName "Retired-$RetiringApp" - } catch { } - Write-Host "Renamed to Retired-$RetiringApp." + # rename the app + $RetiringAppName = $RetiringApp.Replace('Retired-', '') + try { + Set-CMApplication -Name $RetiringAppName -NewName "Retired-$RetiringApp" + } catch { } + Write-Host "Renamed to Retired-$RetiringAppName." - # move the app according to category - if ($RetiringApp.LocalizedCategoryInstanceNames -eq "Mac") { - Move-CMObject -FolderPath "Application\Retired" -InputObject $RetiringApp - Write-Host "Moved to Retired." - } else { - Move-CMObject -FolderPath "Application\Retired" -InputObject $RetiringApp - Write-Host "Moved to Retired." - } + # move the app according to category + if ($RetiringApp.LocalizedCategoryInstanceNames -eq "Mac") { + Move-CMObject -FolderPath "Application\Retired" -InputObject $RetiringApp + Write-Host "Moved to Retired." + } else { + Move-CMObject -FolderPath "Application\Retired" -InputObject $RetiringApp + Write-Host "Moved to Retired." + } } - + # retire the app - if (!$RetiringApp.IsExpired) { - $RetiringAppWMI = gwmi -Namespace Root\SMS\Site_$PSD -class SMS_ApplicationLatest -Filter "LocalizedDisplayName = 'Retired-$RetiringApp'" - $RetiringAppWMI.SetIsExpired($true) | Out-Null + if (!$RetiringApp.IsExpired) + { + Suspend-CMApplication -Name "$RetiringAppName" Write-Host "Set status to Retired." - } else { + } + else + { Write-Host "Status was already set to Retired." } From 17edc9643d300c01d4ea6d4a702c7fc8edf5e729 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mieszko=20=C5=9Alusarczyk?= Date: Wed, 29 May 2019 10:48:53 -0500 Subject: [PATCH 8/8] Cleanup --- SCCM/Retire-CMApplication.ps1 | 1 - 1 file changed, 1 deletion(-) diff --git a/SCCM/Retire-CMApplication.ps1 b/SCCM/Retire-CMApplication.ps1 index ed26a9f..b1ec9f5 100644 --- a/SCCM/Retire-CMApplication.ps1 +++ b/SCCM/Retire-CMApplication.ps1 @@ -43,7 +43,6 @@ function Retire-CMApplication { $DPs = Get-CMDistributionPoint -AllSite foreach ($DP in $DPs) { - #$dpNetworkOSPath = $dp.NetworkOSPath #TODO: unify 2 variables $dpName = ($dp.NetworkOSPath).Substring(2)