Как вернуть пользователя с конкретным ms-DS-ConsistencyGuid на основе запроса фильтра - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь найти пользователя с определенным ms-DS-ConsistencyGuid с помощью командлета powershell ActiveDirectory Get-ADUser

Я уже собрал $string = YvCLyl0B3E2tjT6gUbW8RA== из Azure AD, который мне нуженв качестве основы для моего запроса используется значение свойства ImmutableID, полученное с помощью следующего командлета Azure AD

PS F:\> $test=get-msoluser -UserPrincipalName niklas.jumlin@domain.com | select-object ImmutableID
PS F:\> $test

ImmutableId
-----------
YvCLyl0B3E2tjT6gUbW8RA==

. Я могу успешно преобразовать свойство ImmutableID в формат свойства ms-DS-ConsistencyGuid

PS F:\> $string=[system.convert]::FromBase64String("YvCLyl0B3E2tjT6gUbW8RA==")
PS F:\> $string
98
240
139
202
93
1
220
77
173
141
62
160
81
181
188
68

Я также могу преобразовать свойство ImmutableID в формат свойства ObjectGuid

PS F:\> $bytearray=[system.convert]::frombase64string("YvCLyl0B3E2tjT6gUbW8RA==")
PS F:\> [guid]$bytearray

Guid
----
ca8bf062-015d-4ddc-ad8d-3ea051b5bc44

Если я верну свойство ms-DS-ConsistencyGuid или ObjectGUID объектаuser Я получу следующее:

PS F:\>  $user=get-aduser niklas.jumlin -Properties ms-DS-ConsistencyGuid | select-object Ms-DS-ConsistencyGuid, ObjectGuid
PS F:\>  $user

Ms-DS-ConsistencyGuid  ObjectGuid
---------------------  ----------
{98, 240, 139, 202...} ca8bf062-015d-4ddc-ad8d-3ea051b5bc44

При сравнении двух значений они оба возвращаются равными.

PS F:\>  if ($user.ObjectGuid -eq $user."MS-DS-ConsistencyGuid") { "ok" }
ok

Если я сравниваю значение ImmutableID в различных форматахс ObjectGUID и ms-DS-ConsistencyGuid они оба возвращают равные

PS F:\>  if ($bytearray.guid -eq $user.ObjectGuid) { "ok" }
ok

PS F:\>  if ($string -eq $user."ms-DS-ConsistencyGuid") { "ok" }
ok

Но я не могу использовать значение ImmutableID (в любом формате) в качестве ввода при поиске пользователя с помощью Get-ADUser -filter "ms-DS-ConsistencyGuid -eq $string"

Несколько примеров, которые я пытался:

1

PS F:\>  get-aduser -filter "ms-ds-consistencyGuid -eq $([GUID]$bytearray)"
get-aduser : Error parsing query: 'ms-ds-consistencyGuid -eq ca8bf062-015d4ddc-ad8d-3ea051b5bc44' Error Message: 'syntax error' at position: '27'.
At line:1 char:1
+ get-aduser -filter "ms-ds-consistencyGuid -eq $([GUID]$bytearray)"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : ParserError: (:) [Get-ADUser], ADFilterParsingException
+ FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADFilterParsingException,Microsoft.ActiveDirectory.Management.Commands.GetADUser

2

PS F:\>  get-aduser -filter "ms-ds-ConsistencyGuid -like $([system.convert]::FromBase64String('YvCLyl0B3E2tjT6gUbW8RA==') -join ' ')"
get-aduser : Error parsing query: 'ms-ds-ConsistencyGuid -like 98 240 139 202 93 1 220 77 173 141 62 160 81 181 188 68' Error Message: 'syntax error' at position: '32'.
At line:1 char:1
+ get-aduser -filter "ms-ds-ConsistencyGuid -like $([system.convert]::F ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : ParserError: (:) [Get-ADUser], ADFilterParsingException
+ FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADFilterParsingException,Microsoft.ActiveDirectory.Management.Commands.GetADUser

ОБНОВЛЕНИЕ: Следующее работает, но я не могу понять, как фильтровать для ms-DS-ConsistencyGuid

3

PS F:\>  get-aduser -filter "objectguid -eq '$([GUID]$bytearray)'"


DistinguishedName : CN=Jumlin Niklas,OU=Users,DC=domain,DC=com
Enabled           : True
GivenName         : Niklas
Name              : Jumlin Niklas
ObjectClass       : user
ObjectGUID        : ca8bf062-015d-4ddc-ad8d-3ea051b5bc44
SamAccountName    : niklas.jumlin
SID               : S-1-5-21-1356814742-1182796210-879972363-148862
Surname           : Jumlin
UserPrincipalName : niklas.jumlin@domain.com

1 Ответ

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

Вы можете попробовать следующее:

$string=[system.convert]::FromBase64String("YvCLyl0B3E2tjT6gUbW8RA==")
$hex = -join ($string | %{$_.tostring("X").padleft(2,"0")})
$search = $hex -replace '(..)','\$1'
$adUser = Get-AdUser -LDAPFilter "(ms-ds-consistencyguid=$search)"
...