Como adquirir um bloqueio em um objeto SEDO-Enabled

Para adquirir um bloqueio explícito em um objeto habilitado para SEDO

  1. Criar uma instância da SMS_ObjectLock classe WMI

  2. Obtenha o objeto method parameters para o RequestLock método.

  3. Atribua o caminho do objeto que você deseja bloquear à ObjectRelPath propriedade.

  4. Defina a RequestTransfer propriedade como true.

  5. Crie uma instância de InvokeMethodOptions objeto. Na propriedade Context, adicione um par nome/valor. O nome deve ser "ObjectLockContext" e o valor deve ser um valor exclusivo, como um Guid. Adicione outro par nome/valor com "MachineName" e o nome do computador que está solicitando o bloqueio.

  6. Chame InvokeMethod na SMS_ObjectLock instância.

  7. InvokeMethod retornará uma SMS_ObjectLockRequest instância. Verifique as RequestState propriedades and LockState para obter mais informações sobre o sucesso ou falha da solicitação.

Exemplo

O exemplo a seguir solicita um bloqueio explícito em uma instância de SMS_ConfigurationItem objeto.

 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);

     }
}

O objeto SMS_ObjectLockRequest contém as seguintes propriedades:

Propriedade Descrição
RequestID Identificador exclusivo da solicitação.
ObjectRelPath O caminho do objeto para o qual o bloqueio é solicitado.
RequestState Indica o êxito ou a falha da solicitação.
LockState Indica o estado atual do bloqueio solicitado.
AssignedUser Indica o usuário atualmente atribuído do bloqueio solicitado.
AssignedObjectLockContext Indica ObjectLockContext ao qual o bloqueio está atualmente atribuído.
AssignedMachine Indica o computador atualmente atribuído do bloqueio solicitado.
AssignedSiteCode Indica o local atual do bloqueio solicitado.
AssignedTimeUTC Indica a hora em que o bloqueio solicitado foi atribuído.

RequestState A tabela a seguir exibe os possíveis valores de estado da solicitação. Os estados de solicitação Granted, GrantedAfterTimeout e GrantedLockWasOrphaned indicam uma solicitação bem-sucedida e o usuário pode fazer e salvar modificações no objeto. Todas as outras solicitações indicam erro.

RequestStateID RequestStateName
0 Desconhecido
2 Solicitado
3 RequestedCanceled
4 ResponseReceived
10 Concedido
11 GrantedAfterTimeout
12 GrantedLockWasOrphaned
20 DeniedLockAlreadyAssigned
21 DeniedInvalidObjectVersion
22 DeniedLockNotFound
23 DeniedLockNotLocal
24 DeniedRequestTimedOut
50 Erro
52 ErrorRequestNotFound
53 ErrorRequestTimedOut

LockState A tabela abaixo exibe os possíveis valores de estado de bloqueio.

LockStateID LockStateName
0 Não atribuído
1 Atribuído
2 Solicitado
3 PendingAssignment
4 Tempo expirado
5 NotFound

Compilando o código

O exemplo do C# requer:

Namespaces

Sistema

System.Management

Assembly

Programação robusta

Para obter mais informações sobre o tratamento de erros, consulte Sobre erros do Configuration Manager.

Confira também

Configuration Manager SEDO