使用 PowerShell 查询 AD 以匹配二进制数据



我是PowerShell新手,实际上非常非常新手。我有一个任务,除了使用 PowerShell 之外,我无法执行(我不想证明为什么,相信我,我不想讨论其他方式(。

所以这是我的问题。我需要在 Active Directory 中查询匹配的记录,以寻求 16 字节二进制字段(在我们的安装中称为 netbootGUID(的相等性。目标是在添加新记录之前确保不存在具有相同 netbootGUID 的其他记录(不,他们无法在数据库级别强制执行策略,我无法从墙上控制这一点(。

我正在做的测试是为了向最终解决方案发展,我正在获得一条记录,选择它的 netbootGUID,然后使用我刚刚选择的网络引导 GUID 查询回 AD,以测试肯定的答案。

下面是一个旨在做到这一点的代码片段:

$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:UsersAdministratorDocumentsTests PowerShellnetbootGUID_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

对于我不知道如何切换到英语的法语错误消息,我深表歉意。

它似乎说作为$guid传递的 16 字节二进制值被解释为字符串而不是数组或类似的东西。我可能需要"强制转换"某些内容或使类型显式。

有人可以帮助我解决这个问题吗?

为此,您必须使用原始 LDAP 查询过滤器。使用 LDAP 进行二进制数据搜索时要记住的两件事:

  1. 二进制筛选器必须与确切值匹配(无部分或通配符搜索(
  2. 每个字节都需要转换为十六进制,并以为前缀

考虑到这一点,我们需要一个看起来像这样的过滤器:

(netboodGUID=C6846F67977457EA892658188149DDD)

从字节数组开始,您可以执行以下操作:

$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

最新更新