如何获取 SEDO-Enabled 对象的锁

获取已启用 SEDO 的对象上的显式锁

  1. 创建 WMI 类的 SMS_ObjectLock 实例

  2. 获取方法的方法参数对象 RequestLock

  3. 将要锁定的对象的对象路径分配给 ObjectRelPath 属性。

  4. RequestTransfer 属性设置为 true

  5. 创建 InvokeMethodOptions 对象实例。 在 Context 属性上,添加名称/值对。 名称必须是“ObjectLockContext”,值必须是唯一值,例如 Guid。 使用“MachineName”和请求锁定的计算机名称添加另一个名称/值对。

  6. SMS_ObjectLock实例调用 InvokeMethod

  7. InvokeMethod 将返回实例 SMS_ObjectLockRequestRequestState检查 和 LockState 属性以获取有关请求成功或失败的详细信息。

示例

以下示例请求对对象实例进行 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);

     }
}

SMS_ObjectLockRequest 对象包含以下属性:

属性 说明
RequestID 请求的唯一标识符。
ObjectRelPath 请求锁定的对象的路径。
RequestState 指示请求的成功或失败。
LockState 指示所请求锁的当前状态。
AssignedUser 指示请求的锁的当前分配用户。
AssignedObjectLockContext 指示锁当前分配到的 ObjectLockContext。
AssignedMachine 指示请求锁的当前分配的计算机。
AssignedSiteCode 指示请求的锁的当前站点。
AssignedTimeUTC 指示分配请求的锁的时间。

RequestState 下表显示了可能的请求状态值。 请求状态 Granted、GrantedAfterTimeout 和 GrantedLockWasOrphaned 指示请求成功,然后用户可以对对象进行和保存修改。 所有其他请求都指示错误。

RequestStateID RequestStateName
0 未知
2 已请求
3 RequestedCanceled
4 ResponseReceived
10 Granted
11 GrantedAfterTimeout
12 GrantedLockWasOrphaned
20 DeniedLockAlreadyAssigned
21 DeniedInvalidObjectVersion
22 DeniedLockNotFound
23 DeniedLockNotLocal
24 DeniedRequestTimedOut
50 错误
52 ErrorRequestNotFound
53 ErrorRequestTimedOut

LockState 下表显示了可能的锁定状态值。

LockStateID LockStateName
0 未分配
1 已分配
2 已请求
3 PendingAssignment
4 TimedOut
5 NotFound

编译代码

C# 示例需要:

命名空间

系统警报

System.Management

Assembly

可靠编程

有关错误处理的详细信息,请参阅关于Configuration Manager错误

另请参阅

Configuration Manager SEDO