Fazer backup das informações de recuperação do TPM no AD DS

Este tópico para o profissional de TI descreve como fazer backup de informações do Trusted Platform Module (TPM) de um computador nos Serviços de Domínio do Active Directory (AD DS) de maneira que você possa usar o AD DS para administrar o TPM usando um computador remoto.

Sobre como administrar remotamente o TPM

Fazer backup das informações de proprietário do TPM de um computador permite que administradores em um domínio configurem o hardware de segurança do TPM remotamente no computador local. Por exemplo, os administradores podem restaurar os padrões do fabricante do TPM quando desativarem ou reutilizarem computadores, sem que seja necessário estar presente no computador.

Você pode usar o AD DS para armazenar informações de proprietário do TPM a serem usadas em situações de recuperação nas quais o proprietário do TPM tiver esquecido a senha ou onde você deve assumir o controle do TPM. Existe apenas uma senha de proprietário do TPM por computador; por isso, o hash da senha de proprietário do TPM pode ser armazenado como um atributo do objeto de computador no AD DS. O atributo tem o nome comum (CN) de ms-TPM-OwnerInformation.

Observação  

O valor de autorização de proprietário do TPM é armazenado no AD DS e está presente em um arquivo de senha de proprietário do TPM como um hash SHA-1 da senha de proprietário do TPM, codificado em base 64. A senha de proprietário real não é armazenada.

 

Os controladores de domínio nos quais o Windows Server 2012 R2 ou o Windows Server 2012 esteja em execução incluem os objetos de esquema do AD DS necessários por padrão. No entanto, se o controlador de domínio estiver executando o Windows Server 2008 R2, você precisará atualizar o esquema conforme descrito em Extensões de esquema do AD DS para suporte ao backup do TPM.

Este tópico contém procedimentos, alguns dos quais são scripts dependentes do Visual Basic, para recuperar informações do TPM e desativar o TPM em computadores remotos. Há scripts de exemplo disponíveis, que você pode personalizar para atender aos requisitos do ambiente.

Neste tópico:

  1. Verificar o status de pré-requisitos

  2. Definir permissões para fazer backup das informações de senha

  3. Configurar Política de Grupo para fazer backup das informações de recuperação do TPM no AD DS

  4. Usar AD DS para recuperar informações do TPM

  5. Scripts de exemplo

Verificar o status de pré-requisitos

Antes de começar o backup, certifique-se de que os seguintes pré-requisitos tenham sido atendidos:

  1. Todos os controladores de domínio acessíveis por computadores cliente que usarão serviços do TPM estão executando o Windows Server 2012 R2, o Windows Server 2012 ou o Windows Server 2008 R2 com o esquema atualizado.

    Dica  

    Para obter mais informações sobre as extensões de esquema necessárias para um backup do TPM em domínios do Active Directory nos quais o Windows Server 2008 R2 esteja em execução, consulte Extensões de esquema do AD DS para suporte ao backup do TPM.

     

  2. Você tem direitos de administrador do domínio na floresta de destino ou está usando uma conta com permissões apropriadas concedidas para estender o esquema da floresta de destino. Os membros dos grupos Administradores de empresa ou Administradores de esquema são exemplos de contas com as permissões apropriadas.

Definir permissões para fazer backup das informações de senha

Este procedimento usa o script de exemplo Add-TPMSelfWriteACE.vbs para adicionar uma entrada de controle de acesso (ACE) de maneira que seja possível fazer backup das informações de recuperação do TPM. Um computador cliente não pode fazer backup das informações de proprietário do TPM até essa ACE ser adicionada.

