【PowerShell】Outlookの予定を自動でエクスポートする方法|ICS形式・CSV対応

【PowerShell】Outlookの予定を自動でエクスポートする方法|ICS形式・CSV対応 PowerShell

Outlookで管理されている予定表(カレンダー)を、外部ファイルとして保存・共有したい場面は多くあります。PowerShellを使えば、Outlookの予定情報を自動で取得し、CSV形式やICS形式にエクスポートすることが可能です。この記事では、Outlookの予定を取得し、CSVまたはICS形式で保存する方法を紹介します。

前提条件

  • Microsoft Outlook がインストールされている
  • PowerShellをローカルPCで実行(Outlookを利用可能なユーザーで)

予定表からデータを取得するスクリプト(CSV形式)


Add-Type -AssemblyName Microsoft.Office.Interop.Outlook
$outlook = New-Object -ComObject Outlook.Application
$namespace = $outlook.GetNamespace("MAPI")
$calendar = $namespace.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderCalendar)
$items = $calendar.Items
$items.IncludeRecurrences = $true
$items.Sort("[Start]")

$results = @()
$now = Get-Date
$end = $now.AddDays(30)

foreach ($item in $items) {
    if ($item.Start -ge $now -and $item.Start -le $end) {
        $results += [PSCustomObject]@{
            Subject = $item.Subject
            Start   = $item.Start
            End     = $item.End
            Location = $item.Location
            Body    = $item.Body
        }
    }
}

$results | Export-Csv -Path "C:\Logs\OutlookSchedule.csv" -Encoding UTF8 -NoTypeInformation

このスクリプトは、Outlook予定表から30日以内の予定を取得し、CSV形式で保存します。

ICS形式でエクスポートするには(Outlook GUI経由)

PowerShellから直接ICSファイルを生成する公式APIはありませんが、Outlookの予定アイテムをICS形式で保存するには以下の方法が使えます:


foreach ($item in $items) {
    if ($item.Start -ge $now -and $item.Start -le $end) {
        $icsPath = "C:\Logs\Schedule_$($item.Start.ToString("yyyyMMdd_HHmm")).ics"
        $item.SaveAs($icsPath, 5)  # 5 = olICal
    }
}

$item.SaveAs(path, 5) を使うことで、1件ずつICS形式で保存可能です。

特定キーワードを含む予定のみ抽出する例


$results = $items | Where-Object {
    $_.Subject -like "*会議*" -and $_.Start -ge $now -and $_.Start -le $end
} | ForEach-Object {
    [PSCustomObject]@{
        Subject = $_.Subject
        Start   = $_.Start
        End     = $_.End
    }
}

スケジュール自動バックアップとして運用する

このスクリプトをバッチ化し、タスクスケジューラに登録することで、毎朝Outlook予定表を自動エクスポート→保存する運用が可能です。


powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\ExportOutlookSchedule.ps1"

まとめ

PowerShellを使えば、Outlookの予定表から必要なスケジュール情報を自動で取得し、CSVやICSとしてエクスポートすることができます。社内共有用の予定リストや個人のバックアップ、外部アプリとの連携など、さまざまな用途に活用できます。Outlookを使っている環境であれば、手動操作を減らす強力な自動化手段として活用してみてください。