ShellScript
# デスクトップへ移動
Set-Location (Join-Path $env:USERPROFILE Desktop)
# ログファイル作成
$LogFile = Get-Date -Format "yyyy-MMdd-HHmmss"
$Process = "ExternalSharingCheck"
$LogPath = Join-Path $env:USERPROFILE "Desktop$Process`_$LogFile.txt"
Start-Transcript -Path $LogPath
# 接続(必要なモジュールがロードされている前提)
# Connect-AzureAD と Connect-ExchangeOnline を実行
Connect-AzureAD
Connect-ExchangeOnline | Out-Null
# ヘッダー行の出力
Write-Host "TeamName,AllowToAddGuests,Mail,HiddenFromExchangeClientsEnabled"
# チーム一覧
$Teams = @(
"TMS_o365_jp603220",
"TMS_o365_jp603222",
"TMS_o365_jp603221",
"TMS_o365_jp603223"
)
foreach ($Team in $Teams) {
# 統合グループ情報の取得
$Group = Get-UnifiedGroup -Identity $Team -ErrorAction SilentlyContinue
if ($Group) {
$MailAddress = $Group.PrimarySmtpAddress
$HiddenFromExchangeClientsEnabled = $Group.HiddenFromExchangeClientsEnabled
$AllowToAddGuests = $Group.AllowToAddGuests
# 正しいログ形式に合わせてカンマ区切りで出力
Write-Host "$Team,$AllowToAddGuests,$MailAddress,$HiddenFromExchangeClientsEnabled"
} else {
Write-Warning "チームが見つかりませんでした: $Team"
}
}
# トランスクリプト終了
Stop-TranscriptShellScript
# デスクトップへ移動
Set-Location (Join-Path $env:USERPROFILE Desktop)
# ログファイル作成
$LogFile = Get-Date -Format "yyyy-MMdd-HHmmss"
$Process = "ExternalSharingCheck"
$LogPath = Join-Path $env:USERPROFILE "Desktop$Process`_$LogFile.txt"
Start-Transcript -Path $LogPath
# 接続
Connect-AzureAD
Connect-ExchangeOnline | Out-Null
# ヘッダー行の出力
Write-Host "TeamName,AllowToAddGuests,Mail,HiddenFromExchangeClientsEnabled"
# チーム一覧
$Teams = @(
"TMS_o365_jp603220",
"TMS_o365_jp603222",
"TMS_o365_jp603221",
"TMS_o365_jp603223"
)
foreach ($Team in $Teams) {
# Exchange Online からメールアドレスと非表示フラグ等を取得
$Group = Get-UnifiedGroup -Identity $Team -ErrorAction SilentlyContinue
if ($Group) {
$MailAddress = $Group.PrimarySmtpAddress
$HiddenFromExchangeClientsEnabled = $Group.HiddenFromExchangeClientsEnabled
# 初期値として False を設定
$AllowToAddGuests = "False"
try {
# AzureAD から対応するグループオブジェクトを取得
$AzureGroup = Get-AzureADGroup -Filter "Mail eq '$MailAddress'" -ErrorAction SilentlyContinue
if ($AzureGroup) {
# グループ固有の設定(Directory Setting)を取得
$Settings = Get-AzureADObjectSetting -TargetObjectId $AzureGroup.ObjectId -TargetType Group -ErrorAction SilentlyContinue
if ($Settings) {
$Val = ($Settings.Values | Where-Object { $_.Name -eq "AllowToAddGuests" }).Value
if ($null -ne $Val) {
$AllowToAddGuests = $Val
}
}
}
} catch {
# 設定が未定義の場合などは False を維持
}
# 正しいログ形式に合わせてカンマ区切りで出力
Write-Host "$Team,$AllowToAddGuests,$MailAddress,$HiddenFromExchangeClientsEnabled"
} else {
Write-Warning "チームが見つかりませんでした: $Team"
}
}
# トランスクリプト終了
Stop-TranscriptShellScript
# デスクトップへ移動
Set-Location (Join-Path $env:USERPROFILE Desktop)
# ログファイル作成
$LogFile = Get-Date -Format "yyyy-MMdd-HHmmss"
$Process = "ExternalSharingCheck"
$LogPath = Join-Path $env:USERPROFILE "Desktop$Process`_$LogFile.txt"
Start-Transcript -Path $LogPath
# 接続(Exchange Online のみ使用)
Connect-ExchangeOnline | Out-Null
# ヘッダー行の出力
Write-Host "TeamName,AllowToAddGuests,Mail,HiddenFromExchangeClientsEnabled"
# チーム一覧
$Teams = @(
"TMS_o365_jp603220",
"TMS_o365_jp603222",
"TMS_o365_jp603221",
"TMS_o365_jp603223"
)
foreach ($Team in $Teams) {
# 統合グループ情報を取得(全プロパティを取得するため -IncludeOptionalProperties を付与)
$Group = Get-UnifiedGroup -Identity $Team -IncludeOptionalProperties -ErrorAction SilentlyContinue
if ($Group) {
$MailAddress = $Group.PrimarySmtpAddress
$HiddenFromExchangeClientsEnabled = $Group.HiddenFromExchangeClientsEnabled
# ゲスト許可設定の取得(ExchangeのUnifiedGroupプロパティから取得を試みる)
# 環境によってプロパティ名が異なる場合があるため、いくつかの候補から値を取得します
$AllowToAddGuests = $false
if ($null -ne $Group.AllowToAddGuests) {
$AllowToAddGuests = $Group.AllowToAddGuests
}
# 正しいログ形式に合わせてカンマ区切りで出力
Write-Host "$Team,$AllowToAddGuests,$MailAddress,$HiddenFromExchangeClientsEnabled"
} else {
Write-Warning "チームが見つかりませんでした: $Team"
}
}
# トランスクリプト終了
Stop-TranscriptShellScript
<#
.SYNOPSIS
Teams / Microsoft 365 グループの外部共有(ゲスト招待)状況および基本設定を確認するログ出力スクリプト
.DESCRIPTION
Exchange Online に接続し、指定したチーム一覧の「ゲスト許可設定」「メールアドレス」「非表示フラグ」を取得し、
指定されたCSV形式でデスクトップのログファイルに出力します。
#>
# 1. デスクトップへ移動
Set-Location (Join-Path $env:USERPROFILE Desktop)
# 2. ログファイル出力の準備
$LogFile = Get-Date -Format "yyyy-MMdd-HHmmss"
$Process = "ExternalSharingCheck"
$LogPath = Join-Path $env:USERPROFILE "Desktop$Process`_$LogFile.txt"
Start-Transcript -Path $LogPath
# 3. Exchange Online への接続
# ※ 初回実行時やモジュールがない場合は自動的にインストール・接続を促します
if (!(Get-Module -ListAvailable ExchangeOnlineManagement)) {
Write-Host "ExchangeOnlineManagement モジュールが見つからないため、インストールを試行します..." -ForegroundColor Yellow
Install-Module ExchangeOnlineManagement -Force -Scope CurrentUser
}
Connect-ExchangeOnline | Out-Null
# 4. 出力ファイルのヘッダー行を表示・記録
Write-Host "TeamName,AllowToAddGuests,Mail,HiddenFromExchangeClientsEnabled"
# 5. 確認対象のチーム一覧(必要に応じて追加・変更してください)
$Teams = @(
"TMS_o365_jp603220",
"TMS_o365_jp603222",
"TMS_o365_jp603221",
"TMS_o365_jp603223"
)
# 6. 各チームの情報をループで取得
foreach ($Team in $Teams) {
# 統合グループ情報を取得(-IncludeAllProperties を使って詳細設定を引き出す)
$Group = Get-UnifiedGroup -Identity $Team -IncludeAllProperties -ErrorAction SilentlyContinue
if ($Group) {
$MailAddress = $Group.PrimarySmtpAddress
$HiddenFromExchangeClientsEnabled = $Group.HiddenFromExchangeClientsEnabled
# ゲスト招待許可フラグ(AllowToAddGuests)の判定
# 個別設定がない場合はテナント既定(またはFalse扱い)になるため、安全に取得します
$AllowToAddGuests = $false
# グループに固有のディレクトリ設定(Directory Settings)が存在する場合の処理
try {
$GroupSettings = Get-AzureADObjectSetting -TargetType Groups -TargetObjectId $Group.ExternalDirectoryObjectId -ErrorAction SilentlyContinue
if ($GroupSettings -and $GroupSettings["AllowToAddGuests"] -ne $null) {
$AllowToAddGuests = $GroupSettings["AllowToAddGuests"]
} else {
# 設定オブジェクトが無い場合は、グループのデフォルトプロパティ等を確認
if ($null -ne $Group.AccessType) {
# 例としてプロパティに値があれば反映、なければデフォルト値を使用
}
}
} catch {
# 万が一取得に失敗した場合は安全のため False を保持
}
# 念のため直近の Exchange プロパティからも拾える場合は補正
# (組織の設定や環境によってプロパティが格納される場所をカバー)
if ($group.CustomAttributes -match "AllowToAddGuests=True") {
$AllowToAddGuests = $true
}
# 規定のフォーマット(カンマ区切り)で出力
Write-Host "$Team,$AllowToAddGuests,$MailAddress,$HiddenFromExchangeClientsEnabled"
} else {
Write-Warning "指定されたチームが見つかりませんでした: $Team"
}
}
# 7. トランスクリプト(ログ記録)終了
Stop-TranscriptShellScript
Install-Module ExchangeOnlineManagement -Scope CurrentUser -ForceShellScript
Install-Module Microsoft.Graph -Scope CurrentUser -Force
Install-Module ExchangeOnlineManagement -Scope CurrentUser -ForceShellScript
# ==========================================
# Teams 外部共有(ゲスト招待)状況チェック スクリプト
# ==========================================
# 1. デスクトップへ移動
Set-Location (Join-Path $env:USERPROFILE Desktop)
# 2. ログファイル作成の準備
$LogFile = Get-Date -Format "yyyy-MMdd-HHmmss"
$Process = "ExternalSharingCheck"
$LogPath = Join-Path $env:USERPROFILE "Desktop$Process`_$LogFile.txt"
Start-Transcript -Path $LogPath
# 3. 各種サービスへの接続(Microsoft.Graph と Exchange Online)
Write-Host "Microsoft.Graph および Exchange Online へ接続します..." -ForegroundColor Cyan
Connect-MgGraph -Scopes "Group.Read.All", "Directory.Read.All" | Out-Null
Connect-ExchangeOnline | Out-Null
# 4. ヘッダー行の出力
Write-Host "TeamName,AllowToAddGuests,Mail,HiddenFromExchangeClientsEnabled"
# 5. 確認対象のチーム一覧
$Teams = @(
"TMS_o365_jp603220",
"TMS_o365_jp603222",
"TMS_o365_jp603221",
"TMS_o365_jp603223"
)
# 6. チームごとに情報を取得・判定
foreach ($Team in $Teams) {
# デフォルト値
$AllowToAddGuests = $false
$MailAddress = ""
$HiddenFromExchangeClientsEnabled = $false
# Exchange Online から基本情報を取得
$ExGroup = Get-UnifiedGroup -Identity $Team -ErrorAction SilentlyContinue
if ($ExGroup) {
$MailAddress = $ExGroup.PrimarySmtpAddress
$HiddenFromExchangeClientsEnabled = $ExGroup.HiddenFromExchangeClientsEnabled
# Microsoft.Graph を使って正確なグループオブジェクトとゲスト設定を取得
$MgGroup = Get-MgGroup -Filter "Mail eq '$MailAddress'" -ErrorAction SilentlyContinue
if ($MgGroup) {
# グループに個別の拡張設定(Settings)が存在するか確認
$Settings = Get-MgGroupSetting -GroupId $MgGroup.Id -ErrorAction SilentlyContinue
# ゲスト許可設定(AllowToAddGuests)を探す
$foundSetting = $false
foreach ($Setting in $Settings) {
foreach ($Val in $Setting.Values) {
if ($Val.Name -eq "AllowToAddGuests") {
$AllowToAddGuests = [System.Convert]::ToBoolean($Val.Value)
$foundSetting = $true
break
}
}
if ($foundSetting) { break }
}
# もし個別設定がない(組織のデフォルトに従う)場合、
# 組織全体のテナント設定からゲスト許可フラグを補正で取得
if (-not $foundSetting) {
$OrgSettings = Get-MgDirectorySetting -ErrorAction SilentlyContinue
foreach ($OrgSetting in $OrgSettings) {
foreach ($Val in $OrgSetting.Values) {
if ($Val.Name -eq "AllowToAddGuests" -and $Val.Value -eq "True") {
$AllowToAddGuests = $true
}
}
}
}
}
# 結果を指定のフォーマットで出力
Write-Host "$Team,$AllowToAddGuests,$MailAddress,$HiddenFromExchangeClientsEnabled"
} else {
Write-Warning "チームが見つかりませんでした: $Team"
}
}
# 7. トランスクリプト(ログ記録)終了
Stop-Transcript