Esse script é executado no controlador de domínio que você usará para administrar as informações de recuperação do TPM e funciona com base nas seguintes pressuposições:

  • Você tem credenciais de administrador do domínio para definir permissões do objeto de domínio de nível superior.

  • O domínio de destino é o mesmo domínio da conta de usuário que está executando o script. Por exemplo, a execução do script como TESTDOMAIN\admin estenderá permissões para TESTDOMAIN.

    Observação  

    Talvez seja necessário modificar o script de exemplo, caso você queira definir permissões para vários domínios, mas não tenha contas de administrador do domínio para cada um desses domínios. Encontre a variável strPathToDomain no script e a modifique para o domínio de destino, por exemplo:

    LDAP://DC=testdomain,DC=nttest,DC=microsoft,DC=com

     

  • O domínio está configurado de maneira que as permissões sejam herdadas do objeto de domínio de nível superior para objetos de computador direcionados.

    As permissões não entrarão em vigor se algum contêiner na hierarquia não permitir permissões herdadas. Por padrão, a herança de permissões é definida no AD DS. Se não tiver certeza se a configuração é diferente desse padrão, você poderá continuar as etapas de configuração para definir as permissões. Depois você poderá verificar a configuração conforme descrito posteriormente neste tópico. Ou você pode clicar no botão Permissões Efetivas durante a exibição das propriedades de um objeto de computador e verificar se Próprio está aprovado para gravar o atributo msTPM-OwnerInformation.

Mt431876.wedge(pt-br,VS.85).gifPara adicionar uma ACE e permitir o backup de informações de recuperação do TPM

  1. Abra o script de exemplo Add-TPMSelfWriteACE.vbs.

    O script contém uma extensão de permissão, e você deve modificar o valor de strPathToDomain usando o nome de domínio.

  2. Salve as modificações feitas no script.

  3. Digite o seguinte em um prompt de comando e pressione ENTER:

    cscript Add-TPMSelfWriteACE.vbs

Esse script adiciona uma única ACE ao objeto de domínio de nível superior. A ACE é uma permissão herdável que permite ao computador (SELF) gravar no atributo ms-TPM-OwnerInformation para objetos de computador no domínio.

Conclua o procedimento a seguir para verificar se as permissões corretas estão definidas e remover ACEs do TPM e do BitLocker no domínio de nível superior, se necessário.

Mt431876.wedge(pt-br,VS.85).gifGerenciar ACEs configuradas em objetos de esquema do TPM

  1. Abra o script de exemplo List-ACEs.vbs.

  2. Modifique List-ACEs.vbs.

    Você deve modificar:

    • Valor de strPathToDomain: use o nome de domínio.

    • Opções de filtro: o script define um filtro para resolver objetos de esquema do BitLocker e do TPM, de maneira que você deva modificar If IsFilterActive () caso queira listar ou remover outros objetos de esquema.

  3. Salve as modificações feitas no script.

  4. Digite o seguinte em um prompt de comando e pressione ENTER:

    cscript List-ACEs.vbs

    Com esse script, você também pode remover ACEs dos objetos de esquema do BitLocker e do TPM no domínio de nível superior.

Configurar Política de Grupo para fazer backup das informações de recuperação do TPM no AD DS

Use estes procedimentos para definir a configuração de política TPM Group Policy settings em um computador local. Em um ambiente de produção, uma maneira eficiente de fazer isso é criar ou editar um Objeto de Política de Grupo (GPO) que pode segmentar computadores cliente no domínio.

Mt431876.wedge(pt-br,VS.85).gifPara habilitar a configuração de política local para fazer backup das informações de recuperação do TPM no AD DS

  1. Entre no computador ingressado no domínio usando uma conta de domínio membro do grupo local Administradores.

  2. Abra o Editor de Política de Grupo Local (gpedit. msc) e, na árvore de console, navegue até Configuração do Computador\Modelos Administrativos\Sistema.

  3. Clique em Serviços do Trusted Platform Module.

  4. Clique duas vezes em Ativar backup TPM nos Serviços de Domínio Active Directory.

  5. Clique em Habilitado e em OK.

Importante  

Quando essa configuração é ativada, a senha de proprietário do TPM não pode ser definida ou alterada, a menos que o computador esteja conectado ao domínio e o backup do AD DS das informações de recuperação do TPM seja bem-sucedido.

 

Usar AD DS para recuperar informações do TPM

Ao precisar recuperar as informações de proprietário do TPM do AD DS e usá-las para gerenciar o TPM, você precisa ler o objeto ms-TPM-OwnerInformation do AD DS e criar manualmente um arquivo de backup de senha de proprietário do TPM que pode ser fornecido quando as credenciais de proprietário do TPM são necessárias.

