Резервное копирование данных восстановления TPM в AD DS

В этом разделе для ИТ-специалистов описано, как создавать резервную копию данных доверенного платформенного модуля (TPM) в службах AD DS, чтобы эти службы можно было использовать для администрирования модуля TPM на удаленно компьютере.

Общие сведения об удаленном администрировании модуля TPM

Создание резервной копии сведений о владельце TPM для компьютера позволяет администраторам домена удаленно настраивать аппаратную безопасность, которую обеспечивает модуль TPM, на удаленном компьютере. Например, администраторам может понадобиться сбросить настройки модуля TPM до заводских значений при списании компьютеров или передаче их под другие нужды, не находясь при этом непосредственно за компьютером.

Вы можете использовать AD DS для сохранения сведений о владельце TPM для использования при восстановлении в тех случаях, когда, к примеру, владелец TPM забыл свой пароль или необходимо принудительно получить контроль над модулем TPM. Для компьютера задается только один пароль владельца TPM, поэтому хэш пароля владельца TPM может быть сохранен как атрибут объекта компьютера в службах AD DS. Атрибут имеет общее имя (CN) ms-TPM-OwnerInformation.

Примечание  

Значение авторизации владельца TPM хранится в AD DS и присутствует в файле пароля владельца TPM в качестве хэша SHA-1 пароля владельца TPM, который кодируется по стандарту base 64. Фактический пароля владельца не сохраняется.

 

Контроллеры домена под управлением Windows Server 2012 R2 или Windows Server 2012 по умолчанию включают необходимые объекты схемы AD DS. Однако если контроллер домена работает под управлением Windows Server 2008 R2, необходимо обновить схему в соответствии с инструкциями в разделе Расширения схемы AD DS для поддержки резервного копирования TPM.

В этом разделе содержатся процедуры, некоторые из которых зависят от сценариев Visual Basic, предназначенные для восстановления данных TPM и списания TPM на удаленных компьютерах. Доступны образцы сценариев, которые можно настроить в соответствии с требованиями вашей среды.

В этом разделе

  1. Проверка состояния предварительных требований

  2. Определение разрешений для резервного копирования сведений о пароле

  3. Настройка групповой политики для резервного копирования сведений о восстановлении TPM в AD DS

  4. Использование AD DS для восстановления сведений TPM

  5. Образцы сценариев

Проверка состояния предварительных требований

Перед началом резервного копирования убедитесь, что выполняются следующие предварительные условия.

  1. Все контроллеры домена, доступные с клиентских компьютеров, которые будут использовать службы TPM, работают под управлением Windows Server 2012 R2, Windows Server 2012 или Windows Server 2008 R2 с обновленной схемой.

    Совет  

    Дополнительные сведения о расширениях схемы, необходимых для резервного копирования TPM в доменах Active Directory, работающих под управлением Windows Server 2008 R2, см. в разделе Расширения схемы AD DS для поддержки резервного копирования TPM.

     

  2. У вас есть права администратора домена в целевом лесу или вы используете учетную запись, которой были предоставлены необходимые разрешения для расширения схемы целевого леса. Члены группы администраторов предприятия или администраторов схемы являются примерами учетных записей с подходящими разрешениями.

Определение разрешений для резервного копирования сведений о пароле

В этой процедуре используется образец сценария Add-TPMSelfWriteACE.vbs для добавления записи управления доступом (ACE), что обеспечивает резервное копирование сведений о восстановлении TPM. Без этой записи ACE клиентский компьютер не может создать резервную копию данных владельца TPM.

