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を使っている環境であれば、手動操作を減らす強力な自動化手段として活用してみてください。