0

Exchange Server 2003 に次のクエリを実行することから始めます。

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

ユーザーを取得します。利用可能なプロパティの 1 つは、mailboxguid です。テストのために、私は実行します

POSH> get-qaduser -identity <mailboxguid> 

しかし、それは機能しません。メールボックス GUID に対して何か特別なことをする必要がありますか?

前もって感謝します

4

2 に答える 2

1

問題は別の場所にあると思います。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 を使用する関数に書き直す時間がありません。ごめん。

チャを助けることを願っています

于 2011-02-28T10:14:46.190 に答える
1

Get-QADUser は、DN、SID、GUID、UPN、または Domain\UserName のいずれかのプロパティによってオブジェクトを解決しようとしますが、mailboxguid はそれらのプロパティの 1 つではありません。そうは言っても、メールボックスの "MailboxDisplayName" プロパティを Get-QADUser の ID として使用できます。

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

編集: MailboxDisplayName を使用できない場合は、LegacyDN WMI プロパティを解析してみてください:

get-wmiobject -class Exchange_mailbox -namespace Root\MicrosoftExchangeV2 - computerName srv02| Get-QADUser -identity {$ .LegacyDN.substring($ .LegacyDN.lastIndexOf("=")+1)}

ところで、-server を -computerName に置き換えます。Get-WMIObject には -server パラメータがありません。また、WMI を使用してメールボックスが有効なオブジェクトを取得するのではなく、AD に直接クエリを実行することもできます。

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

于 2009-02-17T08:47:19.330 に答える