Windows 10の更新プログラム適用後にPCを再起動すると、作業中のデスクトップ状態が失われることに、何とかならないかと思っている人はいませんか。IEとエクスプローラーで開いているウィンドウなら、何とかなるかもしれません。
オフィスの机の上が常に整理整頓されているのを好む人もいれば、人が見ると散らかっているだけのように見える乱雑な状態を好む人もいます。筆者は後者です。自分だけが把握している微妙な配置を、掃除でずらされるとカチンときます。筆者は、机の上だけでなく、PCのデスクトップも散らかった状態の方が仕事が進みます(写真1)。
「デスクトップが散らかっている」とは、今の仕事や次の仕事に使うフォルダ、共通の素材を入れてあるフォルダ、あるいは頻繁にチェックしたいWebサイトなどを、Windowsの「エクスプローラー」やWebブラウザで開いておき、デスクトップの好みの場所に置いておく、あるいは最小化しておく状態のことです。
筆者は日常的に、仕事が終わったら休止状態を使ってPCの電源を切り、翌日、PCを起動したら前日の状態から作業を再開するようにしています。そのような日常も、「Windows Update」による更新プログラムのインストールに伴う再起動でリセットされてしまいます。再起動後にクリーンなデスクトップを「仕事用に散らかしていく」という作業が手間なのです。
「Internet Explorer(IE)」やその他の主要なWebブラウザは、強制終了された場合に「次回起動時にタブを復元する」機能を備えています。しかし、これが期待通りに復元してくれない場合があります。例えば、PCの再起動前にIEの「×」ボタンをクリックして、IEを正常終了してしまったときなどです。
以前、Macを触る機会があったのですが、Mac(OS X 10.7 Lion以降)では、システム終了時に「再ログオン時にウィンドウを再度開く」という機能が使えます(画面1)。この機能を見たとき、Windowsにもあったらいいのにと思いました。
ないものは、作ってしまいましょう。とはいえ、筆者はアプリケーション開発者ではないし、開発ツールを使うのも面倒です。スクリプトで何とかならないか、簡単にできないものか、いろいろと考えてみました。
試行錯誤の末、作成したのが「save_myuri.vbs」と「restore_myuri.vbs」です。「save_myuri.vbs」は、Windowsの「Shell」オブジェクトを利用し、現在エクスプローラーおよびIEで開いているウィンドウの場所(LocationURL)を取得して、ユーザープロファイルフォルダ内の「SAVEDURL.txt」に保存します(画面2)。
- InputKey = MsgBox("再ログオン時に復元できるようにエクスプローラーとIEで開いているウィンドウを保存しますか?",vbYesNo,"シャットダウンまたはログオフ前の確認")
- if InputKey <> vbYes then
- WScript.Quit
- end if
- Set objWshShell = WScript.CreateObject("WScript.Shell")
- SAVEDTO = objWshShell.ExpandEnvironmentStrings("%USERPROFILE%") & "\SAVEDURL.txt"
- Set fso = CreateObject("Scripting.FileSystemObject")
- if fso.FileExists(SAVEDTO) Then
- InputKey = MsgBox("前回保存された状態(" & SAVEDTO & ")があります。" & vbCrLf & "削除してよろしいですか?",vbYesNo,"確認")
- if InputKey <> vbYes then
- WScript.Echo "中止しました。"
- WScript.Quit
- else
- fso.DeleteFile SAVEDTO, True
- end if
- end if
- OUTPUT = ""
- set objShell = CreateObject("Shell.Application")
- set objShellWindows = objShell.Windows
- if not objShellWindows is nothing then
- for each objShellWindow in objShellWindows
- If objShellWindow.LocationURL <> "" then
- OUTPUT = OUTPUT & objShellWindow.LocationURL & vbCrLF
- End If
- Next
- end if
- if OUTPUT <> "" then
- Set outFile = fso.OpenTextFile(SAVEDTO, 2, True)
- outFile.WriteLine OUTPUT
- outFile.Close
- WScript.Echo "Internet Explorer とエクスプローラーの状態をファイル(" & SAVEDTO & ")に保存しました。"
- else
- WScript.Echo "状態は保存されませんでした。"
- end if
- set objShellWindows = nothing
- set objShell = nothing
- set outFile = nothing
- set fso = nothing
そして、「restore_myuri.vbs」を実行すると、ユーザープロファイルフォルダ内の「SAVEDURL.txt」を読み取り、保存された場所をエクスプローラーとIEで開きます(画面3)。IEはタブを追加して開くように、IEの初回起動時と2回目以降で待ち時間を筆者のPCの性能に合わせて調整しています。なお、ウィンドウの大きさや配置は考慮していません。
- Set objWshShell = WScript.CreateObject("WScript.Shell")
- SAVEDTO = objWshShell.ExpandEnvironmentStrings("%USERPROFILE%") & "\SAVEDURL.txt"
- Set fso = CreateObject("Scripting.FileSystemObject")
- InputKey = MsgBox("前回保存された状態(" & SAVEDTO & ")を復元しますか?",vbYesNo,"確認")
- if InputKey <> vbYes then
- WScript.Echo "中止しました。"
- WScript.Quit
- end if
- if Not fso.FileExists(SAVEDTO) Then
- WScript.Echo "前回保存された状態がありません。終了します。"
- WScript.Quit
- end if
- i = 0
- Set objTextFile = fso.OpenTextFile(SAVEDTO, 1)
- Do Until objTextFile.AtEndOfLine
- TARGETURL = objTextFile.ReadLine
- if TARGETURL <> "about:blank" then
- if Mid(TARGETURL,1,8) = "file:///" then
- TARGETURL = replace(TARGETURL,"file:///","")
- TARGETURL = replace(TARGETURL,"/","\")
- TARGETURL = replace(TARGETURL,"%20"," ")
- TARGETURL = """" & TARGETURL & """"
- objWshShell.Run TARGETURL
- else
- TARGETURL = "cmd /c start " & TARGETURL
- objWshShell.Run TARGETURL
- if i = 0 then
- WScript.Sleep (10000)
- else
- WScript.Sleep (2000)
- end if
- i = i + 1
- end if
- end if
- Loop
- objTextFile.Close
- Set objTextFile = nothing
- Set fso = Nothing
- Set objWshShell = nothing
ちなみに、このスクリプトは数年前にWindows 7向けに作成したものです。その後、Windows 8、Windows 8.1とアップデートしてきましたが、問題なく動きました。
しかし、Windows 10にアップグレードしたところ、問題が発生しました。このスクリプトはIEを前提にしているため、Windows 10の既定のWebブラウザである「Microsoft Edge」との組み合わせでは、URLの保存と開く動作が機能しません。既定のWebブラウザをIEに変更すれば、Windows 8.1以前と同じように動きました。
Windows 10のリリースから1年が経過して、これから本格的にWindows 10に移行しようと計画している企業は多いと思います。システム管理者の方は、さまざまな運用管理タスクをスクリプト化して作業の負担を軽減していると思いますが、Windows 10に移行すると思わぬところに影響が出る可能性があるのでご注意ください。特に、「タスクスケジューラー」に登録した自動実行タスク、ログオンスクリプトなどは要注意です。
ところで、先日、Windows 10 Anniversary Update(バージョン1607)のPCで離席中、Windows UpdateでPCが自動的に再起動してしまいました。再起動後、「ペイント」が自動起動し、データが復元されているのを目にしました(画面4)。
初めての経験だったのでWindows 10のどのバージョンからの機能であるかは分かりませんが、Windows 10には自動再起動によるデータ損失の影響を少なくする、何かしらの復旧機能が搭載されているようです。ただし、ごく一部のアプリケーションだけのようで、大部分のアプリケーションの未保存だったデータは戻ってきません。
岩手県花巻市在住。Microsoft MVP:Cloud and Datacenter Management(Oct 2008 - Sep 2016)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。マイクロソフト製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。
Copyright © ITmedia, Inc. All Rights Reserved.
Server & Storage 鬮ォ�ェ陋滂ソス�ス�コ闕オ譁溷クキ�ケ譎「�ス�ウ驛「�ァ�ス�ュ驛「譎「�ス�ウ驛「�ァ�ス�ー