Abrufen einer Sperre für ein SEDO-Enabled-Objekt
So rufen Sie eine explizite Sperre für ein SEDO-fähiges Objekt ab
Erstellen einer Instanz der WMI-Klasse
SMS_ObjectLock
Rufen Sie das Methodenparameterobjekt für die
RequestLock
Methode ab.Weisen Sie den Objektpfad des Objekts zu, das Sie für die
ObjectRelPath
Eigenschaft sperren möchten.Legen Sie die
RequestTransfer
-Eigenschaft auf festtrue
.Erstellen Sie eine
InvokeMethodOptions
Objektinstanz. Fügen Sie in der Context-Eigenschaft ein Name-Wert-Paar hinzu. Der Name muss "ObjectLockContext" sein, und der Wert muss ein eindeutiger Wert sein, z. B. eine GUID. Fügen Sie ein weiteres Name-Wert-Paar mit "MachineName" und dem Namen des Computers hinzu, der die Sperre anfordert.Rufen Sie InvokeMethod für die -Instanz auf
SMS_ObjectLock
.InvokeMethod gibt eine
SMS_ObjectLockRequest
-Instanz zurück. Überprüfen Sie dieRequestState
Eigenschaften undLockState
, um weitere Informationen zum Erfolg oder Fehler der Anforderung zu erhalten.
Beispiel
Im folgenden Beispiel wird eine explizite Sperre für eine SMS_ConfigurationItem
Objektinstanz angefordert.
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);
}
}
Das SMS_ObjectLockRequest-Objekt enthält die folgenden Eigenschaften:
Eigenschaft | Beschreibung |
---|---|
Requestid | Eindeutiger Bezeichner der Anforderung. |
ObjectRelPath | Der Pfad des Objekts, für das die Sperre angefordert wird. |
RequestState | Gibt den Erfolg oder Fehler der Anforderung an. |
LockState | Gibt den aktuellen Zustand der angeforderten Sperre an. |
AssignedUser | Gibt den aktuell zugewiesenen Benutzer der angeforderten Sperre an. |
AssignedObjectLockContext | Gibt ObjectLockContext an, dem die Sperre derzeit zugewiesen ist. |
AssignedMachine | Gibt den aktuell zugewiesenen Computer der angeforderten Sperre an. |
AssignedSiteCode | Gibt den aktuellen Standort der angeforderten Sperre an. |
AssignedTimeUTC | Gibt den Zeitpunkt an, zu dem die angeforderte Sperre zugewiesen wurde. |
RequestState
In der folgenden Tabelle werden die möglichen Anforderungszustandswerte angezeigt. Die Anforderungszustände Granted, GrantedAfterTimeout und GrantedLockWasOrphaned geben eine erfolgreiche Anforderung an, und der Benutzer kann dann Änderungen am Objekt vornehmen und speichern. Alle anderen Anforderungen weisen auf einen Fehler hin.
RequestStateID | RequestStateName |
---|---|
0 | Unbekannt |
2 | Angefordert |
3 | RequestedCanceled |
4 | ResponseReceived |
10 | Gewährt |
11 | GrantedAfterTimeout |
12 | GrantedLockWasOrphaned |
20 | DeniedLockAlreadyAssigned |
21 | DeniedInvalidObjectVersion |
22 | DeniedLockNotFound |
23 | DeniedLockNotLocal |
24 | DeniedRequestTimedOut |
50 | Fehler |
52 | ErrorRequestNotFound |
53 | ErrorRequestTimedOut |
LockState
In der folgenden Tabelle werden die möglichen Werte für den Sperrzustand angezeigt.
LockStateID | LockStateName |
---|---|
0 | Nicht zugewiesen |
1 | Zugewiesen |
2 | Angefordert |
3 | PendingAssignment |
4 | Timedout |
5 | NotFound |
Kompilieren des Codes
Für das C#-Beispiel ist Folgendes erforderlich:
Namespaces
System
System.Management
Assembly
Robuste Programmierung
Weitere Informationen zur Fehlerbehandlung finden Sie unter Informationen zu Configuration Manager Fehlern.