【Office 365】계층형 주소록의 계층구조를 리스트에 출력하는 PowerShell 스크립트를 작성했다
소개
Office 365(Exchange Online)의 계층형 주소록의 계층 구조를 목록에 출력하는 PowerShell 스크립트를 작성했으므로 메모.
가공 용이성 중시의 리스트를 출력하는 스크립트와 확실히 알기 쉬움 중시의 리스트를 출력하는 스크립트의 2 패턴으로 작성해 보았다.
절차 작성은 다음과 같은 계층적 주소록에 대해 수행되었다. (작성 환경의 라이센스가 부족했기 때문에 사용자 대신에 연락처를 사용하고 있다)
스크립트
가공 용이성 중심 스크립트
스크립트는 다음과 같습니다.
GetGalStructure.ps1#getGroupTree関数定義
function getGroupTree($targetRecipient, $upperHierarchy){
#$Datasに現在の$targetRecipientの情報を追記
$Data = New-Object PSObject | Select-Object upperHierarchy, DisplayName, PrimarySmtpAddress, Title, RecipientType
$Data.upperHierarchy = $upperHierarchy -join " - "
$Data.DisplayName = $targetRecipient.DisplayName
$Data.PrimarySmtpAddress = $targetRecipient.PrimarySmtpAddress
$Data.Title = $targetRecipient.Title
$Data.RecipientType = $targetRecipient.RecipientType
[void]$Datas.Add($Data)
#$targetRecipientがグループの場合
if($targetRecipient.RecipientType -eq "MailUniversalSecurityGroup"){
#$upperHierarchyに$targetRecipientを追加
$upperHierarchy += @($targetRecipient.DisplayName)
#$targetRecipientのメンバー取得
Get-DistributionGroupMember $targetRecipient.Alias |
#取得したメンバーをユーザー、連絡先、グループの順で並び替え
Select-Object Alias, DisplayName, PrimarySmtpAddress, Title, RecipientType, @{L="SortIndex"; E={switch($_.RecipientType){
"UserMailBox"{0}
"MailContact"{1}
"MailUniversalSecurityGroup"{2}
}}} |
Sort-Object -Property SortIndex, DisplayName |
#取得したメンバーに対してgetGroupTree関数を再帰実行
ForEach-Object {getGroupTree $_ $upperHierarchy}
}
}
#取得したGAL構造を格納するオブジェクト$Datasを定義
$global:Datas = New-Object System.Collections.ArrayList
#GALルート取得、チェック
$treeRootName = (Get-OrganizationConfig).HierarchicalAddressBookRoot
if([string]::IsNullOrEmpty($treeRootName)){"HierarchicalAddressBookRoot未指定。スクリプトの実行を中断します。";exit}
#GALルートに対してgetGroupTree関数を実行
getGroupTree (Get-DistributionGroup $treeRootName)
Exchange Online PowerShell에 원격으로 연결한 후 GetGalStructure.ps1
PS > .\GetGalStructure.ps1
$Datas
에 계층 구조의 리스트가 저장되므로 Out-GridView
이나 Export-Csv
로 리스트를 출력하면 된다.
Out-GridView
로 출력하는 경우.
PS > $Datas | Out-GridView
Excel 등으로 가공해 2차 이용은 하기 쉽지만, 확실히 보면 계층 구조를 알기 어려울지도.
확실히 알기 쉬움 중시 스크립트
스크립트는 다음과 같습니다.
GetGalStructure2.ps1#getGroupTree関数定義
function getGroupTree($targetRecipient, $upperHierarchy){
#現在の$targetRecipientを格納するオブジェクト$Dataを定義
$Data = New-Object PSObject | Select-Object upperHierarchy, DisplayName, PrimarySmtpAddress, Title, RecipientType
$Data.PrimarySmtpAddress = $targetRecipient.PrimarySmtpAddress
$Data.RecipientType = $targetRecipient.RecipientType
#$targetRecipientがグループの場合
if($targetRecipient.RecipientType -eq "MailUniversalSecurityGroup"){
#$upperHierarchyに$targetRecipientを追加
$upperHierarchy += @($targetRecipient.DisplayName)
#$Datasに$targetRecipientの情報を追記
$Data.upperHierarchy = $upperHierarchy -join " - "
[void]$Datas.Add($Data)
#$targetRecipientのメンバー取得
Get-DistributionGroupMember $targetRecipient.Alias |
#取得したメンバーをユーザー、連絡先、グループの順で並び替え
Select-Object Alias, DisplayName, PrimarySmtpAddress, Title, RecipientType, @{L="SortIndex"; E={switch($_.RecipientType){
"UserMailBox"{0}
"MailContact"{1}
"MailUniversalSecurityGroup"{2}
}}} |
Sort-Object -Property SortIndex, DisplayName |
#取得したメンバーに対して関数を再帰実行
ForEach-Object {getGroupTree $_ $upperHierarchy}
#$targetRecipientがその他受信者の場合
}else{
#$Datasに$targetRecipientの情報を追記
$Data.DisplayName = $targetRecipient.DisplayName
$Data.Title = $targetRecipient.Title
[void]$Datas.Add($Data)
}
}
#取得したGAL構造を格納するオブジェクト$Datasを定義
$global:Datas = New-Object System.Collections.ArrayList
#GALルート取得、チェック
$treeRootName = (Get-OrganizationConfig).HierarchicalAddressBookRoot
if([string]::IsNullOrEmpty($treeRootName)){"HierarchicalAddressBookRoot未指定。スクリプトの実行を中断します。";exit}
#GALルートに対してgetGroupTree関数を実行
getGroupTree (Get-DistributionGroup $treeRootName)
Exchange Online PowerShell에 원격으로 연결한 후 GetGalStructure2.ps1
PS > .\GetGalStructure2.ps1
이쪽도 마찬가지로 $Datas
에 계층 구조의 리스트가 저장되므로 Out-GridView
이나 Export-Csv
로 리스트를 출력하면 된다.
Out-GridView
로 출력하는 경우.
PS > $Datas | Out-GridView
조금 전의 리스트에 비해 확실히 보아 계층 구조를 알기 쉽지만, 그 때문에 출력을 생략하고 있는 열이 있으므로, Excel등으로 가공은 하기 어려울지도.
결론
요청이 있으면 SeniorityIndex
도 포함한 리스트를 출력하는 스크립트도 만들어 소개할지도. ( Get-DistributionGroupMember
에서는 SeniorityIndex
속성을 얻을 수 없기 때문에 GAL에 포함된 각 개체에 대해 함수 내에서 추가 Get 명령을 실행해야 하며 런타임 부담이 상당히 크다.)
이상
Reference
이 문제에 관하여(【Office 365】계층형 주소록의 계층구조를 리스트에 출력하는 PowerShell 스크립트를 작성했다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/r-wakatsuki/items/e67c6805d7b3eec95258
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
가공 용이성 중심 스크립트
스크립트는 다음과 같습니다.
GetGalStructure.ps1
#getGroupTree関数定義
function getGroupTree($targetRecipient, $upperHierarchy){
#$Datasに現在の$targetRecipientの情報を追記
$Data = New-Object PSObject | Select-Object upperHierarchy, DisplayName, PrimarySmtpAddress, Title, RecipientType
$Data.upperHierarchy = $upperHierarchy -join " - "
$Data.DisplayName = $targetRecipient.DisplayName
$Data.PrimarySmtpAddress = $targetRecipient.PrimarySmtpAddress
$Data.Title = $targetRecipient.Title
$Data.RecipientType = $targetRecipient.RecipientType
[void]$Datas.Add($Data)
#$targetRecipientがグループの場合
if($targetRecipient.RecipientType -eq "MailUniversalSecurityGroup"){
#$upperHierarchyに$targetRecipientを追加
$upperHierarchy += @($targetRecipient.DisplayName)
#$targetRecipientのメンバー取得
Get-DistributionGroupMember $targetRecipient.Alias |
#取得したメンバーをユーザー、連絡先、グループの順で並び替え
Select-Object Alias, DisplayName, PrimarySmtpAddress, Title, RecipientType, @{L="SortIndex"; E={switch($_.RecipientType){
"UserMailBox"{0}
"MailContact"{1}
"MailUniversalSecurityGroup"{2}
}}} |
Sort-Object -Property SortIndex, DisplayName |
#取得したメンバーに対してgetGroupTree関数を再帰実行
ForEach-Object {getGroupTree $_ $upperHierarchy}
}
}
#取得したGAL構造を格納するオブジェクト$Datasを定義
$global:Datas = New-Object System.Collections.ArrayList
#GALルート取得、チェック
$treeRootName = (Get-OrganizationConfig).HierarchicalAddressBookRoot
if([string]::IsNullOrEmpty($treeRootName)){"HierarchicalAddressBookRoot未指定。スクリプトの実行を中断します。";exit}
#GALルートに対してgetGroupTree関数を実行
getGroupTree (Get-DistributionGroup $treeRootName)
Exchange Online PowerShell에 원격으로 연결한 후
GetGalStructure.ps1
PS > .\GetGalStructure.ps1
$Datas
에 계층 구조의 리스트가 저장되므로 Out-GridView
이나 Export-Csv
로 리스트를 출력하면 된다.Out-GridView
로 출력하는 경우.PS > $Datas | Out-GridView
Excel 등으로 가공해 2차 이용은 하기 쉽지만, 확실히 보면 계층 구조를 알기 어려울지도.
확실히 알기 쉬움 중시 스크립트
스크립트는 다음과 같습니다.
GetGalStructure2.ps1
#getGroupTree関数定義
function getGroupTree($targetRecipient, $upperHierarchy){
#現在の$targetRecipientを格納するオブジェクト$Dataを定義
$Data = New-Object PSObject | Select-Object upperHierarchy, DisplayName, PrimarySmtpAddress, Title, RecipientType
$Data.PrimarySmtpAddress = $targetRecipient.PrimarySmtpAddress
$Data.RecipientType = $targetRecipient.RecipientType
#$targetRecipientがグループの場合
if($targetRecipient.RecipientType -eq "MailUniversalSecurityGroup"){
#$upperHierarchyに$targetRecipientを追加
$upperHierarchy += @($targetRecipient.DisplayName)
#$Datasに$targetRecipientの情報を追記
$Data.upperHierarchy = $upperHierarchy -join " - "
[void]$Datas.Add($Data)
#$targetRecipientのメンバー取得
Get-DistributionGroupMember $targetRecipient.Alias |
#取得したメンバーをユーザー、連絡先、グループの順で並び替え
Select-Object Alias, DisplayName, PrimarySmtpAddress, Title, RecipientType, @{L="SortIndex"; E={switch($_.RecipientType){
"UserMailBox"{0}
"MailContact"{1}
"MailUniversalSecurityGroup"{2}
}}} |
Sort-Object -Property SortIndex, DisplayName |
#取得したメンバーに対して関数を再帰実行
ForEach-Object {getGroupTree $_ $upperHierarchy}
#$targetRecipientがその他受信者の場合
}else{
#$Datasに$targetRecipientの情報を追記
$Data.DisplayName = $targetRecipient.DisplayName
$Data.Title = $targetRecipient.Title
[void]$Datas.Add($Data)
}
}
#取得したGAL構造を格納するオブジェクト$Datasを定義
$global:Datas = New-Object System.Collections.ArrayList
#GALルート取得、チェック
$treeRootName = (Get-OrganizationConfig).HierarchicalAddressBookRoot
if([string]::IsNullOrEmpty($treeRootName)){"HierarchicalAddressBookRoot未指定。スクリプトの実行を中断します。";exit}
#GALルートに対してgetGroupTree関数を実行
getGroupTree (Get-DistributionGroup $treeRootName)
Exchange Online PowerShell에 원격으로 연결한 후
GetGalStructure2.ps1
PS > .\GetGalStructure2.ps1
이쪽도 마찬가지로
$Datas
에 계층 구조의 리스트가 저장되므로 Out-GridView
이나 Export-Csv
로 리스트를 출력하면 된다.Out-GridView
로 출력하는 경우.PS > $Datas | Out-GridView
조금 전의 리스트에 비해 확실히 보아 계층 구조를 알기 쉽지만, 그 때문에 출력을 생략하고 있는 열이 있으므로, Excel등으로 가공은 하기 어려울지도.
결론
요청이 있으면 SeniorityIndex
도 포함한 리스트를 출력하는 스크립트도 만들어 소개할지도. ( Get-DistributionGroupMember
에서는 SeniorityIndex
속성을 얻을 수 없기 때문에 GAL에 포함된 각 개체에 대해 함수 내에서 추가 Get 명령을 실행해야 하며 런타임 부담이 상당히 크다.)
이상
Reference
이 문제에 관하여(【Office 365】계층형 주소록의 계층구조를 리스트에 출력하는 PowerShell 스크립트를 작성했다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/r-wakatsuki/items/e67c6805d7b3eec95258
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(【Office 365】계층형 주소록의 계층구조를 리스트에 출력하는 PowerShell 스크립트를 작성했다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/r-wakatsuki/items/e67c6805d7b3eec95258텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)