winget listをgrepしたい

Windows: Windows 11 Pro 22H2
WindowsTerminal: バージョン: 1.18.2822.0
PowerShell: 7.3.9
WSL: バージョン: 1.2.5.0


# プラン1. PowerShellで絞り込み: [Select-String](https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.utility/select-string?view=powershell-7.3#examples)
```sh
winget list | sls "steam"
```

>Steam                                       Valve.Steam                                     2.10.91.91         winget
NEEDY GIRL OVERDOSE                         Steam App 1451940                               Unknown
蛻晞浹繝溘け Project DIVA MEGA39窶冱+             Steam App 1761390                               Unknown
ARK: Survival Evolved                       Steam App 346110                                Unknown

文字化けする・・・
(リダイレクトしてテキストファイルに保存しても文字化けしてた)

# プラン2. PowerShellからwslのgrepを使う

```
winget list | wsl grep -Ei steam
```

>Steam                                       Valve.Steam                                     2.10.91.91         winget
NEEDY GIRL OVERDOSE                         Steam App 1451940                               Unknown
蛻晞浹繝溘け Project DIVA MEGA39窶冱+             Steam App 1761390                               Unknown
ARK: Survival Evolved                       Steam App 346110                                Unknown

文字化けする・・・

# プラン3. コマンドプロンプトでfind

```sh
winget list | find "Steam"
```
>Steam                                       Valve.Steam                                     2.10.91.91         winget
NEEDY GIRL OVERDOSE                         Steam App 1451940                               Unknown
蛻晞浹繝溘け Project DIVA MEGA39窶冱+             Steam App 1761390                               Unknown
ARK: Survival Evolved                       Steam App 346110                                Unknown

文字化けする
(リダイレクトしてテキストファイルに保存したら文字化けしなかった)

# プラン4. コマンドプロンプトからwslのgrepを使う

```sh
winget list | wsl grep -Ei steam
```
>Steam                                       Valve.Steam                                     2.10.91.91         winget
NEEDY GIRL OVERDOSE                         Steam App 1451940                               Unknown
初音ミク Project DIVA MEGA39’s+             Steam App 1761390                               Unknown
ARK: Survival Evolved                       Steam App 346110                                Unknown

文字化けしない


# プラン5. wslからwindowsのコマンドを使う

Windowsのコマンドはだいたい`.exe`つければwsl側でも使える

```sh
winget.exe list | grep -Ei steam
```

>Steam                                       Valve.Steam                                     2.10.91.91         winget
NEEDY GIRL OVERDOSE                         Steam App 1451940                               Unknown           
初音ミク Project DIVA MEGA39’s+             Steam App 1761390                               Unknown           
ARK: Survival Evolved                       Steam App 346110                                Unknown 

文字化けしない

# 文字化けの理由について

ググったりChatGPTに聞いたりして文字化け直そうとしたけど全部効果なかった
理由分かってないけどwingetをリダイレクトしたときだけ文字コードがうんちっぽい
`Get-Content`をリダイレクトしてファイルに保存しても問題なかった

wslならいけるしそこまでwinget listを厳密にフィルタリングする必要ないのであきらめた
ほな・・・(知ってる人いたら教えて)

## 参考
- [【PowerShell】Select-StringやOut-Fileの文字化けに立ち向かう │ コジマノテック](https://kojimanotech.com/2019/06/21/152/)
- [Powershell上で、パイプで渡すと文字化けする。 #PowerShell - Qiita](https://qiita.com/EmEpsilon/items/7e8f72b9c58576b4c5a5)