Windows10のスタートメニューなどをスッキリさせる方法

Page content

概要

この記事は corp-engr 情シスSlack(コーポレートエンジニア x 情シス)#1 Advent Calendar 2022 の12日目の記事で

  • Windows10に最初から入っている不要なストアアプリを削除してスッキリさせる方法
  • Windows10で新しくログインするユーザのスタートメニューとタスクバーのピン留めをスッキリさせる方法

の二本立てです。

詳細

皆さんこん○○はWindowsPCのキッティングやってますか?

社内の皆さんが仕事に集中できるPC環境を作る為に不要なアプリはキレイに消したり、よく使いそうなアプリはタスクバーとかにピン留めされる状態にしてPCを出荷出来たらステキですよね?

今回の記事は不要なストアアプリを削除する方法とスタートメニューとタスクバーのアプリのピン止めの初期設定をする方法の二本立てです。

本文

不要なストアアプリを削除する

この記事の内容とほぼ同じ事がこのツールで出来るので、PowerShellが読めてちゃんとエラー処理が欲しい人はこちらをご参照ください。 https://github.com/The-Virtual-Desktop-Team/Virtual-Desktop-Optimization-Tool

この記事の操作は実行すると元に戻す方法がありません †1 。予め検証機など初期化しても良いPCで実行し、自分の用途に合う状態になるか確認をしてから運用してください。

Windows10って標準でソリティア入ってますよね…?社給PCにゲームが入ってるのってどうなの?と思ったり、Skypeは不要なので削除しておきたい…と思っても設定のアプリの画面から消す事ができません。

いや、消せるんですけど今ログインしているユーザが使えなくなるだけで他のユーザが同じPCにログインすると新しくログインしたユーザでは使えてしまうんですよね。

これは標準のストアアプリがOS内に入っていて、新しくユーザのプロファイルを作成する時に一緒に展開されるという仕様だからです。

共用PCなどで色々なユーザがサインインするPCの場合にはユーザがサインインする度に %localappdata%¥Packages にアプリが展開されるので絶対に使わないだろう…というムダなアプリでディスク容量を食う原因にもなります。

なので不要なアプリはバッサリ消してしまいましょう

不要なストアアプリを削除するバッチファイル

キッティングスクリプトをバッチファイルで書いている人向けにバッチファイルで動くコードを用意しました。 (私もバッチファイル派でAutoPilotで初期設定バッチファイルが動くようにして色々な設定をしています。力業っぽいのをどうにかしたい)

以下の内容をコピペしてremove_appx.batとかそういう名前で保存して管理者として実行するとMicrosoft SolitaireCollectionが消えます。 他のユーザが新しくログインしてもそのユーザにMicrosoft SolitaireCollection がインストールされるという事もありません。

remove_appx.batを保存するときに文字コードはANSIにしないとコマンドプロンプトで文字化けします

@echo off
for %%f in ( Microsoft.MicrosoftSolitaireCollection ) do (
echo %%f を削除中
powershell -NoProfile -InputFormat None -ExecutionPolicy Unrestrected "Get-AppxProvisionedPackage -Online|Where{ $_.DisplayName -like '%%f' }|Remove-AppxProvisionedPackage -Online|Out-Null"
powershell -NoProfile -InputFormat None -ExecutionPolicy Unrestrected "Get-AppxPackage -AllUsers -Name %%f|Remove-AppxPackage -AllUsers"
powershell -NoProfile -InputFormat None -ExecutionPolicy Unrestrected "Get-AppxPackage -Name %%f|Remove-AppxPackage"
)

