shin'nosuke さんのアレグロモデラート

アレグロモデラート(Allegro moderato)は、速さを示す演奏記号で「穏やかに速く」

Office 365 の WebDAV ネットワークドライブ を Windows を起動時に再接続する もっとも現実的な方法

こんばんは。

Office 365 というのは、Microsoft が提供するクラウドサービスで、ようするに、Google Apps で、もっとようするにいえば、インターネットで使える 小規模 Notes/Domino なんですけど、このサービスを使うと、割り当てられたインターネットアドレスを WebDAV フォルダとして扱うことができる。共有ドキュメントを IE 上でブラウズしたり編集するのがめんどうくさいときは、Windows で 直接ネットワークドライブを切ればよい。

まず。
Office 365 のチームサイトへログインし、ドキュメントをクリックすると、共有しているドキュメントが一覧表示される。なにもアップロードしていない場合は、なにかファイルをアップロードし、アップロード後、ファイル名の左にあるチェックボックスを入れると、画面の上にリボン的なものが表示されるから、ライブラリツールタブのライブラリをクリックし、接続とエクスポートグループにあるエクスプローラで開くをクリックすると、一覧表示されていた内容が Windows エクスプローラで開くようになる。

動画。


この要領で、同じアドレスを(たぶん、http://yourdomain.sharepoint.com/TeamSite/Document/)Windows エクスプローラから、ネットワークプレースとして追加してみる。すると、問題なく接続ができ、WebDAV フォルダとして、エクスプローラから見えるようになる。

そして、この状態で、コマンドプロンプトを開けて、
net use * http://yourdomain.sharepoint.com/TeamSite/Document/

すると、空いているドライブにこのWebDAV フォルダがマッピングされる。

Windows Xp よりあとの OS であれば、(Vista は 未確認だがたぶんできるだろう)ネットワークドライブのマウントは Windows エクスプローラからでもできるから、接続先を http://yourdomain.sharepoint.com/TeamSite/Document/ にして、Office 365 のアカウントを使って接続すると、ドライブがマップされる。

で。

再起動時に再接続する、にチェックを入れていれば、このドライブがまた使えると思いきや、このネットワークドライブへのアカウント情報は、Internet ExplorerCookie に書いてあるらしく、この Cookie は、揮発性の Cookie なので、もういちど、IE から Office 365 にログインして、さらに、エクスプローラで開く、をしないと、ネットワークドライブの再接続は行われない。

あらゆるサイトで、IE による Office 365 へのログインをすれば、再接続は行われるようになると書いてあるんだが、こっちでやる限りは、エクスプローラで開くまでしないと、再接続できない。これは、Windows Xp でも Windows 7 でも同じだった。

WindowsWebDAV クライアントには、
WebDAV アクセスするためのコンポーネント (WebClient と MSDAIPP) - Microsoft
で解説してるように、WebClient と MSDAIPP があるんだが、さっき接続した WebDAVWindows サービスとしてあがっている WebClient ではなく、Office のコンポーネントである、MSDAIPP を経由してるらしい。IEエクスプローラで開く のときに、Active X で Office のコンポーネントをコールしてログインしているようなのである。

スタートアップで IE をあげて、Office 365 にログインするスクリプトであれば簡単に書けたのにそれではだめで、そんでもって、MSDAIPP をコールするプログラムを書いてあげれば、ログインは突破できるのかと思って、プログラムを書こうとしたが、なんか、MicrosoftWindowsWebDAVAPI を公開していないとのことで、暗礁にのりあげる。くっそー、どうしたらええねん。WebDAV に再接続したい。。。

ちなみに、Excel 2010 で、Office 365 のドキュメントを直接開くと、Office でログインがあらかじめできていればなにも聞かれない。ようするに、Excel は、MSDAIPP のログイン機構をもっているのだ。じゃあ、Excel でネットワークドキュメントを開いて、認証を突破させれば、ネットワークドライブが見えるのか、と考えたのだが、残念ながら、開いたあとも見えない。うーむ。なんでだ、フォルダ単位で権限が設定されているのかな、と半ば投げやりに、ルートのパス(http://yourdomain.sharepoint.com/) Workbooks.open で開けてみた。すると、ホームページの aspx を html として読み込んで、Excel で変換して表示されたのだが、そのまえに、ログインのプロンプトが3回表示された。もしやと思って、ネットワークドライブに行ってみたら、ああ、つながっていましたよ。

ということで、以下の vbscript をスタートアップに仕込めば、ネットワークドライブは Windows としては再接続してくれないが、スクリプトで認証のセッションにアクセスできる。ただし、プロンプトが 3回出るのは、どうしようもないが、資格情報を覚えていれば、エンターキー 3 回押すだけでいいので、それをどう思うかです。なれれば普通だし、最後に、ネットワークドライブに接続しました、の MsgBox を出るようにしとけば、まあ、初期化をしていたんだな、と思える範囲です。
Option Explicit
Dim objExcel
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = false
objExcel.Workbooks.Open "http://yourdomain.sharepoint.com/"
objExcel.Quit
Set objExcel = Nothing


ちなみに、ログインや WebDAV がちょっと遅いときは、以下をおためしください。
SharePoint「Windows エクスプローラで開く」が異様に遅い - SharePoint Maniacs

インターネットオプション→LAN の設定→設定を自動的に検出する をオフにすればいいそうです。これで、自然に Office 365 の WebDAV が使えてます。


しかしだな。。おれ、ノーツのエンジニアやねん。Domino は 芯のしっかりしたわがままでよくすねる女の子とはいえ、Domino の範囲だけで問題解決できたんだが、シェアーポイントは、大学入学を期に東京に出てきた頭のいい女の子がいろんな環境に揉まれながら成長していくさまをいままさにリアルで体現している感じでややこしい。SQLServer のテーブルをわざわざリストとしてラップする必要があったんか? SharePoint Server は x64 じゃないといけなかったのか?なんで、PHPフレームワークみたいに、ASP.NET で実装する必要があったんか?言いたいことは山ほどあるが、SharePoint のように、春から新生活を迎えるみなさん、これから、いろんな予定調和じゃないことにぶちあたると思いますが、SharePoint が Domino を猛烈に食っているのと同じくらいにがんばってください。