Partager via


Comment acquérir un verrou sur un objet SEDO-Enabled

Pour acquérir un verrou explicite sur un objet compatible SEDO

  1. Créer une instance de la SMS_ObjectLock classe WMI

  2. Obtient l’objet de paramètres de méthode pour la RequestLock méthode .

  3. Affectez le chemin d’accès de l’objet que vous souhaitez verrouiller à la ObjectRelPath propriété .

  4. Définissez la propriété sur RequestTransfertrue.

  5. Créez une instance d’objet InvokeMethodOptions . Dans la propriété Context, ajoutez une paire nom/valeur. Le nom doit être « ObjectLockContext » et la valeur doit être une valeur unique telle qu’un GUID. Ajoutez une autre paire nom/valeur avec « MachineName » et le nom de l’ordinateur demandant le verrouillage.

  6. Appelez InvokeMethod sur l’instance SMS_ObjectLock .

  7. InvokeMethod retourne une SMS_ObjectLockRequest instance. Vérifiez les RequestState propriétés et LockState pour obtenir plus d’informations sur la réussite ou l’échec de la demande.

Exemple

L’exemple suivant demande un verrou explicite sur une instance d’objet SMS_ConfigurationItem .

 class Program  
 {  
     static void Main(string[] args)   
     {  
         ManagementScope scope = new ManagementScope(@"\\siteservername\root\sms\site_ABC");  
         RequestLock(scope);   
     }  

     public static void RequestLock(ManagementScope scope)   
     {  
         ManagementPath path = new ManagementPath("SMS_ObjectLock");  
         ManagementClass objectLock = new ManagementClass(scope, path, null);   

         ManagementBaseObject inParams = objectLock.GetMethodParameters("RequestLock");  
         inParams["ObjectRelPath"] = "SMS_ConfigurationItem.CI_ID=30";  
         inParams["RequestTransfer"] = true;   

         InvokeMethodOptions options = new InvokeMethodOptions();  
         options.Context.Add("ObjectLockContext", Guid.NewGuid().ToString());  
         options.Context.Add("MachineName", "RequestingComputer");  

         ManagementBaseObject result = objectLock.InvokeMethod("RequestLock", inParams, options);     

     }  
}  

L’objet SMS_ObjectLockRequest contient les propriétés suivantes :

Propriété Description
RequestID Identificateur unique de la demande.
ObjectRelPath Chemin d’accès de l’objet pour lequel le verrou est demandé.
RequestState Indique la réussite ou l’échec de la demande.
LockState Indique l’état actuel du verrou demandé.
AssignedUser Indique l’utilisateur actuellement affecté du verrou demandé.
AssignedObjectLockContext Indique ObjectLockContext auquel le verrou est actuellement affecté.
AssignedMachine Indique l’ordinateur actuellement affecté du verrou demandé.
AssignedSiteCode Indique le site actuel du verrou demandé.
AssignedTimeUTC Indique l’heure à laquelle le verrou demandé a été attribué.

RequestState
Le tableau ci-dessous affiche les valeurs d’état de requête possibles. Les états de requête Granted, GrantedAfterTimeout et GrantedLockWasOrphaned indiquent qu’une demande a réussi et que l’utilisateur peut ensuite apporter et enregistrer des modifications à l’objet. Toutes les autres demandes indiquent une erreur.

RequestStateID RequestStateName
0 Inconnu
2 Demandé
3 RequestedCanceled
4 ResponseReceived
10 Granted
11 GrantedAfterTimeout
12 GrantedLockWasOrphaned
20 DeniedLockAlreadyAssigned
21 DeniedInvalidObjectVersion
22 DeniedLockNotFound
23 DeniedLockNotLocal
24 DeniedRequestTimedOut
50 Error
52 ErrorRequestNotFound
53 ErrorRequestTimedOut

LockState
Le tableau ci-dessous affiche les valeurs d’état de verrouillage possibles.

LockStateID LockStateName
0 Non attribué
1 Affecté
2 Demandé
3 PendingAssignment
4 TimedOut
5 NotFound

Compilation du code

L’exemple C# nécessite :

Espaces de noms

Système

System.Management

Assembly

Programmation robuste

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

Voir aussi

Configuration Manager SEDO