Mt431876.wedge(pt-br,VS.85).gifPara obter informações de backup de proprietário do TPM do AD DS e criar um arquivo de senha

  1. Entre em um controlador de domínio usando credenciais de administrador do domínio.

  2. Copie o arquivo de script de exemplo, Get-TPMOwnerInfo.vbs, para um local no computador.

  3. Abra uma janela Prompt de Comando e altere o local padrão para o local dos arquivos de script de exemplo que você salvou na etapa anterior.

  4. No prompt de comando, digite cscript Get-TPMOwnerInfo.vbs.

    O resultado esperado é uma cadeia de caracteres que é o hash da senha que você criou anteriormente.

    Observação  

    Caso você receba a mensagem de erro "Active Directory: A propriedade de pasta não pode ser encontrada em cache", verifique se está usando uma conta de administrador do domínio, necessária para ler o atributo ms-TPM-OwnerInformation.

    A única exceção a esse requisito é que, caso os usuários sejam o proprietário criador dos objetos de computador que eles adicionam ao domínio, eles possivelmente podem ler as informações de proprietário do TPM dos objetos de computador.

     

  5. Abra o Bloco de Notas ou outro editor de texto e copie o seguinte exemplo de código no arquivo e substitua TpmOwnerPasswordHash pela cadeia de caracteres que você gravou na etapa anterior.

    <?xml version="1.0" encoding="UTF-8"?>
    <!--
    This page is a backup of Trusted Platform Module (TPM) owner
    authorization information. Upon request, use the authorization information to
    prove ownership of the computer's TPM.
    
    
    IMPORTANT: Please keep this file in a secure location away from your computer's
    local hard drive.
    -->
    <tpmOwnerData version="1.0" softwareAuthor="Microsoft Windows [Version 6.1.7600]" creationDate="2009-11-11T14:39:29-08:00" creationUser="DOMAIN\username" machineName="mymachine">
                    <tpmInfo manufacturerId="1096043852"/>
                    <ownerAuth>TpmOwnerPasswordHash</ownerAuth>
    </tpmOwnerData>
    
  6. Salve esse arquivo com uma extensão .tpm em um dispositivo de armazenamento removível, como uma unidade flash USB. Ao acessar o TPM, e você precisar fornecer a senha de proprietário do TPM, escolha a opção para ler a senha de um arquivo e indique o caminho desse arquivo.

Scripts de exemplo

Você pode usar todos ou partes dos scripts de exemplo a seguir, que são usados nos procedimentos anteriores, para configurar o AD DS para fazer backup das informações de recuperação do TPM. A personalização é necessária dependendo de como o ambiente está configurado.

  • Add-TPMSelfWriteACE.vbs: use para adicionar a entrada de controle de acesso (ACE) do TPM ao AD DS

  • List-ACEs.vbs: use para listar ou remover as ACEs configuradas em objetos de esquema do BitLocker e do TPM

  • Get-TPMOwnerInfo.vbs: use para resgatar as informações de recuperação do TPM do AD DS de um determinado computador

Add-TPMSelfWriteACE.vbs

Este script adiciona a entrada de controle de acesso (ACE) do TPM ao AD DS, de maneira que o computador possa fazer backup de informações de recuperação do TPM no AD DS.

'===============================================================================
'
' This script demonstrates the addition of an Access Control Entry (ACE)
' to allow computers to write Trusted Platform Module (TPM) 
' recovery information to Active Directory.
'
' This script creates a SELF ACE on the top-level domain object, and
' assumes that inheritance of ACL's from the top-level domain object to 
' down-level computer objects are enabled.
'
' 
'
' Last Updated: 12/05/2012
' Last Reviewed: 12/05/2012
' Microsoft Corporation
'
' Disclaimer
' 
' The sample scripts are not supported under any Microsoft standard support program
' or service. The sample scripts are provided AS IS without warranty of any kind. 
' Microsoft further disclaims all implied warranties including, without limitation, 
' any implied warranties of merchantability or of fitness for a particular purpose. 
' The entire risk arising out of the use or performance of the sample scripts and 
' documentation remains with you. In no event shall Microsoft, its authors, or 
' anyone else involved in the creation, production, or delivery of the scripts be 
' liable for any damages whatsoever (including, without limitation, damages for loss 
' of business profits, business interruption, loss of business information, or 
' other pecuniary loss) arising out of the use of or inability to use the sample 
' scripts or documentation, even if Microsoft has been advised of the possibility 
' of such damages.
'
' Version 1.0.2 - Tested and re-released for Windows 8 and Windows Server 2012 

