
param(
    # 外部から指定するCSVファイルのパス（既定: C:\tools\inactiveadusers.csv）
    [Parameter(Mandatory=$false)]
    [ValidateNotNullOrEmpty()]
    [string]$CsvPath = "C:\tools\inactiveadusers.csv",

    # （任意）非アクティブ判定の期間。既定は「365日」。
    [Parameter(Mandatory=$false)]
    [TimeSpan]$InactiveTimeSpan = "365.00:00:00"
)

# --- RSAT-AD-PowerShell の存在確認とインストール（Windows Server想定） ---
if ( -not (Get-WindowsFeature -Name RSAT-AD-PowerShell).Installed ) {
    $ret = (Install-WindowsFeature -Name RSAT-AD-PowerShell)
    if ( -not $ret ) {
        Write-Host "Error: RSAT-AD-PowerShell installation"
        exit 1
    }
}

# --- 出力ディレクトリの作成（必要なら） ---
try {
    $dir = Split-Path -Path $CsvPath -Parent
    if (-not [string]::IsNullOrWhiteSpace($dir) -and -not (Test-Path -LiteralPath $dir)) {
        New-Item -ItemType Directory -Path $dir -Force | Out-Null
    }
}
catch {
    Write-Error "CSV出力先ディレクトリの作成に失敗しました: $($_.Exception.Message)"
    exit 1
}

# --- 非アクティブユーザーの抽出 ---
$inactiveusers = Search-ADAccount -AccountInactive -TimeSpan $InactiveTimeSpan -UsersOnly |
    Where-Object { $_.Enabled -and ($_.LastLogonDate -ne $null) } |
    Select-Object SamAccountName, LastLogonDate

# --- CSV出力 ---
if ($inactiveusers.Count -gt 0) {
    $inactiveusers |
        Export-Csv -Path $CsvPath -Encoding UTF8 -NoTypeInformation
}

# --- 件数を戻り値として返す ---
return $inactiveusers.Count
