квест powershell: get-qaduser -idity guid не работает? - PullRequest
0 голосов
/ 17 февраля 2009

Я начинаю с запроса к серверу Exchange 2003 с:

POSH>get-wmiobject -class Exchange_mailbox -namespace Root\MicrosoftExchangeV2 -server srv02 

чтобы получить пользователей. Одним из доступных свойств является почтовый ящик. поэтому для тестирования я запускаю

POSH> get-qaduser -identity <mailboxguid> 

однако это не работает. Что-то особенное, что мне нужно сделать с почтовым ящиком?

заранее спасибо

Ответы [ 2 ]

1 голос
/ 28 февраля 2011

Я думаю, что проблема кроется в другом: если вы берете объект (например, пользователя) из AD через его имя и смотрите на ObjectGUID, он содержит такую ​​строку:

(Get-QADUser -Identity myDomain\myUser).ObjectGUID 
-> CAEC64A025153143A6755E0A3DAB5C1A

Чтобы получить того же пользователя через его GUID, вы должны указать:

(Get-QADUser -Identity A064ECCA-1525-4331-A675-5E0A3DAB5C1A).ObjectGUID
-> CAEC64A025153143A6755E0A3DAB5C1A

Если вы сравните GUID, вы заметите, что они выглядят несколько похожими, но не одинаковыми:

CAEC64A0-2515-3143-A675-5E0A3DAB5C1A
A064ECCA-1525-4331-A675-5E0A3DAB5C1A

Эта проблема возникает из-за того, что System.GUID использует порядок байтов, отличный от Active Directory, для создания GUID.

Вы можете исправить это так (VB.NET):

Private Shared Function GetCorrectGuid(ByVal aWrongGuid As Guid) As Guid
  Dim myGuidString As String = aWrongGuid.ToString("N")
  Dim myWrongGuid As Char() = myGuidString.ToCharArray()
  Dim myCorrectGuid As Char() = myGuidString.ToCharArray()
  myCorrectGuid(0) = myWrongGuid(6)
  myCorrectGuid(1) = myWrongGuid(7)
  myCorrectGuid(2) = myWrongGuid(4)
  myCorrectGuid(3) = myWrongGuid(5)
  myCorrectGuid(4) = myWrongGuid(2)
  myCorrectGuid(5) = myWrongGuid(3)
  myCorrectGuid(6) = myWrongGuid(0)
  myCorrectGuid(7) = myWrongGuid(1)
  myCorrectGuid(8) = myWrongGuid(10)
  myCorrectGuid(9) = myWrongGuid(11)
  myCorrectGuid(10) = myWrongGuid(8)
  myCorrectGuid(11) = myWrongGuid(9)
  myCorrectGuid(12) = myWrongGuid(14)
  myCorrectGuid(13) = myWrongGuid(15)
  myCorrectGuid(14) = myWrongGuid(12)
  myCorrectGuid(15) = myWrongGuid(13)
  Return New Guid(New String(myCorrectGuid, 0, 32))
End Function

или это (C #):

private static Guid GetCorrectGuid(Guid aWrongGuid) {
  string myGuidString = aWrongGuid.ToString("N");
  char[] myWrongGuid = myGuidString.ToCharArray();
  char[] myCorrectGuid = myGuidString.ToCharArray();
  myCorrectGuid[0] = myWrongGuid[6];
  myCorrectGuid[1] = myWrongGuid[7];
  myCorrectGuid[2] = myWrongGuid[4];
  myCorrectGuid[3] = myWrongGuid[5];
  myCorrectGuid[4] = myWrongGuid[2];
  myCorrectGuid[5] = myWrongGuid[3];
  myCorrectGuid[6] = myWrongGuid[0];
  myCorrectGuid[7] = myWrongGuid[1];
  myCorrectGuid[8] = myWrongGuid[10];
  myCorrectGuid[9] = myWrongGuid[11];
  myCorrectGuid[10] = myWrongGuid[8];
  myCorrectGuid[11] = myWrongGuid[9];
  myCorrectGuid[12] = myWrongGuid[14];
  myCorrectGuid[13] = myWrongGuid[15];
  myCorrectGuid[14] = myWrongGuid[12];
  myCorrectGuid[15] = myWrongGuid[13];
  return new Guid(new string(myCorrectGuid, 0, 32));
}

И да, я знаю, что это не самый эффективный способ, но у меня просто нет времени переписать его сейчас в функцию, которая основана на байтовом массиве и использует arraycopy. К сожалению.

Надеюсь, это поможет chha

1 голос
/ 17 февраля 2009

Get-QADUser пытается разрешить объект одним из следующих свойств: DN, SID, GUID, UPN или Domain \ UserName, mailboxguid не является одним из них. Тем не менее, вы можете использовать свойство почтового ящика «MailboxDisplayName» в качестве идентификатора для Get-QADUser:

get-wmiobject -class Exchange_mailbox -namespace Root \ MicrosoftExchangeV2 -server srv02 | Get-QADUser -identity {$ _. MailboxDisplayName}

РЕДАКТИРОВАТЬ: попробуйте проанализировать свойство LegacyDN WMI, если вы не можете использовать MailboxDisplayName:

get-wmiobject -class Exchange_mailbox -namespace Root \ MicrosoftExchangeV2 - имя_компьютера srv02 | Get-QADUser -identity {$ .LegacyDN.substring ($ .LegacyDN.lastIndexOf ("=") + 1)}

Кстати, замените -server на -computerName, Get-WMIObject не имеет параметра -server. Кроме того, вы можете пойти другим путем и не использовать WMI для получения объектов с поддержкой почтового ящика, вы можете запросить AD напрямую:

Get-QADObject -sizeLimit 0 -ldap "(homeMDB = *)"

...