Overblog Tous les blogs Top blogs Technologie & Science Tous les blogs Technologie & Science
Editer l'article Suivre ce blog Administration + Créer mon blog
MENU

addsupersedences

Publié le par damcuvelier

# 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"
}

Commenter cet article