Запросите OnPremise AD для определенных атрибутов AD, чтобы проверить Office 365 или нет - PullRequest
0 голосов
/ 19 февраля 2019

Мне нужно определить, какой получатель адреса электронной почты уже находится в Office 365. или все еще находится в помещении.

Приведенный ниже простой скрипт PowerShell работает только для экспорта списка пользователей в определенном члене AD.Группы:

Get-ADGroup -Filter {Name -like '*IT*'} | Select-Object @{ n='Group'; e={ $_.Name } }, @{ n='Members'; e={ (Get-ADGroup $_.DistinguishedName -Properties Members | Select-Object Members).Members } } |
    Get-ADGroupMember -Recursive |
        Get-ADUser -Properties Mail | Select-Object Name, sAMAccountName, Mail |
            Export-CSV -path "C:\Group_members.csv" -NoTypeInformation

Я просто хотел еще один столбец, который показывает, находится ли пользователь в Office 365 или все еще включен.

Есть еще одно сообщение эксперта:

Get-MsolUser -UsageLocation US -All |
    Where-Object isLicensed -eq $true |
    Select-Object -Property DisplayName, UserPrincipalName, isLicensed,
    @{label = 'MailboxLocation'; expression = {
            switch ($_.MSExchRecipientTypeDetails) {
                1 {'OnPremise'; break}
                2147483648 {'Office365'; break}
                default {'Unknown'}
            }
        }
    }

Но я не уверен, как объединить приведенный выше сценарий?

Я также пробовал приведенный ниже сценарий для запроса OnPremise AD с определенными атрибутами, но все равно не получилось, результат не вернулся?

Get-ADUser-Filter *-Properties *|
Where-Object {($_.msExchRemoteRecipientType-eq4) -and
  ($_.msExchRecipientDisplayType -eq '-2147483642') -and
  ($_.msExchRecipientTypeDetails -eq '2147483648') -and
  ($_.proxyAddresses -contains "*.onmicrosoft.com*")
} 

1 Ответ

0 голосов
/ 19 февраля 2019

У пользователя через Get-ADUser нет свойства с именем targetAddress

Хотя, если вы укажете его в своем выборе, оно будет отображаться в результатах как пустое, поскольку вам разрешено добавлять любое имя свойства, которое выхотите в выборе, существует ли он или нет.

И это также является синтаксической ошибкой

$_.msExchRecipientDisplayType = '-2147483642')

Вы также неправильно используете операции сравнения, но используете операторы присваивания.Значение -eq vs '='.

$_.msExchRecipientDisplayType -eq ...


# Find all cmdlets / functions with a target parameter
Get-Command -CommandType Function | 
Where-Object { $_.parameters.keys -match 'targetAddress'} | 
Format-Table -Autosize


# No results

Get-Command -CommandType Cmdlet | 
Where-Object { $_.parameters.keys -match 'targetAddress'} | 
Format-Table -Autosize


# No results



Get-Command -CommandType Function | 
Where-Object { $_.parameters.keys -match 'Address'} | 
Format-Table -Autosize


# No results

Get-Command -CommandType Cmdlet | 
Where-Object { $_.parameters.keys -match 'Address'} | 
Format-Table -Autosize

< #
CommandType     Name                        ModuleName
-----------     ---- ----------
Cmdlet          New-ADDCCloneConfigFile     ActiveDirectory
Cmdlet          New-ADOrganizationalUnit    ActiveDirectory
Cmdlet          New-ADUser                  ActiveDirectory
Cmdlet          Set-ADOrganizationalUnit    ActiveDirectory
Cmdlet          Set-ADUser                  ActiveDirectory
#>


Get-Command -CommandType Function | 
Where-Object { $_.parameters.keys -match 'EmailAddress|proxyAddress'} | 
Format-Table -Autosize


# No results

Get-Command -CommandType Cmdlet | 
Where-Object { $_.parameters.keys -match 'EmailAddress|proxyAddress'} | 
Format-Table -Autosize
< #
CommandType Name       ModuleName     
----------- ----       ----------     
Cmdlet      New-ADUser ActiveDirectory
Cmdlet      Set-ADUser ActiveDirectory
#>


Clear-Host
(Get-ADUser -Filter * -Properties *)[0] | 
Get-Member -Force | 
Select Name, MemberType | 
Format-Table -AutoSize


Name                                            MemberType
----                                            ----------
...
EmailAddress                                      Property
...
mail                                              Property
mailNickname                                      Property
...
msExchArchiveQuota                                Property
msExchArchiveWarnQuota                            Property
msExchCalendarLoggingQuota                        Property
msExchCoManagedObjectsBL                          Property
msExchDumpsterQuota                               Property
msExchDumpsterWarningQuota                        Property
msExchELCMailboxFlags                             Property
msExchHomeServerName                              Property
msExchMailboxGuid                                 Property
msExchMailboxSecurityDescriptor                   Property
msExchPoliciesIncluded                            Property
msExchRBACPolicyLink                              Property
msExchRecipientDisplayType                        Property
msExchRecipientTypeDetails                        Property
msExchTextMessagingState                          Property
msExchUMDtmfMap                                   Property
msExchUserAccountControl                          Property
msExchUserCulture                                 Property
msExchVersion                                     Property
msExchWhenMailboxCreated                          Property
...
proxyAddresses                                    Property
...
#>

Как отмечено на другом сайте, это также это ...

($_.proxyAddresses -contains "*.onmicrosoft.com*")

... действительно должно быть так ...

($_.proxyAddresses -match "onmicrosoft.com")

... или это ...

($_.proxyAddresses -like "*.onmicrosoft.com*")

Обновление для OP

After getting back to my test environment, the below works for the use case.

Get-ADUser -Filter * -Properties msExchRemoteRecipientType,proxyAddresses,msExchRecipientDisplayType,msExchRecipientTypeDetails | 
Where-Object {($_.msExchRemoteRecipientType -eq 4) -and
  ($_.proxyAddresses -match "onmicrosoft.com") -and
  ($_.msExchRecipientDisplayType -eq '-2147483642') -and
  ($_.msExchRecipientTypeDetails -eq '2147483648')
} 

Кроме того, исправьте, не то, что вам это нужно для того, что вам нужно, поскольку proxyAddresses возвращают то же самое, когда вы попадаете в этот удаленный почтовый ящик O365, вы получаете свойство targetAddress, оно просто отсутствует в локальных почтовых ящиках, следовательнопричина в том, что proxyAddresses может быть более разумным для использования для согласованности.

Get-ADUser -Filter * -Properties msExchRemoteRecipientType,proxyAddresses,targetAddress,msExchRecipientDisplayType,msExchRecipientTypeDetails | 
Where-Object {($_.msExchRemoteRecipientType -eq 4) -and
  ($_.proxyAddresses -match "onmicrosoft.com") -and
  ($_.targetAddress -match 'onmicrosoft.com') -and 
  ($_.msExchRecipientDisplayType -eq '-2147483642') -and
  ($_.msExchRecipientTypeDetails -eq '2147483648')
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...