Этот сценарий выполняется на контроллере домена, который будет использоваться для администрирования данных восстановления TPM; сценарий будет работать при выполнении следующих условий.

  • У вас имеются учетные данные администратора для определения разрешений для доменного объекта верхнего уровня.

  • Ваш целевой домен не отличается от домена учетной записи пользователя, от имени которой выполняется сценарий. Например, выполнение сценария от имени TESTDOMAIN\admin расширит разрешения для TESTDOMAIN.

    Примечание  

    Вы можете изменить образец сценария, если необходимо настроить разрешения для нескольких доменов, однако у вас нет учетных записей администраторов для каждого из этих доменов. Найдите в сценарии переменную strPathToDomain и измените ее для целевого домена, например:

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

     

  • Ваш домен настроен таким образом, чтобы разрешения наследовались от объекта домена верхнего уровня применительно к целевым объектам компьютера.

    Разрешения, не вступят в силу, если какой-либо контейнер в иерархии не допускает наследуемых разрешений. По умолчанию наследование разрешений задается в AD DS. Если вы не уверены, отличается ли ваша конфигурация от этой конфигурации по умолчанию, можете продолжить выполнять действия по настройке для определения разрешений. После этого можно проверить конфигурацию в соответствии с инструкциями, которые приведены ниже в этом разделе. Можно также нажать кнопку Эффективные разрешения при просмотре свойств объекта компьютера, затем проверить наличие разрешений Сам объект для записи в атрибут msTPM-OwnerInformation.

Mt431876.wedge(ru-ru,VS.85).gifЧтобы добавить запись ACE для разрешения восстановления сведений TPM, выполните следующие действия

  1. Откройте образец сценария Add-TPMSelfWriteACE.vbs.

    Сценарий содержит расширение разрешения, поэтому вам необходимо изменить значение strPathToDomain, используя имя домена.

  2. Сохраните изменения вашего сценария.

  3. Введите следующую команду в командной строке и нажмите клавишу ВВОД:

    cscript Add-TPMSelfWriteACE.vbs

Этот сценарий добавляет одну запись ACE к объекту домена верхнего уровня. ACE является наследуемым расширением, которое позволяет компьютеру (Сам объект) записывать атрибут ms-TPM-OwnerInformation для объектов компьютеров в домене.

Выполните следующую процедуру, чтобы проверить установку надлежащих разрешений, а также для удаления записей ACE для TPM и BitLocker из домена верхнего уровня (при возникновении соответствующей необходимости).

Mt431876.wedge(ru-ru,VS.85).gifУправление записями ACE, настроенными на объектах схемы TPM

  1. Откройте образец сценария List-ACEs.vbs.

  2. Измените List-ACEs.vbs.

    Необходимо изменить следующее:

    • Значение strPathToDomain: используйте доменное имя.

    • Параметры фильтрации: сценарий определяет фильтр для работы с объектами схемы, связанными с BitLocker и TPM, поэтому необходимо изменить If IsFilterActive (), если необходимо отобразить или удалить другие объекты схемы.

  3. Сохраните изменения вашего сценария.

  4. Введите следующую команду в командной строке и нажмите клавишу ВВОД:

    cscript List-ACEs.vbs

    Благодаря этому сценарию можно дополнительно удалить записи ACE из объектов схемы, связанных с BitLocker и TPM, в домене верхнего уровня.

Настройка групповой политики для резервного копирования сведений о восстановлении TPM в AD DS

Используйте следующие процедуры, чтобы настроить политику Параметры групповой политики TPM на локальном компьютере. В производственной среде эффективным способом является создание или изменение объекта групповой политики (GPO), который ориентирован на клиентские компьютеры в домене.

Mt431876.wedge(ru-ru,VS.85).gifЧтобы включить параметр локальной политики для резервного копирования сведений восстановления TPM в службы AD DS, выполните следующие действия

  1. Выполните вход на компьютер, подсоединенный к домену, используя доменную учетную запись, которая является членом группы локальных администраторов.

  2. Откройте редактор локальной групповой политики (gpedit.msc), затем в дереве консоли перейдите в раздел Конфигурация компьютера\Шаблоны администрирования\Система.

  3. Щелкните Службы доверенного платформенного модуля.

  4. Дважды щелкните Включить резервное копирование TPM в доменные службы Active Directory.

  5. Щелкните Включено, затем нажмите кнопку ОК.

Важно  

