Teams が有効な Office 365 グループを取得したい

こんにちは、Teamsサポートの吉野です。
本日は便利なスクリプトを紹介させていただきます。

「現在作成されているチームの一覧を取得したい」という要望があるかと思います。
実はこちら、標準の機能では実装しておりません。
例えば管理者権限で Get-Team を実行してもそのユーザーが所属しているチームの一覧しか取得できません。

テナント全体のチーム一覧は以下のようなスクリプトで取得する必要があります。

Microsoft Teams Enabled O365 Groups Report PowerShell CSV Output

こちら大変便利なのですが、試してみたところ日本語が文字化けすることが分かりました。
日本語対応してみましたのでご活用いただければと思います。

 
## Microsoft Teams O365 Group Enabled Teams Reporting Script
## Created and edited by Sam Cosby - Microsoft & David Whitney - Microsoft
## 2/2/2018


## Require PowerShell Admin

If (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
    [Security.Principal.WindowsBuiltInRole] "Administrator"))
{
    Write-Warning "`nYou do not have Administrator rights to run this script!`nPlease re-run this script as an Administrator!"
    Break
}

## Connect to EXO

$shell = new-object -comobject "WScript.Shell"
$result = $shell.popup("Do your Admin Credentials require MFA?",0,"Question",4+32)
if ($result -eq "6") { 
Write-Host "You must connect via the Exchange Online MFA Powershell module. To learn more on this, please use the following: https://technet.microsoft.com/en-us/library/mt775114(v=exchg.160).aspx"
break;
}


if (-not (Get-PSSession | where {($_.ComputerName -eq "outlook.office365.com") -and ($_.State -eq "Opened")}))
    {
Write-Output "#######################################################


Please connect with your Exchange Online Administrator Credentials in order to finish the rest of the script.


#######################################################

"
    $cred = get-credential
    $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $cred -Authentication Basic -AllowRedirection -WarningAction SilentlyContinue
    Import-PSSession $Session -WarningAction SilentlyContinue
   }

## Connect to Microsoft Teams

if (Get-Module | where {($_.Name -eq "MicrosoftTeams") -and (($_.Version -eq "0.9.1") -or ($_.Version -eq "0.9.0"))}) {"Teams PowerShell is connected"}
    elseif (Connect-MicrosoftTeams -Credential $cred){"Teams Powershell needs connected"}
    else {Write-Output "You need to install the Microsoft Teams module. To do so, input 'install-module MicrosoftTeams' in Powershell as an Administrator"}


## Run the script to gather the list of Teams.

clear

Write-Output "#######################################################


This may take a little bit of time... Please sit back, relax and enjoy some GIFs inside of Teams!



             d8b                                        .d888888    
             Y8P                                       d88P  888    
                                                       888   888    
88888b.d88b. 888 .d8888b888d888. d88b. .d8888b  .d88b. 888888888888 
888  888  88b888d88P    888P   d88  88b88K     d88  88b888   888    
888  888  888888888     888    888  888 Y8888b.888  888888   888    
888  888  888888Y88b.   888    Y88..88P     X88Y88..88P888   Y88b.  
888  888  888888  Y8888P888      Y88P   88888P'  Y88P  888    Y888 


#######################################################



"

$o365groups = Get-UnifiedGroup -ResultSize Unlimited
$TeamsList = @()

foreach ($o365group in $o365groups) 
{
    try {
        $teamschannels = Get-TeamChannel -GroupId $o365group.ExternalDirectoryObjectId
        $o365GroupMemberList = (Get-UnifiedGroupLinks -identity $o365group.ExternalDirectoryObjectId -LinkType Members) | select -expandproperty PrimarySmtpAddress
        $TeamsList = $TeamsList + [pscustomobject]@{GroupId = $o365group.ExternalDirectoryObjectId; GroupName = $o365group.DisplayName; SMTP = $o365group.PrimarySmtpAddress; Members = $o365group.GroupMemberCount; MemberList = $o365GroupMemberList -join ', '; SPOSite = $o365group.SharePointSiteUrl; TeamsEnabled = $true; Owners = $o365group.ManagedBy}
        } 
    catch 
   {
        $ErrorCode = $_.Exception.ErrorCode
        switch ($ErrorCode) 
        {
            "404" 
            {
                $TeamsList = $TeamsList + [pscustomobject]@{GroupId = $o365group.ExternalDirectoryObjectId; GroupName = $o365group.DisplayName; SMTP = $o365group.PrimarySmtpAddress; Members = $o365group.GroupMemberCount; MemberList = $o365GroupMemberList -join ', '; SPOSite = $o365group.SharePointSiteUrl; TeamsEnabled = $false; Owners = $o365group.ManagedBy}
                break;
            }
            "403" 
            {
                 $TeamsList = $TeamsList + [pscustomobject]@{GroupId = $o365group.ExternalDirectoryObjectId; GroupName = $o365group.DisplayName; SMTP = $o365group.PrimarySmtpAddress; Members = $o365group.GroupMemberCount; MemberList = $o365GroupMemberList -join ', '; SPOSite = $o365group.SharePointSiteUrl; TeamsEnabled = $true; Owners = $o365group.ManagedBy}
                break;
            }
            default 
            {
                Write-Error ("Unknown ErrorCode trying to 'Get-TeamChannel -GroupId {0}' :: {1}" -f $o365group, $ErrorCode)
            }
        }
   }
}

New-Item -ItemType directory -Path c:\Teams
$TeamsList | export-csv C:\Teams\AllTeamsInTenant.csv -NoTypeInformation -Encoding UTF8

clear

Write-Output "#######################################################


CSV files exported to c:\Teams\TeamsAllTeamsInTenant.csv, filter by the TeamsEnabled tab to validate which Groups are Teams Enabled. Thank you for choosing Microsoft Teams!


#######################################################


"