addsupersedences
# Ajoute les applications app1.0;app1.1;app1.2;app1.3 supersédées par l'application app1.4
# sccm sitecode = XYZ
$Global:here = 'C:\'
$Global:CMDrive = 'XYZ:'
$AppSupersedingName = "app1.4"
$AppSupersededNames = "app1.0;app1.1;app1.2;app1.3"
#region [Functions]
function isMECM2012{
$ici = (get-location).path
$MECM2012 = $false
set-location $here
$SCCMVersion = (Get-WmiObject -Namespace "root\sms\site_$($SiteCode)" -Class SMS_Site).Version
$VersionParts = $SCCMVersion.Split('.')
$MajorVersion = $VersionParts[0]
if(($MajorVersion -gt 5) -or ($MajorVersion -eq 5 -and $VersionParts[1] -gt 0)){$MECM2012 = $true}
set-location $ici
return $MECM2012
}
function getSupersedIDs($AppSupersededNames){
$ici = (get-location).path
set-location $here
foreach($AppSupersededName in $AppSupersededNames.split(';')){
set-location $CMDrive
$AppSupersededID = (Get-CMApplication -Name $AppSupersededName).CI_ID
$oldDTinfos += "$AppSupersededID;"
}
set-location $here
$oldDTinfos = $oldDTinfos.trimend(';')
set-location $ici
return $oldDTinfos
}
function supersedapp{
param($ApplicationId,$CurrDTId,$oldApplicationId)
$ici = (get-location).path
set-location $CMDrive
$AppSupersededName = (Get-CMApplication -id $oldApplicationId).LocalizedDisplayName
$OldDTId = (Get-CMDeploymentType -ApplicationName $AppSupersededName).CI_ID
if(isMECM2012){Set-CMApplicationSupersedence -ApplicationId $ApplicationId -CurrentDeploymentTypeId $CurrDTId -SupersededApplicationId $oldApplicationId -OldDeploymentTypeId $OldDTId}
else{Add-CMDeploymentTypeSupersedence -SupersedingDeploymentType $CurrDTId -SupersededDeploymentType $OldDTId -IsUninstall $true}
set-location $ici
}
#region [check at the end]
function getSupersedapps{
param($SupersedingAppName)
# Obtenez l'application supersedante
$SupersedingApp = Get-CMApplication -Name $SupersedingAppName
$SupersedingAppId = $SupersedingApp.CI_ID
$SupersedingApp = Get-CMApplication -Name $SupersedingAppName
$XMLDeS = ([xml]$SupersedingApp).SDMPackageXML
$DPTYPEALL = $XMLDeS.DeploymentTypes.supersedence.expression
foreach($DPTYPEONE in $DPTYPEALL){
$ModelName = $DPTYPEONE.DeploymentTypeAuthoringScodeID + '/' + $DPTYPEONE.ApplicationLogicalName
$Supersedes = Get-CMApplication | Where-Object {$_.ModelName -eq "ModelName"}
$SupersededApps += $Supersedes.LocalizedDisplayName + ';'
}
# if(isMECM2012){
# # Obtenez la liste des déploiements de l'application supersedante
# # $SupersedenceRelationships = Get-CMDeploymentTypeSupersedence -ApplicationName $SupersedingAppName
# $SupersedenceRelationships = Get-CMDeploymentType -ApplicationName $SupersedingAppName | Get-CMDeploymentTypeSupersedence
# # Obtenez les noms des applications supersédées
# $SupersededApps = @()
# foreach ($Relationship in $SupersedenceRelationships) {
# $SupersededApps += (Get-CMApplication -Id $Relationship.CI_ID).LocalizedDisplayName + ';'
# }
# }
# else{
# $XMLDeS = [Microsoft.configurationmanagement.applicationmanagement.serialization.sccmserializer]::DeserializeFromString($SupersedingApp.SDMPackageXML,$true)
# $DPTYPEALL = $XMLDeS.DeploymentTypes.supersedence.expression
# foreach($DPTYPEONE in $DPTYPEALL){
# $ModelName = $DPTYPEONE.DeploymentTypeAuthoringScodeID + '/' + $DPTYPEONE.ApplicationLogicalName
# $Supersedes = Get-CMApplication | Where-Object {$_.ModelName -eq "ModelName"}
# $SupersededApps += $Supersedes.LocalizedDisplayName + ';'
# }
# }
foreach ($AppName in $SupersededApps) {
if($AppSupersededNames -match $AppName){$resultmatch = $AppSupersededNames.replace($AppName,'')}
}
$resultmatch = $resultmatch.replace(';;',';').trimend(';')
$lengthresultmatch = $resultmatch.replace(';','').length
if($lengthresultmatch -gt 0){$retour = $resultmatch.replace(';',',')}else{$retour = 0}
}
return $retour
}
#endregion [check at the end]
#endregion [Functions]
$OldAppIDs = getSupersedIDs($AppSupersededNames)
set-location $CMDrive
$ApplicationId = (Get-CMApplication -Name $AppSupersedingName).CI_ID
$CurrDTId = (Get-CMDeploymentType -ApplicationName $AppSupersedingName).CI_ID
set-location $here
foreach($OldAppID in $OldAppIDs.split(';')){supersedapp -ApplicationId $ApplicationId -CurrDTId $CurrDTId -oldApplicationId $OldAppID}
$AppSupersedapps = getSupersedapps -SupersedingAppName $AppSupersedingName
if($AppSupersedapps -ne 0){
write-host "Packages ""$AppSupersedapps"" not superseded by ""$AppSupersedingName"", please do it manually"
}
/image%2F0881799%2F20140610%2Fob_a8c7fe_logo2.jpg)
Commenter cet article