Если этот параметр включен, пароль владельца TPM не может быть установлен или изменен, если компьютер не подключен к домену и резервное копирование сведений о восстановлении TPM не скопировано в AD DS.

 

Использование AD DS для восстановления сведений TPM

Если вам необходимо восстановить сведения о владельце TPM из AD DS и использовать их для управления TPM, необходимо считать объект ms-TPM-OwnerInformation из AD DS, а затем вручную создать файл резервной копии пароля владельца TPM, который можно предоставить при запросе учетных данных владельца TPM.

Mt431876.wedge(ru-ru,VS.85).gifЧтобы получить сведения о резервном копировании данных владельца TPM из AD DS и создать файл пароля, выполните следующие действия

  1. Войдите на контроллер домена с использованием учетных данных администратора домена.

  2. Скопируйте файл образца сценария, Get-TPMOwnerInfo.vbs в расположении на вашем компьютере.

  3. Откройте окно командной строки и измените расположение по умолчанию на расположение файлов образца сценария, сохраненных на предыдущем шаге.

  4. В командной строке введите команду cscript Get-TPMOwnerInfo.vbs.

    Ожидаемым результатом будет строка, которая является хэшем пароля, созданного ранее.

    Примечание  

    Если возникло сообщение об ошибке «Active Directory. Свойство каталога невозможно найти в кэше», убедитесь, что вы используете учетную запись администратора домена, которая необходима для считывания атрибута ms-TPM-OwnerInformation.

    Единственным исключением применительно к этому требованию является тот случай, если пользователи являются объектами компьютера создателя-владельца, которые присоединены к домену, то эти пользователи могут считывать сведения о владельце TPM для своих объектов компьютеров.

     

  5. Откройте блокнот или другой текстовый редактор и скопируйте следующий образец кода в файл, заменив TpmOwnerPasswordHash на строку, записанную на предыдущем шаге.

    <?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. Сохраните файл с расширением tpm на съемном носителе, например USB-устройстве флэш-памяти. Если при получении доступа к TPM необходимо предоставить пароль владельца TPM, выберите возможность считывания пароля из файла и укажите путь к этому файлу.

Образцы сценариев

Вы можете использовать все или часть следующих образцов сценариев, которые задействуются в предыдущих процедурах, чтобы настроить AD DS для создание резервной копии данных восстановления TPM. В зависимости от конфигурации среды требуются те или иные настройки.

  • Add-TPMSelfWriteACE.vbs: используйте этот сценарий для добавления записи управления доступом (ACE) для TPM в службы AD DS

  • List-ACEs.vbs: используйте для отображения или удаления записей ACE, настроенных для объектов схемы BitLocker и TPM

  • Get-TPMOwnerInfo.vbs: используйте для получения данных восстановления TPM из AD DS для определенного компьютера

Add-TPMSelfWriteACE.vbs

Этот сценарий добавляет запись управления доступом (ACE) для TPM в AD DS, чтобы компьютер мог создать резервную копию данных восстановления TPM в 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

Этот сценарий отображает или удаляет ACE, настроенные для объектов схемы BitLocker и TPM для домена верхнего уровня. Это позволяет проверить, были ли ожидаемые записи ACE добавлены надлежащим образом, а также при необходимости удалить любые записи ACE, связанные с BitLocker или TPM.

'===============================================================================
'
' 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

Этот сценарий получает данные восстановления TPM из AD DS для определенного компьютера, чтобы вы могли убедиться, что только администраторы домена (или делегированные роли) могут считывать созданные резервные копии данных восстановления TPM и проверять правильность резервного копирования данных.

'=================================================================================
'
' 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

Дополнительные ресурсы

Обзор технологии доверенного платформенного модуля

Основы TPM

Параметры групповой политики TPM

Командлеты TPM в Windows PowerShell

Расширения схемы AD DS для поддержки резервного копирования TPM

Подготовка организации к использованию BitLocker: планирование и политики см. в разделе вопросов, связанных с TPM