Question

Je commence par l'interrogation d'un serveur d'échange 2003 avec:

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

pour obtenir les utilisateurs. L'une des propriétés disponibles est le MailboxGuid. donc pour le test, je lance

POSH> get-qaduser -identity <mailboxguid> 

mais il ne fonctionne pas. est-il quelque chose que je dois faire à la MailboxGuid spéciale?

merci à l'avance

Était-ce utile?

La solution

Get-QADUser tente de résoudre un objet par une de ces propriétés: DN, SID, GUID, UPN ou domaine \ nomutilisateur, MailboxGuid n'est pas un d'entre eux. Cela dit, vous pouvez utiliser la boîte aux lettres « MailboxDisplayName » propriété comme l'identité pour Get-QADUser:

get-WmiObject -Class Exchange_mailbox -nameSpace Root \ MicrosoftExchangeV2 -server srv02 | Get-QADUser -identity {$ _. MailboxDisplayName}

EDIT: Essayez d'analyser la propriété LegacyDN WMI si vous ne pouvez pas utiliser MailboxDisplayName:

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

BTW, remplacez -server avec -computerName, Get-WMIObject n'a pas de paramètre -server. Je outre, vous pouvez aller dans l'autre et ne pas utiliser WMI pour obtenir la boîte aux lettres des objets activés, vous pouvez interroger directement AD:

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

Autres conseils

Je pense que le problème est ailleurs: si vous obtenez un objet (par exemple un utilisateur) de l'AD par son nom et regardez le ObjectGUID, il contient une chaîne comme ceci:

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

Pour obtenir le même utilisateur à travers son GUID, vous devez spécifier:

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

Si vous comparez les GUIDs vous remarquerez qu'ils ont l'air un peu similaire, mais pas le même:

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

Ce problème se produit parce que le System.GUID utilise un autre ordre d'octets que Active Directory pour construire le GUID.

Vous pouvez corriger comme ça (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

ou ce (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));
}

Et oui, je sais que ce n'est pas la façon la plus efficace, mais je n'ai pas simplement le temps de réécrire maintenant dans une fonction qui est basée sur un octet tableau et qui utilise arraycopy. Désolé.

Hope qui aide chha

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top