Запрос AD с использованием PowerShell для сопоставления двоичных данных - PullRequest
0 голосов
/ 02 июня 2018

Я новичок в PowerShell, на самом деле очень, очень новичок.У меня есть задача, которую я не могу выполнить иначе, чем с помощью PowerShell (я не хочу объяснять, почему, доверяя мне на этом, я не хочу вступать в дискуссии о других путях).

Так вотмоя проблема.Мне нужно запросить Active Directory для сопоставления записи, ища равенство для 16-байтового двоичного поля (называемого netbootGUID в нашей установке).Цель состоит в том, чтобы убедиться, что не существует других записей с тем же netbootGUID перед добавлением новой записи (нет, они не могут применять политику на уровне базы данных, и я не могу контролировать это со своей стороны стены).

Что я делаю в качестве теста для перехода к окончательному решению, я получаю запись, выбираю ее netbootGUID и затем запрашиваю AD с netbootGUID, который я только что выбрал, чтобы проверить положительный ответ.

Вот фрагмент кода, предназначенный именно для этого:

$value = Get-ADComputer -Server $myADserver -SearchBase "CN=Computers,$baseDN" -Filter 'Name -eq "an_existing_computer"' -Credential $credentials -Properties netbootGUID
$guid = $value.netbootGUID
Get-ADComputer -Server $myADserver -SearchBase "CN=Computers,$baseDN" -Filter "netbootGUID -eq $guid" -Credential $credentials -Properties Name

Вместо получения значения при выполнении поиска по значению netbootGUID, полученного ранее, я получаю сообщение об ошибке:

Get-ADComputer : Erreur lors de l’analyse de la requête: «netbootGUID -eq 198 132 111 6 121 119 69 126 168 146 101 129 136 20 157 221» Message d’erreur: «syntax error» à la position: «21».
Au caractère C:\Users\Administrator\Documents\Tests PowerShell\netbootGUID_AD_Caisses.ps1:42 : 1
+ Get-ADComputer -Server $serveurAD -SearchBase "CN=Computers,$baseDN" -Filter "ne ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ParserError: (:) [Get-ADComputer], ADFilterParsingException
    + FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADFilterParsingExeption,Microsoft.ActiveDirectory.Management.Commands.GetADComputer

Я прошу прощения за французское сообщение об ошибке. Я не знаю, как переключиться на английский.

Кажется, что 16-байтовое двоичное значение, переданное как $ guid, интерпретируется как строка вместо массиваили что-то типа того.Возможно, мне нужно что-то «привести» или сделать тип явным.

Кто-нибудь может мне помочь с этим?

1 Ответ

0 голосов
/ 03 июня 2018

Для этого вам нужно будет использовать необработанный фильтр запросов LDAP.При использовании LDAP для поиска двоичных данных следует иметь в виду две вещи:

  1. Двоичные фильтры должны соответствовать точному значению (без частичного или группового поиска)
  2. Каждый байт необходимо преобразовать вшестнадцатеричный и с префиксом \

Имея это в виду, нам понадобится фильтр, который выглядит примерно так:

(netboodGUID=\C6\84\6F\06\79\77\45\7E\A8\92\65\81\88\14\9D\DD)

Начиная с байтового массива, вы можете сделатькак то так:

$guidBinaryString = @($guid|ForEach-Object { '\{0:X2}' -f $_ }) -join ''
$LDAPFilter = "(netboodGUID=$guidBinaryString)"

Get-ADComputer -LDAPFilter $LDAPFilter -Server $myADserver -SearchBase "CN=Computers,$baseDN" -Credential $credentials -Properties Name
...