' 
'===============================================================================

' --------------------------------------------------------------------------------
' Access Control Entry (ACE) constants 
' --------------------------------------------------------------------------------

'- From the ADS_ACETYPE_ENUM enumeration
Const ADS_ACETYPE_ACCESS_ALLOWED_OBJECT      = &H5   'Allows an object to do something

'- From the ADS_ACEFLAG_ENUM enumeration
Const ADS_ACEFLAG_INHERIT_ACE                = &H2   'ACE can be inherited to child objects
Const ADS_ACEFLAG_INHERIT_ONLY_ACE           = &H8   'ACE does NOT apply to target (parent) object

'- From the ADS_RIGHTS_ENUM enumeration
Const ADS_RIGHT_DS_WRITE_PROP                = &H20  'The right to write object properties
Const ADS_RIGHT_DS_CREATE_CHILD              = &H1   'The right to create child objects

'- From the ADS_FLAGTYPE_ENUM enumeration
Const ADS_FLAG_OBJECT_TYPE_PRESENT           = &H1   'Target object type is present in the ACE 
Const ADS_FLAG_INHERITED_OBJECT_TYPE_PRESENT = &H2   'Target inherited object type is present in the ACE 

' --------------------------------------------------------------------------------
' TPM and FVE schema object GUID's 
' --------------------------------------------------------------------------------

'- ms-TPM-OwnerInformation attribute
SCHEMA_GUID_MS_TPM_OWNERINFORMATION = "{AA4E1A6D-550D-4E05-8C35-4AFCB917A9FE}"

'- ms-FVE-RecoveryInformation object
SCHEMA_GUID_MS_FVE_RECOVERYINFORMATION = "{EA715D30-8F53-40D0-BD1E-6109186D782C}"

'- Computer object
SCHEMA_GUID_COMPUTER = "{BF967A86-0DE6-11D0-A285-00AA003049E2}"

'Reference: "Platform SDK: Active Directory Schema"




' --------------------------------------------------------------------------------
' Set up the ACE to allow write of TPM owner information
' --------------------------------------------------------------------------------

Set objAce1 = createObject("AccessControlEntry")

objAce1.AceFlags = ADS_ACEFLAG_INHERIT_ACE + ADS_ACEFLAG_INHERIT_ONLY_ACE
objAce1.AceType = ADS_ACETYPE_ACCESS_ALLOWED_OBJECT
objAce1.Flags = ADS_FLAG_OBJECT_TYPE_PRESENT + ADS_FLAG_INHERITED_OBJECT_TYPE_PRESENT

objAce1.Trustee = "SELF"
objAce1.AccessMask = ADS_RIGHT_DS_WRITE_PROP 
objAce1.ObjectType = SCHEMA_GUID_MS_TPM_OWNERINFORMATION
objAce1.InheritedObjectType = SCHEMA_GUID_COMPUTER



' --------------------------------------------------------------------------------
' NOTE: BY default, the "SELF" computer account can create 
' BitLocker recovery information objects and write BitLocker recovery properties
'
' No additional ACE's are needed.
' --------------------------------------------------------------------------------


' --------------------------------------------------------------------------------
' Connect to Discretional ACL (DACL) for domain object
' --------------------------------------------------------------------------------

Set objRootLDAP = GetObject("LDAP://rootDSE")
strPathToDomain = "LDAP://" & objRootLDAP.Get("defaultNamingContext") ' e.g. string dc=fabrikam,dc=com

Set objDomain = GetObject(strPathToDomain)

WScript.Echo "Accessing object: " + objDomain.Get("distinguishedName")

Set objDescriptor = objDomain.Get("ntSecurityDescriptor")
Set objDacl = objDescriptor.DiscretionaryAcl

 
' --------------------------------------------------------------------------------
' Add the ACEs to the Discretionary ACL (DACL) and set the DACL
' --------------------------------------------------------------------------------

objDacl.AddAce objAce1

objDescriptor.DiscretionaryAcl = objDacl
objDomain.Put "ntSecurityDescriptor", Array(objDescriptor)
objDomain.SetInfo

WScript.Echo "SUCCESS!"

List-ACEs.vbs

