そもそもの経緯は過去に記事にしたnoteを見てください。
まぁウチの会社が「OneDriveクライアント」を利用しておけばこのようなことにはならなかったのですが、事情があるのでしょう。
情報がまばらで少なく、公式でもedgeでの不具合についてはあまり付言されてない。要するに『OneDrive同期クライアントをいい加減使いやがれ!』ってことか?
公式:
SharePoint Online では、エクスプローラーで開く機能を使わないか、使う場合も利用頻度を抑えて使用する必要があります。
当該機能が持つ様々なリスクを考慮すると、一般ユーザーの共通プラットフォームとして展開することはお勧めできません。
SharePointOnlineの「エクスプローラーで開く」機能は、WebDAVプロトコルを使用してファイルシステムアクセスしていますが、Azure AD認証のトークンの期限があり、保持時間は8~10時間程度らしい。
それで従来のファイルサーバー的な使い方をすれば、当然支障が出るわけです。
本部の情シス部門からの対処方はIEの互換モードのクッキーと一時ファイルを削除せよとのこと。うん。まぁそれが分かりやすい方法でしょうね。でもほぼ毎朝その操作をしなきゃならんのは正直面倒くさい。
そこでPowerShellで直接Cookie削除してしまえってことでスクリプトを組んでみました。
COMオブジェクトは利用しない方が良い(できない)
最初COMオブジェクトでedgeの操作をしたらいいんじゃね?位の軽い考えでしたが、どうも、IEやEdgeのCOMオブジェクトを通じてのクッキー管理方法が公開されてないようです。主にセキュリティ上の理由ですね。そりゃそうか。
そこでRunDll32 + InetCpl.cplでWindowsのハードに近い制御命令を使って強引にクッキーと一時ファイルの削除をすることにしました。
というかClaudeちゃんに推奨されました。さすがです。
RunDll32によるIE互換モード操作
RunDll32.exeは、Windowsに古くから存在する「DLL関数実行エンジン」で、これを使ってEdge IE互換モードのクッキーと一時ファイルを削除します。
# Edge IE互換モードのクッキー削除
Start-Process "RunDll32.exe" -ArgumentList "InetCpl.cpl,ClearMyTracksByProcess 2" -Wait -WindowStyle Hidden
# 一時ファイル削除
Start-Process "RunDll32.exe" -ArgumentList "InetCpl.cpl,ClearMyTracksByProcess 4" -Wait -WindowStyle Hidden
「ClearMyTracksByProcess」の意味は、「MyTracks」は「ユーザーの行動履歴」を、「ByProcess」は「プロセス単位で処理する」ことを示しています。
ClearMyTracksByProcessパラメータ詳細
パラメータ | 削除対象 | 用途 |
---|---|---|
1 | 履歴 | ブラウジング履歴 |
2 | クッキー | 認証トークン削除 |
4 | 一時ファイル | キャッシュクリア |
8 | フォームデータ | 入力履歴 |
16 | パスワード | 保存パスワード |
255 | すべて | 全データ削除 |
実装上の重要ポイント
-
Low Integrity Level実行
# IE互換モードはLow Integrity Levelで動作 # 通常のMedium Integrity Level実行では効果なし
-
同期実行の重要性
# -Wait パラメータにより削除完了を待機 Start-Process "RunDll32.exe" -ArgumentList "InetCpl.cpl,ClearMyTracksByProcess 2" -Wait
-
エラーハンドリング
try { Start-Process "RunDll32.exe" -ArgumentList "InetCpl.cpl,ClearMyTracksByProcess 2" -Wait -WindowStyle Hidden Write-Host "✓ Edge IE互換モードのクッキーとキャッシュを正常に削除しました" -ForegroundColor Green } catch { Write-Host "✗ エラーが発生しました: $($_.Exception.Message)" -ForegroundColor Red }
ツール実装
# Edge IE互換モードのクッキー削除スクリプト
# SharePoint Online WebDAV接続用
Write-Host "Edge IE互換モードのクッキー削除を開始します..." -ForegroundColor Yellow
try {
# RunDll32を使用してIE互換モードのクッキーとキャッシュを削除
# パラメータ説明:
# 1 = 履歴
# 2 = クッキー
# 4 = 一時ファイル
# 8 = フォームデータ
# 16 = パスワード
# 32 = すべて
Write-Host "クッキーを削除中..." -ForegroundColor Cyan
Start-Process "RunDll32.exe" -ArgumentList "InetCpl.cpl,ClearMyTracksByProcess 2" -Wait -WindowStyle Hidden
Write-Host "一時ファイルを削除中..." -ForegroundColor Cyan
Start-Process "RunDll32.exe" -ArgumentList "InetCpl.cpl,ClearMyTracksByProcess 4" -Wait -WindowStyle Hidden
Write-Host "" # 空行
Write-Host "✓ Edge IE互換モードのクッキーとキャッシュを正常に削除しました" -ForegroundColor Green
Write-Host "✓ SharePoint OnlineのWebDAV接続を再試行できます" -ForegroundColor Green
# 削除完了の時刻を表示
$currentTime = Get-Date -Format "yyyy/MM/dd HH:mm:ss"
Write-Host "削除完了時刻: $currentTime" -ForegroundColor Gray
}
catch {
Write-Host "" # 空行
Write-Host "✗ エラーが発生しました: $($_.Exception.Message)" -ForegroundColor Red
Write-Host "手動でEdgeの設定からクッキーを削除してください" -ForegroundColor Yellow
}
Write-Host "" # 空行
Write-Host "スクリプト実行完了。何かキーを押して終了してください..." -ForegroundColor White
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
GitHubにも置いてます。
https://github.com/ya-ma-n-1972/powershell_tool_report/blob/main/clear_sharepoint_webdav_cache.ps1
SharePointOnlineでのWebDAV接続問題は、クラウドサービスへの移行期に新旧のシステム構成を混合させた運用で起こる構造的問題でしょう。あまりそのような状況を起こすことは無いように思いますが、一つの現場レベルでの解決策と言うことで。