Créer une collection SCCM basée sur le statut d’un déploiement

Dans certains scénarios, il est utile de regrouper temporairement les machines selon le résultat d’un déploiement spécifique. Créer une collection basée sur le statut d’un déploiement permet d’effectuer des actions ciblées : relance, support, mise en conformité, ou création de rapports. Bien que SCCM ne propose pas nativement cette fonctionnalité, il est possible de contourner cette limite en utilisant une requête WQL basée sur l’ID d’attribution (AssignmentID) et l’état du déploiement.


Étape 1 : Récupérer l’ID d’attribution du déploiement

  1. Accédez à la console SCCM > Monitoring > Deployments
  2. Cliquez droit sur l’en-tête de colonne et ajoutez la colonne “ID de l’attribution” (AssignmentID)
  3. Repérez le déploiement concerné, puis copiez son ID
    → Exemple : 16779418
Créer une collection SCCM basée sur le statut d’un déploiement : ajout de l'ID attribute

Étape 2 : Créer la collection basée sur le statut

  1. Allez dans Assets and Compliance > Device Collections
  2. Créez une nouvelle collection et choisissez une collection de limitation adaptée
  3. Dans Membership Rules, ajoutez une Query Rule
  4. Cliquez sur Edit Query Statement > Show Query Language
  5. Collez la requête adaptée à votre besoin

Exemple : collection des machines en erreur (Status = 5)

SELECT
    SMS_R_SYSTEM.ResourceID,
    SMS_R_SYSTEM.ResourceType,
    SMS_R_SYSTEM.Name,
    SMS_R_SYSTEM.SMSUniqueIdentifier,
    SMS_R_SYSTEM.ResourceDomainORWorkgroup,
    SMS_R_SYSTEM.Client
FROM SMS_R_System
INNER JOIN SMS_AppDeploymentAssetDetails
    ON SMS_AppDeploymentAssetDetails.MachineID = SMS_R_System.ResourceId
WHERE SMS_AppDeploymentAssetDetails.AssignmentID = "16779418"
  AND SMS_AppDeploymentAssetDetails.StatusType = "5"

Autres statuts possibles

CodeStatut de l’application
1Success
2In Progress
3Requirements Not Met
4Unknown
5Error

📌 Adaptez la valeur de StatusType selon le filtre souhaité.


Cas particulier : ordinateurs inconnus

Certains postes peuvent apparaître comme « inconnus » dans l’état du déploiement. Ceux-ci ne sont pas présents dans SMS_AppDeploymentAssetDetails, mais sont stockés dans une classe différente.

Requête pour les ordinateurs inconnus

SELECT
    SMS_R_SYSTEM.ResourceID,
    SMS_R_SYSTEM.ResourceType,
    SMS_R_SYSTEM.Name,
    SMS_R_SYSTEM.SMSUniqueIdentifier,
    SMS_R_SYSTEM.ResourceDomainORWorkgroup,
    SMS_R_SYSTEM.Client
FROM SMS_R_System
INNER JOIN SMS_CIDeploymentUnknownAssetDetails
    ON SMS_R_SYSTEM.ResourceID = SMS_CIDeploymentUnknownAssetDetails.MachineID
   AND SMS_CIDeploymentUnknownAssetDetails.AssignmentID = 16779418

Bonnes pratiques

  • Donnez un nom explicite à la collection : Coll - Erreurs déploiement AppX
  • Ajoutez une expiration automatique si elle est utilisée temporairement.
  • Combinez cette collection avec une alerte, un rapport ou une relance ciblée.

Script PowerShell – Création d’une collection basée sur le statut de déploiement

# ================================================
# Script : New-CMDeploymentStatusCollection.ps1
# Auteur : Lijane Consulting
# But    : Créer une collection basée sur le statut d'un déploiement SCCM
# ================================================

param (
    [string]$SiteCode = "LAB",                      # Code du site SCCM
    [string]$ProviderMachineName = "SCCM-SRV01",    # Nom du serveur de site
    [string]$AssignmentID = "16779418",             # ID du déploiement
    [int]$StatusType = 5,                           # 1=Success, 2=In Progress, etc.
    [string]$LimitingCollectionID = "SMS00001",     # Collection de limitation (ex: All Systems)
    [string]$CollectionFolder = "Custom Collections" # Dossier dans la console (optionnel)
)

# Charger le module
Import-Module "$($ENV:SMS_ADMIN_UI_PATH)\..\ConfigurationManager.psd1"
Set-Location "$SiteCode`:"

# Définir les libellés selon le code de statut
$statusMap = @{
    1 = "Success"
    2 = "InProgress"
    3 = "RequirementsNotMet"
    4 = "Unknown"
    5 = "Error"
}
$StatusLabel = $statusMap[$StatusType]

# Nom de la collection
$CollectionName = "Deployment_$AssignmentID`_$StatusLabel"

Write-Host "🛠 Création de la collection : $CollectionName" -ForegroundColor Cyan

# Création de la collection
$collection = New-CMDeviceCollection -Name $CollectionName -LimitingCollectionId $LimitingCollectionID -Comment "Basée sur le déploiement $AssignmentID avec statut $StatusLabel"

# Définir la requête WQL
$WqlQuery = @"
SELECT
    SMS_R_SYSTEM.ResourceID,
    SMS_R_SYSTEM.ResourceType,
    SMS_R_SYSTEM.Name,
    SMS_R_SYSTEM.SMSUniqueIdentifier,
    SMS_R_SYSTEM.ResourceDomainORWorkgroup,
    SMS_R_SYSTEM.Client
FROM SMS_R_System
INNER JOIN SMS_AppDeploymentAssetDetails
    ON SMS_AppDeploymentAssetDetails.MachineID = SMS_R_System.ResourceId
WHERE SMS_AppDeploymentAssetDetails.AssignmentID = '$AssignmentID'
  AND SMS_AppDeploymentAssetDetails.StatusType = '$StatusType'
"@

# Ajouter la règle de requête
Add-CMDeviceCollectionQueryMembershipRule -CollectionName $CollectionName -QueryExpression $WqlQuery -RuleName "AppDeployment_$StatusLabel"

# Déplacement dans un dossier personnalisé (facultatif)
if ($CollectionFolder) {
    $folder = Get-CMFolder -FolderType DeviceCollection | Where-Object { $_.Name -eq $CollectionFolder }
    if ($folder) {
        Move-CMObject -InputObject $collection -FolderPath $folder.Path
    }
}

Write-Host "✅ Collection $CollectionName créée avec succès." -ForegroundColor Green

Ce que fait ce script :

  • Crée une collection avec le nom Deployment_<ID>_<Statut>, par exemple :
    Deployment_16779418_Error
  • Applique une règle dynamique WQL basée sur la classe SMS_AppDeploymentAssetDetails
  • Peut placer la collection dans un dossier spécifique de la console SCCM (facultatif)

Prérequis :

  • Le module PowerShell SCCM (ConfigurationManager.psd1) doit être disponible
  • Exécuter sur un poste avec la console SCCM installée
  • L’utilisateur PowerShell doit avoir les droits de création de collections

Collection SCCM basée sur le statut d’un déploiement : Conclusion

Bien qu’il n’existe pas de bouton natif dans la console pour créer une collection à partir d’un déploiement, l’usage de requêtes WQL sur les classes SMS_AppDeploymentAssetDetails et SMS_CIDeploymentUnknownAssetDetails permet de cibler dynamiquement les machines selon leur statut de déploiement.

C’est une méthode puissante pour affiner vos campagnes, surveiller la conformité ou automatiser les actions correctives.

Retour en haut