Este script lista ou remove as ACEs configuradas em objetos de esquema do BitLocker e do TPM para o domínio de nível superior. Isso permite verificar se as ACEs esperadas foram adicionadas corretamente ou remover quaisquer ACEs relacionadas ao BitLocker ou ao TPM, se necessário.

'===============================================================================
'
' This script lists the access control entries (ACE's) configured on 
' Trusted Platform Module (TPM) and BitLocker Drive Encryption (BDE) schema objects 
' for the top-level domain.
'
' You can use this script to check that the correct permissions have been set and
' to remove TPM and BitLocker ACE's from the top-level domain.
'
' 
' Last Updated: 12/05/2012
' Last Reviewed: 12/02/2012
'
' Microsoft Corporation
'
' Disclaimer
' 
' The sample scripts are not supported under any Microsoft standard support program
' or service. The sample scripts are provided AS IS without warranty of any kind. 
' Microsoft further disclaims all implied warranties including, without limitation, 
' any implied warranties of merchantability or of fitness for a particular purpose. 
' The entire risk arising out of the use or performance of the sample scripts and 
' documentation remains with you. In no event shall Microsoft, its authors, or 
' anyone else involved in the creation, production, or delivery of the scripts be 
' liable for any damages whatsoever (including, without limitation, damages for loss 
' of business profits, business interruption, loss of business information, or 
' other pecuniary loss) arising out of the use of or inability to use the sample 
' scripts or documentation, even if Microsoft has been advised of the possibility 
' of such damages.
'
' Version 1.0.2 - Tested and re-released for Windows 8 and Windows Server 2012
' 
'===============================================================================

' --------------------------------------------------------------------------------
' Usage
' --------------------------------------------------------------------------------

Sub ShowUsage
   Wscript.Echo "USAGE: List-ACEs"
   Wscript.Echo "List access permissions for BitLocker and TPM schema objects"
   Wscript.Echo ""
   Wscript.Echo "USAGE: List-ACEs -remove"
   Wscript.Echo "Removes access permissions for BitLocker and TPM schema objects"
   WScript.Quit
End Sub


' --------------------------------------------------------------------------------
' Parse Arguments
' --------------------------------------------------------------------------------

Set args = WScript.Arguments

Select Case args.Count
  
  Case 0
      ' do nothing - checks for ACE's 
      removeACE = False
      
  Case 1
    If args(0) = "/?" Or args(0) = "-?" Then
      ShowUsage
    Else 
      If UCase(args(0)) = "-REMOVE" Then
            removeACE = True
      End If
    End If

  Case Else
    ShowUsage

End Select

' --------------------------------------------------------------------------------
' Configuration of the filter to show/remove only ACE's for BDE and TPM objects
' --------------------------------------------------------------------------------

'- ms-TPM-OwnerInformation attribute
SCHEMA_GUID_MS_TPM_OWNERINFORMATION = "{AA4E1A6D-550D-4E05-8C35-4AFCB917A9FE}"

'- ms-FVE-RecoveryInformation object
SCHEMA_GUID_MS_FVE_RECOVERYINFORMATION = "{EA715D30-8F53-40D0-BD1E-6109186D782C}"

' Use this filter to list/remove only ACEs related to TPM and BitLocker

aceGuidFilter = Array(SCHEMA_GUID_MS_TPM_OWNERINFORMATION, _
                      SCHEMA_GUID_MS_FVE_RECOVERYINFORMATION)


' Note to script source reader:
' Uncomment the following line to turn off the filter and list all ACEs
'aceGuidFilter = Array()


' --------------------------------------------------------------------------------
' Helper functions related to the list filter for listing or removing ACE's
' --------------------------------------------------------------------------------

Function IsFilterActive()

    If Join(aceGuidFilter) = "" Then
       IsFilterActive = False
    Else 
       IsFilterActive = True
    End If

End Function


Function isAceWithinFilter(ace) 

    aceWithinFilter = False  ' assume first not pass the filter

    For Each guid In aceGuidFilter 

        If ace.ObjectType = guid Or ace.InheritedObjectType = guid Then
           isAceWithinFilter = True           
        End If
    Next

End Function

Sub displayFilter
    For Each guid In aceGuidFilter
       WScript.echo guid
    Next
End Sub


' --------------------------------------------------------------------------------
' Connect to Discretional ACL (DACL) for domain object
' --------------------------------------------------------------------------------