他にも不要なアプリがあれば for %%f in ( Microsoft.MicrosoftSolitaireCollection ) do (()の中に以下のリストのパッケージ名をスペース区切りで入れると一緒に消せます。

例えばソリティアとSkypeを消すなら以下のようになります

@echo off
for %%f in ( Microsoft.MicrosoftSolitaireCollection Microsoft.SkypeApp ) do (
echo %%f を削除中
powershell -NoProfile -InputFormat None -ExecutionPolicy Unrestrected "Get-AppxProvisionedPackage -Online|Where{ $_.DisplayName -like '%%f' }|Remove-AppxProvisionedPackage -Online|Out-Null"
powershell -NoProfile -InputFormat None -ExecutionPolicy Unrestrected "Get-AppxPackage -AllUsers -Name %%f|Remove-AppxPackage -AllUsers"
powershell -NoProfile -InputFormat None -ExecutionPolicy Unrestrected "Get-AppxPackage -Name %%f|Remove-AppxPackage"
)
パッケージ名 備考
Microsoft.MicrosoftSolitaireCollection ソリティア
Microsoft.SkypeApp Skype
Microsoft.MicrosoftOfficeHub 最初から入ってるOfficeのやつ(後からOfficeをインストールするならいらない)
Microsoft.Office.Onenote OneNote for Windows10(後からOfficeをインストールするならいらないはず)
Microsoft.MixedReality.Portal VRヘッドセットを使うやつっぽい
Microsoft.Microsoft3DViewer 3Dビューアー 3Dやる?
Microsoft.OneDriveSync 最初から入ってるOneDrive Office2016以降を後からインストールするならいらない
Microsoft.GetHelp 問い合わせ。ブラウザでググればいいのでは…?
Microsoft.Getstarted ヒントつかう???
Microsoft.WindowsFeedbackHub フィードバックハブ 一般のユーザはつかわないのでは?
Microsoft.WindowsMaps マップ いる?
Microsoft.YourPhone スマートフォン連携 連携しなければ不要
Microsoft.Messaging メッセージング パソコンにSIMがついててSMSを使うならいるのかもしれない
Microsoft.OneConnect モバイル通信プラン パソコンにSIMがついてたら必要なのかもしれない
microsoft.communicationsapps 標準のメールとスケジュールソフト、Outlook使うならいらないはず
Xbox関連パッケージ(Win+Shift+Gが必要なら消さない方が良さそう)
Microsoft.Xbox.TCUI Microsoft.XboxApp Microsoft.XboxGameOverlay Microsoft.XboxGamingOverlay Microsoft.XboxIdentityProvider Microsoft.XboxSpeechToTextOverlay

リストに書いてあるアプリ全部を全部消すならこうです、forの行が長くなりますが1行で書いて下さい

@echo off
for %%f in ( Microsoft.MicrosoftSolitaireCollection Microsoft.SkypeApp Microsoft.MicrosoftOfficeHub Microsoft.Office.Onenote Microsoft.Office.Onenote Microsoft.Xbox.TCUI Microsoft.XboxApp Microsoft.XboxGameOverlay Microsoft.XboxGamingOverlay Microsoft.XboxIdentityProvider Microsoft.XboxSpeechToTextOverlay Microsoft.MixedReality.Portal Microsoft.Microsoft3DViewer Microsoft.OneDriveSync Microsoft.GetHelp Microsoft.Getstarted Microsoft.WindowsFeedbackHub Microsoft.MicrosoftMaps Microsoft.YourPhone Microsoft.Messaging Microsoft.OneConnect ) do (
echo %%f を削除中
powershell -NoProfile -InputFormat None -ExecutionPolicy Unrestrected "Get-AppxProvisionedPackage -Online|Where{ $_.DisplayName -like '%%f' }|Remove-AppxProvisionedPackage -Online|Out-Null"
powershell -NoProfile -InputFormat None -ExecutionPolicy Unrestrected "Get-AppxPackage -AllUsers -Name %%f|Remove-AppxPackage -AllUsers"
powershell -NoProfile -InputFormat None -ExecutionPolicy Unrestrected "Get-AppxPackage -Name %%f|Remove-AppxPackage"
)

何か他にも消したいアプリがあればPowerShellを管理者権限で開いて Get-AppxProvisionedPackage -online |Select-Object DisplayName を実行するとユーザがログインするときに展開されるストアアプリの一覧が出るので、名前で見当をつけて追加してください。 ストアアプリを使わないからといってWindowsStoreを消すのはオススメしません(後でストアアプリがやっぱり必要…となった時に戻せないので本当にやめたほうがいいです)

スタートメニューとタスクバーのピン留めを初期設定する

スタートメニューとタスクバーのピン留めをスッキリさせる方法に需要†2がありそうなのでこれも書いておきます。 ユーザがログインしてすぐにスタートメニューとタスクバーに必要なアイコンだけをピン止めしておくことが可能になります。

こちらの記事もストアアプリを消す程では無いけど元に戻すのが難しいので予め検証機などで試してからご利用下さい。

最初からタスクバーにピン止めされているアプリを消す方法は以下のコードをメモ帳にコピペして startmenu.xml とかそういう名前でC:\Users¥Public あたりに保存して

<LayoutModificationTemplate
    xmlns="http://schemas.microsoft.com/Start/2014/LayoutModification"
    xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout"
    xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout"
    xmlns:taskbar="http://schemas.microsoft.com/Start/2014/TaskbarLayout"
    Version="1">
  <CustomTaskbarLayoutCollection PinListPlacement="Replace">
    <defaultlayout:TaskbarLayout>
      <taskbar:TaskbarPinList>
        <taskbar:DesktopApp DesktopApplicationLinkPath="#leaveempty"/>
      </taskbar:TaskbarPinList>
    </defaultlayout:TaskbarLayout>
  </CustomTaskbarLayoutCollection>
</LayoutModificationTemplate>

管理者として実行したPowerShellでcd \Users\PublicしてからImport-StartLayout -LayoutPath '.\startmenu.xml' -MountPath 'C:\' すればOK

このコマンドを実行した後に初めてログインするユーザに適用されます。

もうパターンがわかったと思うのですがバッチファイルに組み込むならこう

cd \Users\Public
powershell -NoProfile -InputFormat None -ExecutionPolicy Unrestrected "Import-StartLayout -LayoutPath '.\startmenu.xml' -MountPath 'C:\'"

Intuneの場合は↑のPowerShellを実行するのでは無くて Windows | 構成プロファイルWindows10以降 のテンプレートで デバイスの制限 のプロファイルを作成し、開始のスタートメニューのレイアウトにxmlファイルをアップロードすればOKです(但しユーザがスタートメニューに自由にピン留めを行ったり外したりは出来なくなります)

好きなアプリをタスクバーにピン留めしたいです…

スッキリさせるだけじゃ無くて好きなアプリをピン留めしたい場合は<taskbar:DesktopApp DesktopApplicationLinkPath="#leaveempty"/>の行を好きなアプリの実行ファイルかショートカットへのPATH†3にします。 ショートカットのPATHを指定するのが楽だと思います。 例えばEdgeをタスクバーにピン留めしたいならstartmenu.xmlは以下の通りです。

<LayoutModificationTemplate
    xmlns="http://schemas.microsoft.com/Start/2014/LayoutModification"
    xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout"
    xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout"
    xmlns:taskbar="http://schemas.microsoft.com/Start/2014/TaskbarLayout"
    Version="1">
  <CustomTaskbarLayoutCollection PinListPlacement="Replace">
    <defaultlayout:TaskbarLayout>
      <taskbar:TaskbarPinList>
        <taskbar:DesktopApp DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Microsoft Edge.lnk"/>
      </taskbar:TaskbarPinList>
    </defaultlayout:TaskbarLayout>
  </CustomTaskbarLayoutCollection>
</LayoutModificationTemplate>

スタートメニューもスッキリさせたいなら作業用のアカウントでスタートメニューを整えておいて Export-StartLayout -path defaultstartmenu.xml を実行して、生成されたdefaultstartmenu.xmlをメモ帳か何かでひらいて

<LayoutOptionsで始まる行から</DefaultLayoutOverride>の行までをコピーしてstartmenu.xmlの<CustomTaskbarLayoutCollection PinListPlacement="Replace">の上の行に貼り 付ければ次に初めてログインするログインするユーザのスタートメニューも整った状態になります。

ストアアプリとかをピン留めしたいなら https://learn.microsoft.com/en-us/windows/configuration/configure-windows-10-taskbar を読むとやり方が書いてあります。

今ログインしているユーザにも適用したい

スタートアップとタスクバーのカスタマイズは、設定後初めてログインするユーザに対して適用されるもので、現在ログイン中のユーザやすでにログインした事のあるユーザには適用されません。 現在ログイン中のユーザにも適用したいんだけど…ということならこちらの記事に書いてあるとおりPowerShellで以下のように実行すると適用されます このコマンドを使って自分の思った通りに設定できてるか確認してからテスト用のユーザでログインしてみると検証が楽です。

Remove-Item 'HKCU:\Software\Microsoft\Windows\CurrentVersion\CloudStore\Store\Cache\DefaultAccount\*$start.tilegrid$windows.data.curatedtilecollection.tilecollection' -Force -Recurse
Get-Process Explorer | Stop-Process

参考にした記事 https://qiita.com/RyoIchimura/items/842e6cc5056dcf638598

終わり

読んでもわからない場合は情シスSlackで聞いて貰えたら調子に乗って追加のブログ書くかも

それでは皆様この記事の内容を活用してステキな状態にWindows10PCをキッティングしてくださいノシノシ