wingetでアプリを管理する
概要
Windowsでアプリをインストールする方法は、ソフトウェアの配布サイト(アプリの公式や窓の杜などのサイト)からインストーラーをダウンロードしてGUIでインストールするのが一般的である。(ほかには、Microsoftストアからインストールする方法もあるにはあるが……)
たくさんのアプリをインストールする場合は、その都度インストール作業をポチポチ行う必要があり、これは非常に面倒。
一方、LinuxではコマンドラインからCUIでインストール(yum, dfn, apt など)が一般的。
これだと、スクリプトを書いておくとコマンド一発で所望のアプリを一括インストール、というようなことが簡単に実現できる。
実は、Windowsでも コマンドラインからCUIでインストールすることができる。
この用には、以前よりChocolaty(chocoコマンド)が存在していたが、有志のプロジェクトということもあり、個人所有ならともかく、企業で業務利用するPCで積極的に使うのはちょっと躊躇いがあった。
最近では、Microsoft自身がCUIによるアプリ管理方法を整備しており、Windows10 Windows11では、マイクロソフト謹製の winget というコマンドが使えるようになっている。
Microsoftが公式に提供している機能ということもあって、業務利用でも安心して(?)使用することができる。
そんな、winget コマンドでアプリを管理する方法について、よく使うところだけ、簡単に記す。
Wingetを導入する
- Microsoft Storeアプリから 「アプリ インストーラー(App Installer)」 をインストールする
- PowerShellで次のコマンドを実行する
Add-AppxPackage -RegisterByFamilyName -MainPackage Microsoft.DesktopAppInstaller_8wekyb3d8bbwe
Wingetの使い方
インストールされているアプリを一覧表示する
winget list
アプリを探す
インストールしたいアプリの正確な名前(ID、モニカー)を確認する。
winget search <キーワード>
アプリをインストールする
winget install <appname>
アップグレードできるアプリを表示
winget upgrade
アプリをアップグレードする
winget upgrade <appname>
アプリを削除する
winget uninstall notepad++
インストール先のこと
Wingetに限ったことではないが、インストーラーを使ったWindowsアプリのインストール先には、基本的に次のパターンがある。
- システムインストール ※管理者権限が要る
すべてのユーザー(ALL USERS)C:\Program Files\
,C:\Program Files (x86)\
など - ユーザーインストール
現在のユーザー(CURRENT USER)C:\Users\<USERNAME>\AppData\Local\Programs\
など
個人所有など、自分専用として専有できるパソコンならば、別にどちらを選ぼうが構わない。
会社や家族共用しているなど、複数ユーザーが共有するパソコンでは、ALL USERSでインストールしたいケースが多いに違いない。
管理者権限のあるadminユーザーでアプリをインストールしたが、本来そのアプリを使いたい一般ユーザーでサインインすると、アプリは使えない状態のままだった。
インストーラーのデフォルトがユーザーインストールだったため、adminだけが使える状態でインストールされたことが原因。
winget installに –scopeオプションを付けると、インストール範囲をuserまたはmachineに設定できる。userで基本ユーザーインストール、machineで基本システムインストールになるようだ。(デフォルトはuser)
いちいち –scope machine を付けるのが面倒なら winget settings で次のようにしておくと毎度オプション指定する手間が省ける。
settings.jsonに追記
"installBehavior": { "preferences": { "scope": "machine" } },
Help
System権限か、User権限か
アプリのインストールのされ方として、System権限:すべてのユーザー(管理者権限必要)と User権限:現在のユーザー がある。
System権限: C:\Program Files\<appName> や C:\Program Files(x86)\<appName>
User権限: C:\Users\<USERNAME>\AppData\Local\Programs\<appName>
特にsettingを変更せずに、winget install でインストールすると、どちらになるかは、アプリによってまちまちのようだ。
こうしておくと、System権限でインストールされるみたい。
winget install winmerge --scope machine
スクリプト
- installApps.cmd
powershell -ExecutionPolicy RemoteSigned -File .\installApps.ps1
- installApps.ps1
$list = "7zip.7zip", ` "winscp", ` "Notepad++.Notepad++", ` "Microsoft.WindowsTerminal", ` "VideoLAN.VLC" foreach ($item in $list) { echo "[$item]" winget install $item --silent --scope machine if ($?) { echo "=>成功" } else { echo "=>失敗" } }
文字化けを避けるには、エンコードを「UTF-8-BOM」にする。