Set objRootLDAP = GetObject("LDAP://rootDSE")
strPathToDomain = "LDAP://" & objRootLDAP.Get("defaultNamingContext") ' e.g. dc=fabrikam,dc=com

Set domain = GetObject(strPathToDomain)

WScript.Echo "Accessing object: " + domain.Get("distinguishedName")
WScript.Echo ""

Set descriptor = domain.Get("ntSecurityDescriptor")
Set dacl = descriptor.DiscretionaryAcl


' --------------------------------------------------------------------------------
' Show Access Control Entries (ACE's)
' --------------------------------------------------------------------------------

' Loop through the existing ACEs, including all ACEs if the filter is not active

i = 1 ' global index
c = 0 ' found count - relevant if filter is active

For Each ace In dacl

 If IsFilterActive() = False or isAceWithinFilter(ace) = True Then

    ' note to script source reader:
    ' echo i to show the index of the ACE
    
    WScript.echo ">            AceFlags: " & ace.AceFlags
    WScript.echo ">             AceType: " & ace.AceType
    WScript.echo ">               Flags: " & ace.Flags
    WScript.echo ">          AccessMask: " & ace.AccessMask
    WScript.echo ">          ObjectType: " & ace.ObjectType
    WScript.echo "> InheritedObjectType: " & ace.InheritedObjectType
    WScript.echo ">             Trustee: " & ace.Trustee
    WScript.echo ""


    if IsFilterActive() = True Then
      c = c + 1

      ' optionally include this ACE in removal list if configured
      ' note that the filter being active is a requirement since we don't
      ' want to accidentally remove all ACEs

      If removeACE = True Then
        dacl.RemoveAce ace  
      End If

    end if

  End If 

  i = i + 1

Next


' Display number of ACEs found

If IsFilterActive() = True Then

  WScript.echo c & " ACE(s) found in " & domain.Get("distinguishedName") _
                 & " related to BitLocker and TPM" 'note to script source reader: change this line if you configure your own 

filter

  ' note to script source reader: 
  ' uncomment the following lines if you configure your own filter
  'WScript.echo ""
  'WScript.echo "The following filter was active: "
  'displayFilter
  'Wscript.echo ""

Else

  i = i - 1
  WScript.echo i & " total ACE(s) found in " & domain.Get("distinguishedName")
  
End If


' --------------------------------------------------------------------------------
' Optionally remove ACE's on a filtered list
' --------------------------------------------------------------------------------

if removeACE = True and IsFilterActive() = True then

  descriptor.DiscretionaryAcl =  dacl
  domain.Put "ntSecurityDescriptor", Array(descriptor)
  domain.setInfo

  WScript.echo c & " ACE(s) removed from " & domain.Get("distinguishedName")

else 

  if removeACE = True then

    WScript.echo "You must specify a filter to remove ACEs from " & domain.Get("distinguishedName") 
 
 end if


end if

Get-TPMOwnerInfo.vbs

Este script recupera informações de recuperação do TPM do AD DS de um determinado computador de maneira que você possa verificar se apenas administradores de domínio (ou funções delegadas) podem ler informações de recuperação do TPM armazenadas em backup e se certificar de que o backup das informações esteja sendo feito corretamente.

'=================================================================================
'
' This script demonstrates the retrieval of Trusted Platform Module (TPM) 
' recovery information from Active Directory for a particular computer.
'
' It returns the TPM owner information stored as an attribute of a 
' computer object.
'
' Last Updated: 12/05/2012
' Last Reviewed: 12/05/2012
'
' Microsoft Corporation
'
' Disclaimer
' 
' The sample scripts are not supported under any Microsoft standard support program
' or service. The sample scripts are provided AS IS without warranty of any kind. 
' Microsoft further disclaims all implied warranties including, without limitation, 
' any implied warranties of merchantability or of fitness for a particular purpose. 
' The entire risk arising out of the use or performance of the sample scripts and 
' documentation remains with you. In no event shall Microsoft, its authors, or 
' anyone else involved in the creation, production, or delivery of the scripts be 
' liable for any damages whatsoever (including, without limitation, damages for loss 
' of business profits, business interruption, loss of business information, or 
' other pecuniary loss) arising out of the use of or inability to use the sample 
' scripts or documentation, even if Microsoft has been advised of the possibility 
' of such damages.
'
' Version 1.0 - Initial release
' Version 1.1 - Updated GetStrPathToComputer to search the global catalog.
' Version 1.1.2 - Tested and re-released for Windows 8 and Windows Server 2012
' 
'=================================================================================


