Comment acquérir un verrou sur un objet SEDO-Enabled
Pour acquérir un verrou explicite sur un objet compatible SEDO
Créer une instance de la
SMS_ObjectLock
classe WMIObtient l’objet de paramètres de méthode pour la
RequestLock
méthode .Affectez le chemin d’accès de l’objet que vous souhaitez verrouiller à la
ObjectRelPath
propriété .Définissez la propriété sur
RequestTransfer
true
.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.Appelez InvokeMethod sur l’instance
SMS_ObjectLock
.InvokeMethod retourne une
SMS_ObjectLockRequest
instance. Vérifiez lesRequestState
propriétés etLockState
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.