PCアプリを一括インストール&自動更新するための個人的なメモ【Windows wingetコマンド タスクスケジューラ】

# 目次
- [はじめに](#はじめに)
- [Windowsパッケージマネージャー(winget)とは](#windowsパッケージマネージャーwingetとは)
  - [アプリケーションのインストール](#アプリケーションのインストール)
  - [アプリの一括インストール](#アプリの一括インストール)
- [アプリの自動更新](#アプリの自動更新)
  - [タスクスケジューラにて自動更新](#タスクスケジューラにて自動更新)
      - [タスクスケジューラを開きタスクを作成](#タスクスケジューラを開きタスクを作成)
      - [トリガーではタスクが起動される条件を設定](#トリガーではタスクが起動される条件を設定)

# はじめに

Windows OSをクリーンインストールした時に今まで使っていたアプリケーションをいちいちダウンロード先を検索してインストールするのが少し面倒だと感じるときがある。
最近のWindowsではwingetコマンドというのがあり、こちらを使うと対応しているアプリケーションのみであるが一括でまとめてアプリをインストールできる。また、Windows OSのタスクスケジューラ機能を使えばPC起動時に自動で更新してくれるためインストールや更新にかかる手間を省けそうだと感じたため個人的なメモとして残す。

# Windowsパッケージマネージャー(winget)とは

知らない間にWindowsでwingetコマンドというものがが使えるようになった。
このコマンドを使うことでコマンドで一発でソフトのインストールができたり一括でアプリケーションの更新をするのに便利なものになっている。

## Windows Package Manager (winget)導入
### Install by Powershell

https://learn.microsoft.com/en-us/windows/package-manager/winget

公式ドキュメントにある通り、以下のコマンドをPowershellに打ち込んでインストールする。
```
Add-AppxPackage -RegisterByFamilyName -MainPackage Microsoft.DesktopAppInstaller_8wekyb3d8bbwe
```

### Install from GitHub

https://github.com/microsoft/winget-cli

コマンドでアプリケーションをインストールできるので便利です。
画面右側の`Releases`から`Microsoft.DesktopAppInstaller_<XXX>.msixbundle`をインストーラーをダウンロードできたはず。

### Install from Microsoft store

https://apps.microsoft.com/detail/9nblggh4nns1?hl=ja-jp&gl=JP

マイクロソフトストアの「アプリインストーラー」から導入する。

## アプリケーションのインストール

winget.runというサイトからアプリケーションのコマンドを検索をする。
例えばMicrosoft Visual Studio Codeで検索をする。

![winget_run_search_VScode.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3729100/db17bc5d-89c3-56d1-c45e-b234bd177cdb.png)

検索結果から詳細にいきHow to installにあるコマンドをコピーしてPowershellに貼り付けることで自動でダウンロードからインストールまでしてくれる。

![winget_run_VScode.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3729100/fe8103a4-ce63-5648-18d7-77e7095ef7da.png)

## アプリの一括インストール

ファイルを2つ作成した。ファイル名は何でも良いが便宜上設定した。

- `winget.ps1`

インストール用のwingetコマンドをまとめて記載することで一括で実行できる。初期インストール後にまとめてファイルをインストールする時に使えそう。
例えば、テキストエディタで以下の内容で「winget.ps1」で保存するとGoogle日本語入力、Google Chrome、7zip、Visual Studio Codeをまとめてインストールできる。

```
winget install -e --id Google.JapaneseIME
winget install -e --id Google.Chrome
winget install -e --id 7zip.7zip
winget install -e --id Microsoft.VisualStudioCode
```

- `run.bat`

run.batではps1ファイルを簡単に実行するために作成したので必須ではない。
テキストエディタに以下の内容を記載し、ファイル名「run.bat」で保存。「.\winget.ps1」の部分は作成したps1ファイルと同じにする。

```
powershell -NoProfile -ExecutionPolicy Bypass .\winget.ps1
```

このファイルを「.\winget.ps1」と同じフォルダ内にあることを確認、ダブルクリックするとps1ファイルを実行できる。
実行後、「winget list」でインストール済のアプリを確認することができる。

# アプリの自動更新

「winget upgrade --all」にて更新可能なアプリを一括更新できる。
このコマンドをWindowsのタスクスケジューラで特定の条件下で自動で実行されるようにすることでアプリの自動更新をさせる。今回はPC起動時にこのコマンドを実行するようにする。

## タスクスケジューラにて自動更新

### タスクスケジューラを開きタスクを作成

Windowのメニューから「タスクスケジューラ」を開く。
以下のように設定をする。
全般では名前と説明を記載する。
また、管理者権限で実行したいときはWindows10でアプリやプログラムを管理者として実行する方法より、

> 手順としては、タスクスケジューラでプログラムを実行するタスクを作成するときに「最上位特権で実行する」にチェックを入れて作成します。
> これにより、実行するプログラムを管理者として実行することができます。

引用元:

https://4thsight.xyz/13671

![TaskScheduor_General.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3729100/6ea860b9-a476-bd82-12cf-db83fc8152eb.png)

### トリガーではタスクが起動される条件を設定

今回はPC起動時にインストールしているアプリケーションのアップデートを自動でかけられるようにしたかったためスタートアップ時に設定した。

![TaskScheduor_Edit_Triger.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3729100/f5ef6593-552c-27b1-df94-9f33c2a32f62.png)

操作ではトリガーの条件が来た時におこう操作を設定する。
「winget update --all」を設定し、アプリケーションの自動更新をするようにした。

![TaskScheduor_Operation.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3729100/e65f3b9b-747b-d161-3677-05ce97a31ec5.png)

直接記入してもだめだったため、

```
@if not "%~0"=="%~dp0.\%~nx0" start /min cmd /c,"%~dp0.\%~nx0" %* & goto :eof
winget upgrade --all
```

上記の内容のbatファイルを作成した。この、batファイルの保存場所とファイル名は任意のものを設定する。
今回は「C:\Users\user\winget_routine_update.bat」とした。
こちらのbatファイルを「プログラム/スクリプト」に記載して「OK」で終了。

![TaskScheduor_batFile_Operation.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3729100/ed2e5d01-f92e-981e-f4ad-212f828c6e80.png)

batファイルを指定して起動時に実行し、自動でソフトウェアの更新がされるようにした。