どうもミツシマです。

今回はWindows10にて初期で配置されるスタートメニューのタイルをPowershellコマンドで一括削除出来ないかを検証してみました。

検証環境は以下の通り
PC:Windows10 1809


今回操作するスタートメニューのタイルとは、Windowsボタンをクリックした際に表示される右側のピン留めされたエリアのこと↓
スタートメニュー01


上記画面のように初期で色々なアプリが配置されているが、正直「Xbox」のゲームなどいらないアプリケーションが多い。。。
これを一つずつ右クリックして、「スタートからピン留めを外す」とやっていくのが面倒なので、一括で外せないかを検証してみました。

〜検証〜

まずはレジストリ情報で持ってないかを調べてみる。
すると「HKCU¥Software¥Microsoft¥Windows¥CurrentVersion¥CloudStore¥Store¥Cache¥DefaultAccount」キーで情報を保持していそう。
まずはこのキーを削除して、エクスプローラを再起動してみる。
すると、スタートメニューのタイルが初期状態にリセットされることを確認。
後はこの初期状態にてすべてのアプリをピン留めしないように操作するように模索。

①「C:¥Users¥ユーザー名¥AppData¥Local¥Microsoft¥Windows¥Shell¥DefaultLayouts.xml」を削除(リネーム)して、上記レジストリキーを削除してみる
結果:初期配置変わらず

②「C:¥Users¥ユーザー名¥AppData¥Local¥Microsoft¥Windows¥Shell¥DefaultLayouts.xml」の中身を最小限に編集してみる
結果:アイコンが3つだけになった([Microsoft Store]・[設定]・[Microsoft Edge]

③スタートメニューが一切ピン留めされていない「LayoutModification.xml」を作成し、「C:¥Users¥ユーザー名¥AppData¥Local¥Microsoft¥Windows¥Shell¥」配下を配置する
結果:成功


③の方法というのは本来は既に作成されたユーザープロファイルに対して行う操作ではなく、
「C:¥Users¥Default¥AppData¥Local¥Microsoft¥Windows¥Shell¥LayoutModification.xml」に配置し、新規作成されるユーザーのスタートメニュータイルの初期配置を操作するものである。
(後はグループポリシーでスタートメニュータイルを縛る時などに使用するファイル)
※今回詳しくは割愛するが、気になる人は「LayoutModification.xml」で検索すると色々と出てくるよ。


あんまりスマートな方法ではないかもしれないが、これらの処理をPowershellスクリプトで実行するように検証!


完成したスクリプト(ResetAllStartMenuTile.ps1)

#環境変数の設定
$XMLFileFullPath = $env:LOCALAPPDATA + "¥Microsoft¥Windows¥Shell¥LayoutModification.xml"

Write-Host "スタートメニューの全リセットの処理を開始します.そのままお待ちください... `r`n" -ForegroundColor Green

$XMLContents = @"
<LayoutModificationTemplate xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout" Version="1" xmlns="http://schemas.microsoft.com/Start/2014/LayoutModification">
  <LayoutOptions StartTileGroupCellWidth="6" />
  <DefaultLayoutOverride>
    <StartLayoutCollection>
      <defaultlayout:StartLayout GroupCellWidth="6" />
    </StartLayoutCollection>
  </DefaultLayoutOverride>
</LayoutModificationTemplate>
"@

#所定のフォルダににXMLファイル作成
$xmlDoc = [xml]$XMLContents
$xmlDoc.Save($XMLFileFullPath)

#レジストリキーの削除
Remove-Item -Path "HKCU:¥Software¥Microsoft¥Windows¥CurrentVersion¥CloudStore¥Store¥Cache¥DefaultAccount" -Recurse -Force

#エクスプローラーの再起動
Stop-Process -Name explorer -Force

#エクスプローラーが再起動する時間を稼ぐ為、10秒間ウェイト
Start-Sleep -Seconds 10

#Windowsキーを押して確認させる為のメッセージ表示
Write-Host "スタートメニューを開きます.全てリセットされていれば、何かキーを押して処理を続行してください... `r`n" -ForegroundColor Green

#Windowsキーを押す
add-type -AssemblyName System.Windows.Forms
[System.Windows.Forms.SendKeys]::SendWait("^{ESC}")

pause

#XMLファイルの削除
Remove-Item -Path $XMLFileFullPath -Force


〜解説〜

まずは「C:¥Users¥Default¥AppData¥Local¥Microsoft¥Windows¥Shell¥LayoutModification.xml」にXMLファイルを生成する。(中身についてはスタートメニューに何もピン留めしない状態)
XMLファイルを生成した後、レジストリキーを削除してエクスプローラを再起動する。
ここでエクスプローラが再読込されるまでの時間を稼ぐために10秒ウェイトする。
検証初期の頃はウェイトを入れなかった為に、最後の生成したXMLファイルを削除する工程が先に行われてしまい、上手くいかなかった。
その為、10秒というのは検証していった中でのエクスプローラの再起動にかかる大体の目安時間である。
その後、Windowsキーを押してスタートメニューの状態を確認させた後、生成したXMLファイルを削除して終わりである。


実行中のPowershellスクリプト画面↓
スタートメニュー03


スクリプト実行後のスタートメニューの状態↓
スタートメニュー02



MicrosoftもProfessionalエディション以上のスタートメニュータイルの初期配置をもう少し考えてほしいよな〜〜といったところで今回の検証終了(・∀・)
スポンサードリンク