適用対象:
2015
2019
サブスクリプション エディション
Microsoft Teams サービスとオンプレミスのExchange Serverを統合すると、Exchange Server (オンプレミス) でホストされているメールボックスの Teams 予定表機能とクラウド ボイスメール統合が可能になります。 詳細については、 Exchange とMicrosoft Teamsの対話方法に関する ドキュメントを参照してください。
このトピックは、サポートされているバージョンのExchange Serverとの統合に適用されます。 サポートExchange Serverマトリックスを確認して、サポートされている状態のExchange Serverのバージョンを確認します。
事前に必要な知識
このタスクを完了するまでの予想所要時間: 15 分
この手順を実行するには、アクセス許可が割り当てられている必要があります。 必要なアクセス許可を確認するには、 Exchange とシェルのインフラストラクチャのアクセス許可に関 するトピックを参照してください。
このトピックの手順に適用されるキーボード ショートカットの詳細については、「 Exchange 管理センターのキーボード ショートカット」を参照してください。
互換性については、「office アプリとの互換性Skype for Business」を参照してください。
Exchange Serverと O365 の統合を構成する
手順 1: Exchange ServerとExchange Onlineの間で OAuth 認証を構成する
Exchange ServerとExchange Onlineの間の OAuth 認証の構成に関するドキュメントに記載されている手順を実行します。
手順 2: パートナー アプリケーションで使用される新しいメール ユーザー アカウントを作成する
この手順は、Exchange サーバーで実行する必要があります。 メール ユーザーを作成し、必要な管理ロールのアクセス許可を割り当てます。 このアカウントは、次の手順で、パートナー アプリケーションに必要なアクセス許可を付与するために使用されます。
Exchange organizationの検証済みドメインを指定します。 このドメインは、オンプレミスの Exchange アカウントに使用されるプライマリ簡易メール転送プロトコル (SMTP) ドメインと同じドメインである必要があります。 このドメインは、次の手順で <your Verified Domain> と呼ばれます。
$user = New-MailUser -Name "TeamsIntegration-ApplicationAccount" -ExternalEmailAddress "TeamsIntegration-ApplicationAccount@<your Verified Domain>"
Set-MailUser -Identity $user.UserPrincipalName -HiddenFromAddressListsEnabled $true
UserApplication ロールに基づいて新しい管理ロールを作成します。
New-ManagementRole -Name "TeamsIntegrationRole" -Parent "UserApplication"
GetDelegate、FindItem、GetUserOofSettings、DeleteItem、UpdateItem、GetAttachment、ConvertIdを除くすべてのロール エントリを新しい管理ロールから削除します。
$roleEntries = @("GetDelegate", "FindItem", "GetUserOofSettings", "DeleteItem", "UpdateItem", "GetAttachment", "ConvertId")
Get-ManagementRoleEntry "TeamsIntegrationRole\*" | Where-Object { $roleEntries -notcontains $_.Name } | ForEach-Object { Remove-ManagementRoleEntry -Identity "TeamsIntegrationRole\$($_.Name)" -Confirm:$false }
新しく作成したアカウントに TeamsIntegrationRole ロールを割り当てます。
New-ManagementRoleAssignment -Role "TeamsIntegrationRole" -User $user.UserPrincipalName
手順 3: Teams 予定表スケジューラ サービス統合のパートナー アプリケーションを作成して有効にする
Exchange Server (オンプレミス環境) のユーザーに対して予定表の委任を有効にするには、Teams Calendar Scheduler Service専用のパートナー アプリケーションを構成する必要があります。
これを行うには、オンプレミスの Exchange サーバーの Exchange 管理シェル (EMS) で次のコマンドを実行して、 Teams Calendar Scheduler Service の新しいパートナー アプリケーションを作成します。
New-PartnerApplication -Name "TeamsScheduler" -ApplicationIdentifier "7557eb47-c689-4224-abcf-aef9bd7573df" -Enabled $true -LinkedAccount $user.UserPrincipalName
手順 4: クラウド ボイスメール統合のためにパートナー アプリケーションを作成して有効にする
オンプレミス環境のユーザーに対してクラウド ボイスメールを有効にするには、Cloud Voicemail専用のパートナー アプリケーションを構成する必要があります。
これを行うには、オンプレミスの Exchange サーバーの Exchange 管理シェル (EMS) で次のコマンドを実行して、 Cloud Voicemail 用の新しいパートナー アプリケーションを作成します。
New-PartnerApplication -Name "CloudVoicemail" -ApplicationIdentifier "db7de2b5-2149-435e-8043-e080dd50afae" -Enabled $true -LinkedAccount $user.UserPrincipalName
手順 5: Exchange Server認証証明書をエクスポートする
PowerShell スクリプトを実行して、Exchange Server認証証明書の公開キーをエクスポートします。この公開キーは、次の手順でMicrosoft Teams organizationにインポートします。
次のテキストを、 ExportAuthCert.ps1 などの名前の PowerShell スクリプト ファイルに保存します。
$thumbprint = (Get-AuthConfig).CurrentCertificateThumbprint
if((Test-Path $env:SYSTEMDRIVE\OAuthConfig) -eq $false)
{
New-Item -Path $env:SYSTEMDRIVE\OAuthConfig -Type Directory
}
Set-Location -Path $env:SYSTEMDRIVE\OAuthConfig
$oAuthCert = Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object {$_.Thumbprint -match $thumbprint}
$certType = [System.Security.Cryptography.X509Certificates.X509ContentType]::Cert
$certBytes = $oAuthCert.Export($certType)
$certFile = "$env:SYSTEMDRIVE\OAuthConfig\OAuthCert.cer"
[System.IO.File]::WriteAllBytes($certFile, $certBytes)
オンプレミスの Exchange organizationの Exchange 管理シェルで、作成した PowerShell スクリプトを実行します。 例: .\ExportAuthCert.ps1
手順 6: Exchange Server認証証明書をアップロードする
次に、Microsoft Graph PowerShell モジュールを使用して、前の手順でエクスポートしたオンプレミス認証証明書を Microsoft Entra Access Control Services (ACS) にアップロードします。 モジュールがインストールされていない場合は、管理者としてWindows PowerShell ウィンドウを開き、次のコマンドを実行します。
Install-Module -Name Microsoft.Graph.Applications
Microsoft Graph コマンドレットがインストールされているWindows PowerShell ワークスペースを開きます。 この手順のすべてのコマンドは、Microsoft Graph コンソールに接続されているWindows PowerShellを使用して実行する必要があります。
次のテキストを、
UploadAuthCert.ps1などの名前の PowerShell スクリプト ファイルに保存します。Connect-MgGraph -Scopes Application.ReadWrite.All $certFile = "$env:SYSTEMDRIVE\OAuthConfig\OAuthCert.cer" $objFSO = New-Object -ComObject Scripting.FileSystemObject $certFile = $objFSO.GetAbsolutePathName($certFile) $cer = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new($certFile) $binCert = $cer.GetRawCertData() $credValue = [System.Convert]::ToBase64String($binCert) $serviceNames = @("db7de2b5-2149-435e-8043-e080dd50afae", "7557eb47-c689-4224-abcf-aef9bd7573df") foreach ($serviceName in $serviceNames) { Write-Host "[+] Trying to query the service principals for service: $serviceName" -ForegroundColor Cyan $p = Get-MgServicePrincipal -Filter "AppId eq '$serviceName'" Write-Host "[+] Trying to query the keyCredentials for service: $serviceName" -ForegroundColor Cyan $servicePrincipalKeyInformation = Get-MgServicePrincipal -Filter "AppId eq '$serviceName'" -Select "keyCredentials" $keyCredentialsLength = $servicePrincipalKeyInformation.KeyCredentials.Length if ($keyCredentialsLength -gt 0) { Write-Host "[+] $keyCredentialsLength existing key(s) found - we keep them if they have not expired" -ForegroundColor Cyan $newCertAlreadyExists = $false $servicePrincipalObj = New-Object -TypeName Microsoft.Graph.PowerShell.Models.MicrosoftGraphServicePrincipal $keyCredentialsArray = @() foreach ($cred in $servicePrincipalKeyInformation.KeyCredentials) { $thumbprint = [System.Convert]::ToBase64String($cred.CustomKeyIdentifier) Write-Host "[+] Processing existing key: $($cred.DisplayName) thumbprint: $thumbprint" -ForegroundColor Cyan if ($newCertAlreadyExists -ne $true) { $newCertAlreadyExists = ($cer.Thumbprint).Equals($thumbprint, [System.StringComparison]::OrdinalIgnoreCase) } if ($cred.EndDateTime -lt (Get-Date)) { Write-Host "[+] This key has expired on $($cred.EndDateTime) and will not be retained" -ForegroundColor Yellow continue } $keyCredential = New-Object -TypeName Microsoft.Graph.PowerShell.Models.MicrosoftGraphKeyCredential $keyCredential.Type = "AsymmetricX509Cert" $keyCredential.Usage = "Verify" $keyCredential.Key = $cred.Key $keyCredentialsArray += $keyCredential } if ($newCertAlreadyExists -eq $false) { Write-Host "[+] New key: $($cer.Subject) thumbprint: $($cer.Thumbprint) will be added" -ForegroundColor Cyan $keyCredential = New-Object -TypeName Microsoft.Graph.PowerShell.Models.MicrosoftGraphKeyCredential $keyCredential.Type = "AsymmetricX509Cert" $keyCredential.Usage = "Verify" $keyCredential.Key = [System.Text.Encoding]::ASCII.GetBytes($credValue) $keyCredentialsArray += $keyCredential $servicePrincipalObj.KeyCredentials = $keyCredentialsArray Update-MgServicePrincipal -ServicePrincipalId $p.Id -BodyParameter $servicePrincipalObj } else { Write-Host "[+] New key: $($cer.Subject) thumbprint: $($cer.Thumbprint) already exists and will not be uploaded again" -ForegroundColor Yellow } } else { $params = @{ type = "AsymmetricX509Cert" usage = "Verify" key = [System.Text.Encoding]::ASCII.GetBytes($credValue) } Write-Host "[+] This is the first key which will be added to this service principal" -ForegroundColor Cyan Update-MgServicePrincipal -ServicePrincipalId $p.Id -KeyCredentials $params } }先の手順で作成した PowerShell スクリプトを実行します。 例:
.\UploadAuthCert.ps1スクリプトの開始後、[資格情報] ダイアログ ボックスが表示されます。 Microsoft Online Microsoft Entra organizationでテナント管理者アカウントの資格情報を入力します。 スクリプトを実行した後、Windows PowerShellを Microsoft Graph セッションに接続したままにします。 セッションを使用して、次の手順で PowerShell スクリプトを実行します。
手順 7: 証明書がファースト パーティのサービス プリンシパルにアップロードされたことを確認する
Microsoft Graph セッションに接続されている PowerShell で、次のコマンドを実行します。
(Get-MgServicePrincipal -Filter "AppId eq '7557eb47-c689-4224-abcf-aef9bd7573df'" -Select "keyCredentials").KeyCredentials | Format-List * (Get-MgServicePrincipal -Filter "AppId eq 'db7de2b5-2149-435e-8043-e080dd50afae'" -Select "keyCredentials").KeyCredentials | Format-List *Exchange OAuth 証明書の開始日と終了日に一致する開始日と終了日のデータが一覧表示されているキーが表示されることを確認します
手順 8: 成功を確認する
一部の機能が正常に動作していることを確認して、構成が正しいことを確認します。
Exchange ハイブリッド構成クラウド ボイスメール機能を確認する
- Outlook on the Web (OWA) または Outlook Desktop を使用して、Exchange Server (オンプレミス) でホストされているメールボックス内の
Automatic repliesをアクティブ化する -
Teamsを開き、[Settings>Calls>Manage out-of-office voicemail] に移動してチェックWhen Outlook automatic replies are on -
Your custom greetingボックスにカスタムのあいさつメッセージを入力する - このユーザーに Teams 呼び出しを行う
- ボイスメール メッセージを残す
- 通話中にあいさつを聞きます。
- CloudVoicemail パートナー アプリケーションが動作している場合は、カスタムの不在時のあいさつが読み上げられます
- 動作していない場合は、代わりに通常のあいさつ文が再生されます
- 通話後、ボイスメール メッセージがユーザーのメールボックスに正常に配信されたかどうかをチェックします
- Outlook on the Web (OWA) または Outlook Desktop を使用して、Exchange Server (オンプレミス) でホストされているメールボックス内の
モバイル クライアントの会話履歴が Outlook
Conversation Historyフォルダーに表示されていることを確認します。EWSEditor を使用して、アーカイブされたチャット メッセージが
Purgesフォルダー内のユーザーのオンプレミス メールボックスに保存されていることを確認します。または、OAuth ハンドシェイク中にトラフィックを検査します。 OAuth トラフィックは異なり、基本認証とは似ていません。 重要なインジケーターは、トークン交換での発行者識別子の存在です。次のようになります。
7557eb47-c689-4224-abcf-aef9bd7573df@<realm>db7de2b5-2149-435e-8043-e080dd50afae@<realm>
これらの識別子は、先頭のスラッシュ (例:
/7557eb47-c689-4224-abcf-aef9bd7573df@<realm>) と共に表示される場合もあります。 これらのトークンにはユーザー名やパスワードは含まれていません。これは、OAuth の基本原則である資格情報交換なしの認証を強調しています。OAuth を正常に使用していることを確認する場合は、何を期待し、トラフィックの外観を把握するかを確認してください。 そこで、 期待する内容を次に示します。
設定 の例を次に示しますが、このプロセスを実行する任意のネットワーク トレース ツールを使用できます。
手順 9: 従来の Skype for Business Online アプリケーションを無効または削除する
アプリケーション ID が00000004-0000-0ff1-ce00-000000000000された従来のファースト パーティ Skype for Business Online アプリケーションは、2025 年 10 月 13 日から段階的に無効になります。 この取り組みの一環として、Teams カレンダー スケジューラ サービスとクラウド ボイスメール専用のファースト パーティ アプリケーションが導入されました。
このセクションの手順に従って、従来のファーストパーティ Skype for Business Online アプリケーションを使用するすべてのパートナー アプリケーションを無効にします。
Get-PartnerApplication | Where-Object { $_.ApplicationIdentifier -eq "00000004-0000-0ff1-ce00-000000000000" -and $_.Enabled -eq $true } | Set-PartnerApplication -Enabled $false
レガシ Skype for Business Online パートナー アプリケーションを削除する場合は、次のコマンドを実行できます。
Get-PartnerApplication | Where-Object { $_.ApplicationIdentifier -eq "00000004-0000-0ff1-ce00-000000000000" -and $_.Enabled -eq $true } | Remove-PartnerApplication