У нас есть локальный домен AD, синхронизированный с Exchange Online в Office 365. Я пытаюсь использовать PowerShell для получения необходимой информации, но постоянно получаю сообщение об ошибке, и кажется, что команды не работают должным образом.
То, что я пытаюсь сделать, это:
1) Use GET-ADOBJECT to query my local AD for any user/person object in a specific
OU and return the UserPrincipalName
2) Pipe the returned UserPrincipalName to the GET-MAILBOX cmdlet (Exchange Online
in Office 365) and retrieve any mailbox where RecipientTypeDetails equals
“SharedMailbox”. The output will them return UserPrincipalName
3) Pipe the returned UserPrincipalName to GET-ADOBJECT and query my local AD again
for any object where msExchRemoteRecipientType isn’t equal to 100
Комбинированная команда PowerShell выглядит примерно так:
Get-ADObject -Filter {(objectClass -eq "User") -And (objectCategory -eq "Person")} -SearchBase “OU=Test,DC=domain,DC=com” -Properties UserPrincipalName | Select-Object UserPrincipalName | ForEach-Object{Get-Mailbox -Identity $_.UserPrincipalName} | Where-Object {$_.RecipientTypeDetails -eq "SharedMailbox"} | Select-Object UserPrincipalName | ForEach-Object {Get-ADObject -Filter {(UserPrincipalName -eq $_.UserPrincipalName)} -SearchBase "OU=Test,DC=domain,DC=com" –Properties msExchRemoteRecipientType} | Where-Object {$_.msExchRemoteRecipientType -ne 100}
Я пробовал разные варианты, но в итоге получаю следующую ошибку:
Get-ADObject : Property: 'UserPrincipalName' not found in object of type:
'System.Management.Automation.PSCustomObject'.
At line:1 char:356
+ Get-ADObject -Filter {(objectClass -eq "User") -And (objectCategory -eq "Person")} -SearchBase “OU=Test,DC=domain,DC=com” -Properties UserPrincipalName | Select-Object UserPrincipalName | ForEach-Object{Get-Mailbox -Identity $_.UserPrincipalName} | Where-Object {$_.RecipientTypeDetails -eq "SharedMailbox"} | Select-Object UserPrincipalName | ForEach-Object {Get-ADObject -Filter {(UserPrincipalName -eq $_.UserPrincipalName)} -Search Base "OU=Test,DC=domain,DC=com" –Properties msExchRemoteRecipientType} | Where-Object {$_.msExchRemoteRecipientType -ne 100}
+ CategoryInfo : InvalidArgument: (:) [Get-ADObject], ArgumentException
+ FullyQualifiedErrorId : Property: 'UserPrincipalName' not found in object of type:
'System.Management.Automation.PSCustomObject'.,Microsoft.ActiveDirectory.Management.Commands.GetADObject
Если я удаляю последнюю часть (последнюю часть Get-ADObject):
ForEach-Object {Get-ADObject -Filter {(UserPrincipalName -eq $_.UserPrincipalName)} -Search Base "OU=Test,DC=domain,DC=com" –Properties msExchRemoteRecipientType} | Where-Object {$_.msExchRemoteRecipientType -ne 100}
Я получаю желаемый вывод UserPrincipalName.
Моя проблема заключается в передаче вывода UserPrincipalName из Get-Mailbox в Get-ADObject. Причина, по которой я использую «ForEach-Object», заключается в том, что он исправил проблему при передаче по трубопроводу из Get-ADObject в Get-Mailbox, но он не работает при передаче по трубопроводу Get-Mailbox в Get-ADObject.
Я пробовал много разных способов решить эту проблему, но не увенчался успехом. Есть ли способ передать Get-Mailbox в Get-ADObject? Или есть какой-то другой прием, который можно использовать для получения желаемого результата? Можно ли сделать так, чтобы «свойства», возвращаемые из первого запроса Get-ADObject, «передавались через» командлет Get-Mailbox, а затем были доступны эти «свойства» в качестве выходных данных для второго запроса Get-ADObject?
Спасибо
РЕДАКТИРОВАТЬ:
У меня та же проблема при запуске следующего примера:
Get-Mailbox "john.doe@domain.com" | Select-Object UserPrincipalName | Get-ADObject {(UserPrincipalName -eq $_.UserPrincipalName)} -SearchBase "DC=domain,DC=com"
Можно ли по трубопроводу из GET-MAILBOX в GET-ADOBJECT?