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-Transcript
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 | 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-Transcript
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

# 接続(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-Transcript
ShellScript
<#
.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-Transcript
ShellScript
Install-Module ExchangeOnlineManagement -Scope CurrentUser -Force

ShellScript
Install-Module Microsoft.Graph -Scope CurrentUser -Force
Install-Module ExchangeOnlineManagement -Scope CurrentUser -Force
ShellScript
# ==========================================
# 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

タイトルとURLをコピーしました