適材適所

WindowsやPowerShellやネットワーク、IBMなどのシステム系の話など気になったことも載せているブログです。

PowerShellでNotesメールを取得する

グループウェアの先駆け的な存在であるNotesですが、今ではブラウザを使った軽量の様々なシステムに押されがちで、話題に上がることも少なくなりました。

しかし一度使い始めたアプリケーションから別のアプリケーションへ移行するのは労力が必要で、それが組織全体で使われるようなグループウェアであれば尚の事。

脱Notes!などと声高に叫ばれることもありますが、それも、この分野の代表的な存在であることを象徴することから出てくるフレーズでしょうね。

そんなNotesですが、しっかりと設計されたアプリケーションで、COMインターフェースというアプリケーションを外部から操作することができる機能を装備しています。

そんなCOMインターフェースを使えばPowerShellからNotesを操作することができます。

この記事ではPowerShellを使ってNotesメールを取得する方法について解説したいと思います。

【注意点】32Bit版のPowerShellを使います

NotesのCOMインターフェースを使うとき全般に言えることですが、32bitのアプリケーションでないと動作しません。

PowerShellにも32bitと64bitの2つのバージョンがありますが、32bitのPowerShellを使う必要があります。

64bitのWindowsをお使いであれば、スタートメニューの「WindowsPowerShell」の中に「WindowsPowerShell(x86)」という、PowerShellがあります。

このx86というものが32bitバージョンを表しています。

ご自身の環境に合わせて32bitバージョンのPowerShellをご準備頂ければ幸いです。

以下、この記事のコードを実行するときは32bitのPowerShellを使うようお願いします。

PowerShellでNotesメールを取得する

順を追って対話式でNotesメールを取得する手順を解説していきます。

Notesと接続する

まずはじめに、Notesと接続するには、Lotus.NotesSessionというCOMオブジェクトを使用します。

そしてNotesSessionを初期化することでNotesに接続できます。

初期化するときに、パスワードが必要になります。

これは、Notesにログインするときのパスワードになります。

ご自身の環境に合わせて入力する必要があります。

 
$notesSession=New-Object -ComObject Lotus.NotesSession
$notesSession.Initialize(パスワードを入れてください)

パスワードが正しければ、これでNotesに接続し、ログイン状態になります。

上記のコマンドで接続されるidはそのPCのデフォルトで設定されているidになります。

あまり多くはないかもしれませんが、環境によっては1つのPC内で複数のidを使い分けている場合もあるかもしれません。

デフォルトのidではなく、別のidに接続したい場合は、Initializeではなく、InitializeUsingNotesUserNameメソッドを使うことで、idを指定してそのidを使ってNotesへ接続することができます。

データベースに接続する

Notesメールを操作するためには、次にデータベースへ接続する必要があります。

データベースへ接続するには次のようにします。

 
$db=$notesSession.GetDatabase("サーバ名","○○.nsf")

サーバ名や、○○.nsfはご自身の環境によって書き換える必要があります。

これらの情報がよくわからない場合はNotesのプロパティを確認することでほとんどわかります。

確認のやり方についてはこちらの記事で詳しく解説しておりますので、ご参照いただけますと幸いです。

VBAでNotesメールを取得する簡単なサンプル - 適材適所

Notes文書を取得する

次にNotesの文書を取得します。

Notesはメールに限らず、カレンダーやタスクといった全てのデータを「文書(Document)」という形で保存しているようです。

文書を取得するには次のようにします。

すべてのメールにアクセスするためには次のようにします。

 
for($i=1;$i -le $db.AllDocuments.count;$i++){
  $doc=$db.AllDocuments.GetNthDocument($i)
  $doc.GetItemValue("Subject")
}

ここでは、例として、メールの題名を表示しています。

SubjectのところをBodyやToなどに変更することで、その他の情報を取得することができます。

次によく参照される項目名をあげておきます。

項目名 指定するときの文字
題名 Subject
本文 Body
宛先 SendTo
CC CopyTo
BCC blindCopyTo

【余談】GetNthDocumentに関する注意

しかし、IBMのヘルプを見ると、よくないことが書いてあります・・・。 ↑IBMのヘルプはなくなってしまいました。

使用法
パフォーマンス上の理由により、GetNthDocument を使用してループを繰り返すことは避けてください。推奨されるループ構造については、GetDocument、GetFirstDocument、GetLastDocument、GetNextDocument、GetPrevDocumentを参照してください。
『IBM Knowledge Center』のGetNthDocumentより引用
→NotesはIBMから売却されたため、見られなくなてしまいました。

何かパフォーマンス的によろしくないようですが・・・。
もし、もし、これを見られた方でGetNextDocumentメソッドを使ってループする方法をご存知の方がおりましたら教えてください。

おわりに

PowerShellでNoteメールを取得する方法について解説してみました。

PowerShellであれば、取得したデータをCSV形式にしたり、Json形式にしたりといった変換も簡単にできます。

スクリプトにまとめておけば、Notesメールと他のアプリケーションを連携させる、といったこともでき、下火になりつつある(?)Notesの可能性を広げることができるかと思います。

ぜひお試し頂ければ幸いです。

というわけで、ここまでお読みいただき、ありがとうございました。

参考サイト

GetNthDocument (NotesDocumentCollection - LotusScript)