新規構築の場合は、複数のドメインを登録する必要がある場合がある。会社の規模が大きければ多いほど使用しているドメインの数が多くなる傾向にあるはず。Microsoft365管理センター等のGUIからの登録は手間なのでGraphPowershellから設定する場合のコード例を記載する。
検証環境について
動作確認した検証環境は以下の通り。
OS:Microsoft Windows 11 Enterprise
OSbuildバージョン:10.0.22621
PowerShellのバージョン:7.4.0
GraphPowershellのモジュール名とバージョン
Microsoft.Graph.Authentication 2.11.1
Microsoft.Graph.Identity.DirectoryManagement 2.11.1サインインアカウントの権限はグローバル管理者。
使用するコマンド
Get-MgDomainVerificationDnsRecord
使用例
Get-MgDomainVerificationDnsRecord -DomainId "365ps.jp" | Format-List取得できる情報例
Id : 00000000-000000000-0000-000000000000
IsOptional : False
Label : 365ps.jp
RecordType : Txt
SupportedService : Email
Ttl : 3600
AdditionalProperties : {[@odata.type, #microsoft.graph.domainDnsTxtRecord], [text, MS=ms00000000]}Get-MgDomainServiceConfigurationRecord
使用例
Get-MgDomainServiceConfigurationRecord -DomainId "365ps.jp" | Format-List取得できる情報例
Id : 00000000-000000000-0000-000000000000
IsOptional : False
Label : 365ps.jp
RecordType : Mx
SupportedService : Email
Ttl : 3600
AdditionalProperties : {[@odata.type, #microsoft.graph.domainDnsMxRecord], [mailExchange, *******.mail.protection.outl
ook.com], [preference, 0]}New-MgDomain
使用例
New-MgDomain -BodyParameter @{id = "365ps.jp"}複数のドメインのレコードをCSVファイルとして保存する
#Microsoft365上で使用したいドメインを定義する
$domainList = "365ps.jp","mail.365ps.jp"
#CSVの保存先 windowsOSの場合、デスクトップに保存する
$csvSavePath = "$env:USERPROFILE\Desktop"
#Microsoft365を登録、使用するうえで必要なDNSレコードを取得する関数
function Get-dnsRecord($domain){
#設定するべきレコードを格納する変数
$dnsRecordsList = @()
#ドメイン所有権の確認に必要なレコードを取得する
#TXTかMXどちらか一方のみ登録できればOK
#今回はTXTレコードを取得する
$dnsRecordsList += Get-MgDomainVerificationDnsRecord -DomainId $domain | `
?{$_.RecordType -eq "Txt"}
#ExchangeOnlineとIntuneに関連するDNSレコードを取得する
$dnsRecordsList += Get-MgDomainServiceConfigurationRecord -DomainId $domain | `
?{$_.SupportedService -eq "Email" -or $_.SupportedService -eq "Intune" }
#取得したDNSレコードを戻り値として返す
return $dnsRecordsList
}
#上記関数で取得した結果を必要な情報のみになるように加工する関数
function Proces-dnsRecord($beforeRecordsList){
$recordValue = ""
$recordsList = @()
foreach($dnsRecord in $beforeRecordsList){
if($dnsRecord.RecordType -eq "Txt"){
$recordValue = $dnsRecord.AdditionalProperties.text
}
if($dnsRecord.RecordType -eq "Mx"){
$recordValue = $dnsRecord.AdditionalProperties.mailExchange
}
if($dnsRecord.RecordType -eq "CName"){
$recordValue = $dnsRecord.AdditionalProperties.canonicalName
}
#データとして見やすくするためPSCustomObjectとして格納
$recordsList += [PSCustomObject]@{
RecordType = $dnsRecord.RecordType
RecordValue = $recordValue
}
}
#加工したデータを結果として戻す
return $recordsList
}
#GraphPowerShellに接続する
Connect-MgGraph -Scopes "Domain.ReadWrite.All" -NoWelcome
#設定したいドメインの数だけ繰り返す
foreach($domain in $domainList){
#新しいドメインを設定する
New-MgDomain -BodyParameter @{id = $domain}
$recordsList = Get-dnsRecord($domain)
$result = Proces-dnsRecord($recordsList)
#ドメイン内に含まれるドット(.)をアンダーバー(_)に置き換える
$replaceDomain = $domain.replace(".","_")
#実行日時を取得する
$yyyyMMddFFFFF = Get-Date -Format "yyyyMMdd_FFFFF"
#取得したDNSレコードをドメインごとにCSVファイルとして保存する
$result | Export-Csv -Encoding UTF8 -NoTypeInformation `
-Path "${csvSavePath}\${replaceDomain}_DnsRecord_${yyyyMMddFFFFF}.csv"
}
#GraphPowerShellから切断する
Disconnect-MgGraph
独自ドメインの検証成功後
オンプレミスのActive Directoryがある場合
以下公開情報元に同期できるよう設定すること。
参考情報
- Microsoft Graph のアクセス許可のリファレンス – Microsoft Graph | Microsoft Learn
- ドメインを作成する – Microsoft Graph v1.0 | Microsoft Learn
- Get-MgDomainVerificationDnsRecord (Microsoft.Graph.Identity.DirectoryManagement) | Microsoft Learn
- Get-MgDomainServiceConfigurationRecord (Microsoft.Graph.Identity.DirectoryManagement) | Microsoft Learn
- New-MgDomain (Microsoft.Graph.Identity.DirectoryManagement) | Microsoft Learn
- Get-Date (Microsoft.PowerShell.Utility) – PowerShell | Microsoft Learn
- Microsoft 365 にドメインを追加する – Microsoft 365 admin | Microsoft Learn
- 新規ドメインまたは既存のドメインを使用して Microsoft 365 Business Standard を設定する – Microsoft 365 admin | Microsoft Learn
- DNS レコードを追加して自分のドメインを接続する – Microsoft 365 admin | Microsoft Learn
- よく寄せられる質問のドメイン | Microsoft Learn
問い合わせフォーム
リンク切れのご報告や、記載内容に不備がありましたら、お手数をおかけしますが
以下お問い合わせフォームからご報告をお願い致します。
コマンドの仕様確認やエラー内容の確認、対処方法については、ご契約されているMicrosoftかCSPへお問い合わせください。
※いただきました内容は確認させていただきますが、必ずしも回答をお約束するものではございません。






