Guide pratique pour supprimer un rôle de point de migration d’état

Pour supprimer le rôle de point de migration d’État, dans Configuration Manager, supprimez l’objet de classe WMI SMS_SCI_SysResUse Server du rôle.

Pour supprimer un rôle de point de migration d’État

  1. Configurez une connexion au fournisseur SMS. Pour plus d’informations, consultez principes de base du fournisseur SMS.

  2. Obtenir l’objet de classe WMI du serveur SMS_SCI_SysResUse pour le rôle de point de migration d’État.

  3. Définissez le point de migration d’état correspondant sur aucun.

  4. Supprimez le point de migration d’État SMS_SCI_SysResUse objet de classe WMI du serveur .

Exemple

L’exemple de méthode suivant supprime le point de migration d’État identifié par le chemin d’accès au code de site et à la couche d’abstraction de réseau (NAL). L’exemple détermine si le point de migration d’État a des restaurations de migration d’État incomplètes dans le processus. Si c’est le cas, l’implémentation actuelle supprime toujours le point de migration d’État.

Pour plus d’informations sur l’appel de l’exemple de code, consultez Calling Configuration Manager Code Snippets (Appel d’extraits de code Configuration Manager).

public void DeleteSmpRole(  
     WqlConnectionManager connection,  
     string siteCode,  
     string nalPath)  
 {  
     try  
     {  
         bool smpFound = false;  
         Console.WriteLine("About to delete the state migration point");  
         string query = string.Format(CultureInfo.InvariantCulture,  
      @"SELECT * from SMS_SCI_SysResUse where SiteCode='{0}' AND FileType=2 AND RoleName='{1}'AND NALPath='{2}'",  
      siteCode,  
      "SMS State Migration Point",  
      nalPath.Replace(@"\", @"\\"));  

         IResultObject resultObjs = connection.QueryProcessor.ExecuteQuery(query);  

         foreach (IResultObject resultObj in resultObjs)  
         {  
             smpFound = true;  
             if (DeleteSmpOK(resultObj) == true)  
             {  
                 resultObj.Delete();  
             }  

             Console.WriteLine("Deleted");  
         }  

         if (smpFound == false)  
         {  
             Console.WriteLine("No state migration point was found");  
         }  
     }  
     catch (SmsException e)  
     {  
         Console.WriteLine("Couldn't delete the state migration point: " + e.Message);  
         throw;  
     }  

 }  

public bool DeleteSmpOK(IResultObject selectedResultObject)  
{  
    IResultObject resultObjs = null;  
    try  
    {  
        // Locate this state migration point, and determine if it is in QuiesceState or not, normal deletion  
        // if it is not.  
        string query = string.Format(CultureInfo.InvariantCulture,  
        @"SELECT * from SMS_SCI_SysResUse where SiteCode='{0}' AND FileType=2 AND NALPath='{1}' AND RoleName='{2}'",  
        selectedResultObject["SiteCode"].StringValue,  
        selectedResultObject["NALPath"].StringValue.Replace(@"\", @"\\"),  
        "SMS State Migration Point");  

        resultObjs = selectedResultObject.ConnectionManager.QueryProcessor.ExecuteQuery(query);  

        // Retrieve the state migration point server name because there could be more than one state migration point on the site, and you want to  
        // determine if there are unrestored data stores on only this one.  
        string smpServer = selectedResultObject["NetworkOsPath"].StringValue;  
        smpServer = smpServer.Replace(@"\", "");  

        foreach (IResultObject resultObj in resultObjs)  
        {  
            if (resultObj.EmbeddedProperties.ContainsKey("SMPQuiesceState") == true &&  
                resultObj.EmbeddedProperties["SMPQuiesceState"].Properties["Value"].IntegerValue != 0)  
            {  
                // Find out whether this state migration point contains any stateMigrationRestores that are incomplete on this  
                // server that is to be deleted.  
                string query2 = string.Format(CultureInfo.InvariantCulture, @"SELECT * from SMS_StateMigration where StorePath Like '%{0}%'", smpServer);  

                IResultObject resultObjs2 = selectedResultObject.ConnectionManager.QueryProcessor.ExecuteQuery(query2);  

                foreach (IResultObject resultObj2 in resultObjs2)  
                {  
                    // Look for state migration objects without a StoreReleaseData/Migration date  
                    // it's the one that will cause an exception when reading releasetime because it is not a valid datetime.  
                    try  
                    {  
                        DateTime releaseTime = resultObj2["StoreReleaseDate"].DateTimeValue;  
                    }  
                    catch (ArgumentOutOfRangeException)  
                    {  
                        // Alternatively return false if you do not to delete.  
                        return true;  
                    }  
                }  
            }  
        }  
    }  
    catch (SmsQueryException ex)  
    {  
        Console.WriteLine("Failed during smp state determination" + ex.Message);  
        throw;  
    }  
    finally  
    {  
        if (resultObjs != null)  
        {  
            resultObjs.Dispose();  
        }  
    }  

    // Delete the role.  
    return true;  
}  

L’exemple de méthode a les paramètres suivants :

Paramètre Type Description
connection Nage WqlConnectionManager Une connexion valide au fournisseur SMS.
siteCode Nage String Code de site Configuration Manager.
nalPath Nage String Chemin d’accès NAL au point de migration d’État. Par exemple ["Display=\\SERVERNAME\"]MSWNET:["SMS_SITE=SITECODE"]\\SERVERNAME\

Compilation du code

L’exemple C# présente les spécifications de compilation suivantes :

Espaces de noms

Système

System.Collections.Generic

System.Text

Microsoft.ConfigurationManagement.ManagementProvider

Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine

System.Globalization

Assembly

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

Programmation fiable

Pour plus d’informations sur la gestion des erreurs, consultez À propos des erreurs de Configuration Manager.

Sécurité du .NET Framework

Pour plus d’informations sur la sécurisation des applications Configuration Manager, consultez Configuration Manager l’administration basée sur des rôles.

Voir aussi

Classe WMI du serveur SMS_SCI_SysResUse
À propos de la configuration du rôle de site de déploiement du système d’exploitation Comment lire et écrire dans le fichier de contrôle de site Configuration Manager à l’aide de code managé