' --------------------------------------------------------------------------------
' Usage
' --------------------------------------------------------------------------------

Sub ShowUsage
   Wscript.Echo "USAGE: Get-TpmOwnerInfo [Optional Computer Name]"
   Wscript.Echo "If no computer name is specified, the local computer is assumed."
   WScript.Quit
End Sub

' --------------------------------------------------------------------------------
' Parse Arguments
' --------------------------------------------------------------------------------

Set args = WScript.Arguments

Select Case args.Count
  
  Case 0
      ' Get the name of the local computer      
      Set objNetwork = CreateObject("WScript.Network")
      strComputerName = objNetwork.ComputerName
    
  Case 1
    If args(0) = "/?" Or args(0) = "-?" Then
      ShowUsage
    Else
      strComputerName = args(0)
    End If
  
  Case Else
    ShowUsage

End Select


' --------------------------------------------------------------------------------
' Get path to Active Directory computer object associated with the computer name
' --------------------------------------------------------------------------------

Function GetStrPathToComputer(strComputerName) 

    ' Uses the global catalog to find the computer in the forest
    ' Search also includes deleted computers in the tombstone

    Set objRootLDAP = GetObject("LDAP://rootDSE")
    namingContext = objRootLDAP.Get("defaultNamingContext") ' e.g. string dc=fabrikam,dc=com    

    strBase = "<GC://" & namingContext & ">"
 
    Set objConnection = CreateObject("ADODB.Connection") 
    Set objCommand = CreateObject("ADODB.Command") 
    objConnection.Provider = "ADsDSOOBject" 
    objConnection.Open "Active Directory Provider" 
    Set objCommand.ActiveConnection = objConnection 

    strFilter = "(&(objectCategory=Computer)(cn=" &  strComputerName & "))"
    strQuery = strBase & ";" & strFilter  & ";distinguishedName;subtree" 

    objCommand.CommandText = strQuery 
    objCommand.Properties("Page Size") = 100 
    objCommand.Properties("Timeout") = 100
    objCommand.Properties("Cache Results") = False 

    ' Enumerate all objects found. 

    Set objRecordSet = objCommand.Execute 
    If objRecordSet.EOF Then
      WScript.echo "The computer name '" &  strComputerName & "' cannot be found."
      WScript.Quit 1
    End If

    ' Found object matching name

    Do Until objRecordSet.EOF 
      dnFound = objRecordSet.Fields("distinguishedName")
      GetStrPathToComputer = "LDAP://" & dnFound
      objRecordSet.MoveNext 
    Loop 


    ' Clean up. 
    Set objConnection = Nothing 
    Set objCommand = Nothing 
    Set objRecordSet = Nothing 

End Function

' --------------------------------------------------------------------------------
' Securely access the Active Directory computer object using Kerberos
' --------------------------------------------------------------------------------

Set objDSO = GetObject("LDAP:")
strPath = GetStrPathToComputer(strComputerName)


WScript.Echo "Accessing object: " + strPath

Const ADS_SECURE_AUTHENTICATION = 1
Const ADS_USE_SEALING = 64 '0x40
Const ADS_USE_SIGNING = 128 '0x80

Set objComputer = objDSO.OpenDSObject(strPath, vbNullString, vbNullString, _
                                   ADS_SECURE_AUTHENTICATION + ADS_USE_SEALING + ADS_USE_SIGNING)

' --------------------------------------------------------------------------------
' Get the TPM owner information from the Active Directory computer object
' --------------------------------------------------------------------------------

strOwnerInformation = objComputer.Get("msTPM-OwnerInformation")
WScript.echo "msTPM-OwnerInformation: " + strOwnerInformation

Recursos adicionais

Visão geral da tecnologia Trusted Platform Module

Conceitos básicos do TPM

Configurações da Política de Grupo do TPM

Cmdlets do TPM no Windows PowerShell

Extensões de esquema do AD DS para suporte ao backup do TPM

Preparar a organização para o BitLocker: planejamento e políticas, consulte Considerações sobre o TPM