🥖

[PowerShell]wingetの結果を変数に代入し出力すると文字化けが発生

2024/02/19に公開

概要

文字コードがUTF-8で出力されるコマンド、wingetのコマンド結果を変数に代入し、
Write-Outputコマンドレットで変数の中身を確認すると文字化けしてしまいました。

PowerShellコンソールの文字コードを変更することで文字化けを回避する事ができました。

この記事のターゲット

  • PowerShellユーザーの方
  • wingetコマンドの結果を変数にいれて文字化けせずにコンソール出力したい方
  • PowerShellの文字コードまわりの設定を一括変更可能なFunctionを知りたい方

環境

Windows PowerShell(5.1の環境)

Windows PowerShellのバージョン
PS C:\Users\"ユーザー名"> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.19041.3930
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.19041.3930
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1


PS C:\Users\"ユーザー名">

PowerShell Core(6.0以降の環境)

PowerShell Coreのバージョン
PS C:\Users\"ユーザー名"> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      7.3.11
PSEdition                      Core
GitCommitId                    7.3.11
OS                             Microsoft Windows 10.0.19045
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

PS C:\Users\"ユーザー名">

事象

冒頭で説明しているとおり、winget upgradeのコマンド結果を変数に代入し、
Write-Outputでコンソール出力すると、下記の通り文字化けが発生しました。

6.0以降の環境(5.1でも同じ結果)
# Windowsパッケージマネージャー、wingetコマンドでアップデート状況の結果を変数に代入
PS C:\Users\"ユーザー名"> $result = (winget upgrade)
PS C:\Users\"ユーザー名">

# 変数の内容を表示すると文字化け発生。
PS C:\Users\"ユーザー名"> Write-Output $result

   -
   \


   -
   \

蜷榊燕                                             ID                                繝舌・繧ク繝ァ繝ウ     蛻ゥ逕ィ蜿ッ閭ス       繧ス繝シ繧ケ
-----------------------------------------------------------------------------------------------------------------------
draw.io 22.1.18                                  JGraph.Draw                       22.1.18        23.0.2         winget
CrystalDiskInfo 8.17.14 (64 繝薙ャ繝・              CrystalDewWorld.CrystalDiskInfo   8.17.14        9.2.2          winget
DBeaver 23.0.2                                   dbeaver.dbeaver                   23.0.2         23.3.4         winget
Docker Desktop                                   Docker.DockerDesktop              4.18.0         4.27.2         winget
Git                                              Git.Git                           2.40.0         2.43.0         winget
Google Chrome                                    Google.Chrome                     121.0.6167.184 122.0.6261.39  winget
Kubernetes - Minikube - A Local Kubernetes Deve窶ヲ Kubernetes.minikube               1.30.1         1.32.0         winget
Microsoft Visual Studio 2010 Tools for Office R窶ヲ Microsoft.VSTOR                   10.0.50903     10.0.60912.00  winget
Microsoft Visual C++ 2015 UWP Desktop Runtime P窶ヲ Microsoft.VCLibs.Desktop.14       14.0.32530.0   14.0.33321.0   winget
Windows 繧ソ繝シ繝溘リ繝ォ                               9N0DX20HK701                      1.18.3181.0    1.19.10302.0   winget
SourceTree                                       Atlassian.Sourcetree              3.4.12         3.4.16         winget
Tera Term 4.106                                  TeraTermProject.teraterm          4.106          4.108          winget
Tesseract-OCR - open source OCR engine           UB-Mannheim.TesseractOCR          5.3.1.20230401 5.3.3.20231005 winget
VLC media player                                 VideoLAN.VLC                      3.0.18         3.0.20         winget
WinMerge 2.16.28.0 x64                           WinMerge.WinMerge                 2.16.28.0      2.16.38        winget
PowerShell 7.3.11.0-x64                          Microsoft.PowerShell              7.3.11.0       7.4.1.0        winget
Microsoft Visual C++ 2015-2022 Redistributable 窶ヲ Microsoft.VCRedist.2015+.x64      14.36.32532.0  14.38.33135.0  winget
Oracle VM VirtualBox 7.0.6                       Oracle.VirtualBox                 7.0.6          7.0.14         winget
MySQL Workbench 8.0 CE                           Oracle.MySQLWorkbench             8.0.28         8.0.36         winget
Dell Display Manager                             Dell.DisplayManager               < 2.0          2.2.0.43       winget
Node.js                                          OpenJS.NodeJS.LTS                 18.16.0        20.11.0        winget
Microsoft Windows Desktop Runtime - 6.0.26 (x64) Microsoft.DotNet.DesktopRuntime.6 6.0.26         6.0.27         winget
Microsoft .NET Runtime - 6.0.26 (x64)            Microsoft.DotNet.Runtime.6        6.0.26         6.0.27         winget
Microsoft Visual C++ 2015-2022 Redistributable 窶ヲ Microsoft.VCRedist.2015+.x64      14.34.31938.0  14.38.33135.0  winget
Microsoft .NET SDK 7.0.405 (x64)                 Microsoft.DotNet.SDK.7            7.0.405        7.0.406        winget
Microsoft Visual C++ 2013 Redistributable (x86)窶ヲ Microsoft.VCRedist.2013.x64       12.0.30501.0   12.0.40664.0   winget
26 繧「繝・・繧ー繝ャ繝シ繝峨r蛻ゥ逕ィ縺ァ縺阪∪縺吶€・
PS C:\Users\"ユーザー名">

一方で変数に代入せずに、そのままwinget upgradeコマンドを実行すると正常に表示されます。

変数に入れず直接コマンドを実行すると文字化けしない(5.1や6.0以降で同じ結果)
PS C:\Users\"ユーザー名"> winget upgrade
名前                                             ID                                バージョン     利用可能       ソース
-----------------------------------------------------------------------------------------------------------------------
draw.io 22.1.18                                  JGraph.Draw                       22.1.18        23.0.2         winget
CrystalDiskInfo 8.17.14 (64 ビット)              CrystalDewWorld.CrystalDiskInfo   8.17.14        9.2.2          winget
DBeaver 23.0.2                                   dbeaver.dbeaver                   23.0.2         23.3.4         winget
Docker Desktop                                   Docker.DockerDesktop              4.18.0         4.27.2         winget
Git                                              Git.Git                           2.40.0         2.43.0         winget
Google Chrome                                    Google.Chrome                     121.0.6167.184 122.0.6261.39  winget
Kubernetes - Minikube - A Local Kubernetes Deve… Kubernetes.minikube               1.30.1         1.32.0         winget
Microsoft Visual Studio 2010 Tools for Office R… Microsoft.VSTOR                   10.0.50903     10.0.60912.00  winget
Microsoft Visual C++ 2015 UWP Desktop Runtime P… Microsoft.VCLibs.Desktop.14       14.0.32530.0   14.0.33321.0   winget
Windows ターミナル                               9N0DX20HK701                      1.18.3181.0    1.19.10302.0   winget
SourceTree                                       Atlassian.Sourcetree              3.4.12         3.4.16         winget
Tera Term 4.106                                  TeraTermProject.teraterm          4.106          4.108          winget
Tesseract-OCR - open source OCR engine           UB-Mannheim.TesseractOCR          5.3.1.20230401 5.3.3.20231005 winget
VLC media player                                 VideoLAN.VLC                      3.0.18         3.0.20         winget
WinMerge 2.16.28.0 x64                           WinMerge.WinMerge                 2.16.28.0      2.16.38        winget
PowerShell 7.3.11.0-x64                          Microsoft.PowerShell              7.3.11.0       7.4.1.0        winget
Microsoft Visual C++ 2015-2022 Redistributable … Microsoft.VCRedist.2015+.x64      14.36.32532.0  14.38.33135.0  winget
Oracle VM VirtualBox 7.0.6                       Oracle.VirtualBox                 7.0.6          7.0.14         winget
MySQL Workbench 8.0 CE                           Oracle.MySQLWorkbench             8.0.28         8.0.36         winget
Dell Display Manager                             Dell.DisplayManager               < 2.0          2.2.0.43       winget
Node.js                                          OpenJS.NodeJS.LTS                 18.16.0        20.11.0        winget
Microsoft Windows Desktop Runtime - 6.0.26 (x64) Microsoft.DotNet.DesktopRuntime.6 6.0.26         6.0.27         winget
Microsoft .NET Runtime - 6.0.26 (x64)            Microsoft.DotNet.Runtime.6        6.0.26         6.0.27         winget
Microsoft Visual C++ 2015-2022 Redistributable … Microsoft.VCRedist.2015+.x64      14.34.31938.0  14.38.33135.0  winget
Microsoft .NET SDK 7.0.405 (x64)                 Microsoft.DotNet.SDK.7            7.0.405        7.0.406        winget
Microsoft Visual C++ 2013 Redistributable (x86)… Microsoft.VCRedist.2013.x64       12.0.30501.0   12.0.40664.0   winget
26 アップグレードを利用できます。
PS C:\Users\"ユーザー名">

コマンドを直接実行しても文字化けする場合

もし、wingetコマンドを直接実行した結果がそもそも文字化けしている場合は本記事、解決方法の前にPowerShellウィンドウの設定を見直す必要があります。

規定値で設定されているフォントは日本語対応されていないフォントなので、BIZ UDゴシックMS ゴシック など日本語対応しているフォントに変更する必要があると思われます。
こちらの公式ページでフォントの設定方法が解説されていますので、ご参考にどうぞ。

原因

この現象を調べた結果、PowerShellでコンソール出力する際の文字コードの規定値([console]::OutputEncoding)が Shift JISになっている事が原因のようでした。

回避方法としては、この設定をUTF-8に変更する方法で解決できます。

推測・想像の見解:変数代入 → 変数出力 → 文字化け の流れ < クリックで折りたたみが開く >

コンソール出力の文字コード設定「[console]::OutputEncoding」が厳密にどのようなロジックで文字化けするのか把握できていません。

おそらく、変数に代入されるまでは下記のような流れで文字化けが発生したのだと思います。

  1. コマンド実行
  2. コマンド出力結果がコンソール文字コードに基づきShift JISで表示される
    ここで文字化けが発生
  3. 文字化けで表示された出力結果を変数に代入
  4. 変数をコンソール出力すると文字化け発生!
わからない点:直接コマンドを実行すると文字化けしない < クリックで折りたたみが開く >

文字コードが Shift JIS の状態で変数代入・変数出力で文字化けしたケースに関しては、
[console]::OutputEncodingの設定値が要因となったことで間違いないと思います。

ただ、同じ Shift JIS にもかかわらず“直接コマンドを実行したケースでは、文字化けしなかった”というケースに関しては、
どのようなロジックで正常に出力できているのか把握できていません。

調べても情報が無く何も確証・根拠がない見解ですが、wingetコマンドを直接実行する時にだけ、
コマンド側で文字コードの制御が働き、自動で文字コードの変換が行われているのではと推測しています。
wingetのソースを読めば何かわかる…かも)

解決方法

解決方法を2つ紹介します。まずは、ピンポイントで問題の箇所を変更する方法。

[console]::OutputEncodingを“UTF-8”にする方法

今回、文字化けしてしまったコマンドは、winget upgrade
このwingetコマンドの文字コードは「UTF-8」のようで下記のコマンドで文字コードを「UTF-8」にあわせた結果、文字化けしないで正常に表示できました。

コンソール出力の文字コードをUTF-8に変更する方法
[console]::OutputEncoding = [System.Text.Encoding]::UTF8
設定できる文字コードの一覧 < クリックで折りたたみが開く >

他の文字コードにも変更可能です。

コピー用
[console]::OutputEncoding = [System.Text.Encoding]::"設定したい文字コード"
  • System.Text.Encodingで設定できる文字コードの一覧

    設定可能な文字コード 説明
    ASCII ASCII (7 ビット) 文字セットのエンコーディングを取得します。
    BigEndianUnicode ビッグ エンディアンのバイト順を使用する UTF-16 形式のエンコーディングを取得します。
    Default この .NET 実装の既定のエンコードを取得します。
    * PowerShell 5.x(Desktop) だと Shift JIS。PowerShell 7.x(Core)だとUTF-8
    Latin1 Latin1 文字セット (ISO-8859-1) のエンコードを取得します。
    Unicode リトル エンディアン バイト順を使用する UTF-16 形式のエンコーディングを取得します。
    UTF32 リトル エンディアン バイト順を使用する UTF-32 形式のエンコーディングを取得します。
    UTF7 UTF-7 形式のエンコーディングを取得します。
    UTF8 UTF-8 形式のエンコーディングを取得します。
  • 参考情報
    https://learn.microsoft.com/ja-jp/dotnet/api/system.text.encoding#properties

実際のコマンド結果(コンソール出力の文字コードをUTF-8に変更) < クリックで折りたたみが開く >
6.0以降の環境(5.1でも同じ結果)
# 変更前がShift JISであることを確認
PS C:\Users\"ユーザー名"> [console]::OutputEncoding

EncodingName      : Japanese (Shift-JIS)
WebName           : shift_jis
HeaderName        : iso-2022-jp
BodyName          : iso-2022-jp
Preamble          :
WindowsCodePage   :
IsBrowserDisplay  :
IsBrowserSave     :
IsMailNewsDisplay :
IsMailNewsSave    :
IsSingleByte      : False
EncoderFallback   : System.Text.InternalEncoderBestFitFallback
DecoderFallback   : System.Text.InternalDecoderBestFitFallback
IsReadOnly        : False
CodePage          : 932


PS C:\Users\"ユーザー名">
# コンソールの文字コードをUTF-8に変更
PS C:\Users\"ユーザー名"> [console]::OutputEncoding = [System.Text.Encoding]::UTF8
PS C:\Users\"ユーザー名">
# 設定が反映されているか確認
PS C:\Users\"ユーザー名"> [console]::OutputEncoding

Preamble          :
BodyName          : utf-8
EncodingName      : Unicode (UTF-8)
HeaderName        : utf-8
WebName           : utf-8
WindowsCodePage   : 1200
IsBrowserDisplay  : True
IsBrowserSave     : True
IsMailNewsDisplay : True
IsMailNewsSave    : True
IsSingleByte      : False
EncoderFallback   : System.Text.EncoderReplacementFallback
DecoderFallback   : System.Text.DecoderReplacementFallback
IsReadOnly        : False
CodePage          : 65001


PS C:\Users\"ユーザー名">
# もう一度、コマンドを実行してみて結果、正常に表示されたことを確認
PS C:\Users\"ユーザー名"> $result = (winget upgrade)
PS C:\Users\"ユーザー名">
PS C:\Users\"ユーザー名"> Write-Output $result

   -
   \
   |


   -
   \

名前                                             ID                                バージョン     利用可能       ソース
-----------------------------------------------------------------------------------------------------------------------
draw.io 22.1.18                                  JGraph.Draw                       22.1.18        23.0.2         winget
CrystalDiskInfo 8.17.14 (64 ビット)              CrystalDewWorld.CrystalDiskInfo   8.17.14        9.2.2          winget
DBeaver 23.0.2                                   dbeaver.dbeaver                   23.0.2         23.3.4         winget
Docker Desktop                                   Docker.DockerDesktop              4.18.0         4.27.2         winget
Git                                              Git.Git                           2.40.0         2.43.0         winget
Google Chrome                                    Google.Chrome                     121.0.6167.184 122.0.6261.39  winget
Kubernetes - Minikube - A Local Kubernetes Deve… Kubernetes.minikube               1.30.1         1.32.0         winget
Microsoft Visual Studio 2010 Tools for Office R… Microsoft.VSTOR                   10.0.50903     10.0.60912.00  winget
Microsoft Visual C++ 2015 UWP Desktop Runtime P… Microsoft.VCLibs.Desktop.14       14.0.32530.0   14.0.33321.0   winget
Windows ターミナル                               9N0DX20HK701                      1.18.3181.0    1.19.10302.0   winget
SourceTree                                       Atlassian.Sourcetree              3.4.12         3.4.16         winget
Tera Term 4.106                                  TeraTermProject.teraterm          4.106          4.108          winget
Tesseract-OCR - open source OCR engine           UB-Mannheim.TesseractOCR          5.3.1.20230401 5.3.3.20231005 winget
VLC media player                                 VideoLAN.VLC                      3.0.18         3.0.20         winget
WinMerge 2.16.28.0 x64                           WinMerge.WinMerge                 2.16.28.0      2.16.38        winget
PowerShell 7.3.11.0-x64                          Microsoft.PowerShell              7.3.11.0       7.4.1.0        winget
Microsoft Visual C++ 2015-2022 Redistributable … Microsoft.VCRedist.2015+.x64      14.36.32532.0  14.38.33135.0  winget
Oracle VM VirtualBox 7.0.6                       Oracle.VirtualBox                 7.0.6          7.0.14         winget
MySQL Workbench 8.0 CE                           Oracle.MySQLWorkbench             8.0.28         8.0.36         winget
Dell Display Manager                             Dell.DisplayManager               < 2.0          2.2.0.43       winget
Node.js                                          OpenJS.NodeJS.LTS                 18.16.0        20.11.0        winget
Microsoft Windows Desktop Runtime - 6.0.26 (x64) Microsoft.DotNet.DesktopRuntime.6 6.0.26         6.0.27         winget
Microsoft .NET Runtime - 6.0.26 (x64)            Microsoft.DotNet.Runtime.6        6.0.26         6.0.27         winget
Microsoft Visual C++ 2015-2022 Redistributable … Microsoft.VCRedist.2015+.x64      14.34.31938.0  14.38.33135.0  winget
Microsoft .NET SDK 7.0.405 (x64)                 Microsoft.DotNet.SDK.7            7.0.405        7.0.406        winget
Microsoft Visual C++ 2013 Redistributable (x86)… Microsoft.VCRedist.2013.x64       12.0.30501.0   12.0.40664.0   winget
26 アップグレードを利用できます。
PS C:\Users\"ユーザー名">

PowerShellにおける文字コードまわりの設定を一括変更するFunction

PowerShellの文字コードについてネットで検索した際、こちらの記事で文字コードまわりを一括変更できるFunctionが紹介されていました。

記事内にもあるとおり、このFunctionはPowerShellのDesktop Edition(5.x以前)の環境を想定しているFunctionでした。

PowerShellのバージョンによる文字コードの変化点

具体的に説明すると、PowerShell のCore Edition(6.0以降)の環境では、[System.Text.Encoding]::Defaultの結果がsjisではなくutf8となる為、
意図する動作と異なる結果となりました。

元記事を参考にさせて頂き、PowerShell Coreでも使用できるFunctionを作成してみました。

PowerShellの文字コードまわりを一括変更するFunction
Function SetPsOutputEncoding {
    Param (
        [System.String]$charcode = 'reset_encoding'
    )

    switch ($charcode) {
        # 文字エンコードをUTF8に設定する
        'utf8' {
            $PSDefaultParameterValues['*:Encoding'] = 'utf8'
            $global:OutputEncoding = [System.Text.Encoding]::UTF8
            [console]::OutputEncoding = [System.Text.Encoding]::UTF8
        }
        # 文字エンコードをShift JIS(SJIS)に設定する
        'sjis' {
            # $PSDefaultParameterValues['*:Encoding'] = 'default'について
            #   この設定はCore以外(5.1以前)の環境でのみShift JISで設定される。
            #   Core環境のデフォルト値は、UTF-8でありUTF-8で設定されてしまう。
            #   また、Shift JISのパラメーターも存在しない為、Core環境でShift JISの設定は不可となる。
            $PSDefaultParameterValues['*:Encoding'] = 'default'
            $global:OutputEncoding = [System.Text.Encoding]::GetEncoding('shift_jis')
            [console]::OutputEncoding = [System.Text.Encoding]::GetEncoding('shift_jis')
        }
        # 文字エンコードをASCIIに設定する
        'ascii' {
            $PSDefaultParameterValues.Remove('*:Encoding')
            $global:OutputEncoding = [System.Text.Encoding]::ASCII
            [console]::OutputEncoding = [System.Text.Encoding]::ASCII
        }
        # デフォルトパラメータの文字エンコード指定を解除する
        'rm_encoding' {
            $PSDefaultParameterValues.Remove('*:Encoding')
        }
        # 文字エンコード設定を初期状態に戻す
        'reset_encoding' {
            $PSDefaultParameterValues.Remove('*:Encoding')

            If ($PSVersionTable.PSEdition -eq 'Core') {
                # Core の場合
                $global:OutputEncoding = [System.Text.Encoding]::UTF8
                [console]::OutputEncoding = [System.Text.Encoding]::GetEncoding('shift_jis')
            }
            else {
                # Core 以外の場合(PowerShell 5.1 以前)
                $global:OutputEncoding = [System.Text.Encoding]::ASCII
                [console]::OutputEncoding = [System.Text.Encoding]::GetEncoding('shift_jis')
            }
        }
    }
}

# 実行テスト
SetPsOutputEncoding 'utf8'
実際のコマンド結果(文字コード設定の一括変更) < クリックで折りたたみが開く >
6.0以降の環境(5.1でも同じ結果)
PS C:\Users\"ユーザー名"> Function SetPsOutputEncoding {
>>     Param (
>>         [System.String]$charcode = 'reset_encoding'
>>     )
>>
>>     switch ($charcode) {
>>         'utf8' {
>>             $PSDefaultParameterValues['*:Encoding'] = 'utf8'
>>             $global:OutputEncoding = [System.Text.Encoding]::UTF8
>>             [console]::OutputEncoding = [System.Text.Encoding]::UTF8
>>         }
>>         'sjis' {
>>             $PSDefaultParameterValues['*:Encoding'] = 'default'
>>             $global:OutputEncoding = [System.Text.Encoding]::GetEncoding('shift_jis')
>>             [console]::OutputEncoding = [System.Text.Encoding]::GetEncoding('shift_jis')
>>         }
>>         'ascii' {
>>             $PSDefaultParameterValues.Remove('*:Encoding')
>>             $global:OutputEncoding = [System.Text.Encoding]::ASCII
>>             [console]::OutputEncoding = [System.Text.Encoding]::ASCII
>>         }
>>         'rm_encoding' {
>>             $PSDefaultParameterValues.Remove('*:Encoding')
>>         }
>>         'reset_encoding' {
>>             $PSDefaultParameterValues.Remove('*:Encoding')
>>
>>             If ($PSVersionTable.PSEdition -eq 'Core') {
>>                 $global:OutputEncoding = [System.Text.Encoding]::UTF8
>>                 [console]::OutputEncoding = [System.Text.Encoding]::GetEncoding('shift_jis')
>>             }
>>             else {
>>                 $global:OutputEncoding = [System.Text.Encoding]::ASCII
>>                 [console]::OutputEncoding = [System.Text.Encoding]::GetEncoding('shift_jis')
>>             }
>>         }
>>     }
>> }
PS C:\Users\"ユーザー名">
PS C:\Users\"ユーザー名"> SetPsOutputEncoding 'utf8'
PS C:\Users\"ユーザー名">
PS C:\Users\"ユーザー名"> $result = (winget upgrade)
PS C:\Users\"ユーザー名">
PS C:\Users\"ユーザー名"> Write-Output $result

   -
   \


   -
   \

名前                                             ID                                バージョン     利用可能       ソース
-----------------------------------------------------------------------------------------------------------------------
draw.io 22.1.18                                  JGraph.Draw                       22.1.18        23.0.2         winget
CrystalDiskInfo 8.17.14 (64 ビット)              CrystalDewWorld.CrystalDiskInfo   8.17.14        9.2.2          winget
DBeaver 23.0.2                                   dbeaver.dbeaver                   23.0.2         23.3.4         winget
Docker Desktop                                   Docker.DockerDesktop              4.18.0         4.27.2         winget
Git                                              Git.Git                           2.40.0         2.43.0         winget
Google Chrome                                    Google.Chrome                     121.0.6167.184 122.0.6261.39  winget
Kubernetes - Minikube - A Local Kubernetes Deve… Kubernetes.minikube               1.30.1         1.32.0         winget
Microsoft Visual Studio 2010 Tools for Office R… Microsoft.VSTOR                   10.0.50903     10.0.60912.00  winget
Microsoft Visual C++ 2015 UWP Desktop Runtime P… Microsoft.VCLibs.Desktop.14       14.0.32530.0   14.0.33321.0   winget
Windows ターミナル                               9N0DX20HK701                      1.18.3181.0    1.19.10302.0   winget
SourceTree                                       Atlassian.Sourcetree              3.4.12         3.4.16         winget
Tera Term 4.106                                  TeraTermProject.teraterm          4.106          4.108          winget
Tesseract-OCR - open source OCR engine           UB-Mannheim.TesseractOCR          5.3.1.20230401 5.3.3.20231005 winget
VLC media player                                 VideoLAN.VLC                      3.0.18         3.0.20         winget
WinMerge 2.16.28.0 x64                           WinMerge.WinMerge                 2.16.28.0      2.16.38        winget
PowerShell 7.3.11.0-x64                          Microsoft.PowerShell              7.3.11.0       7.4.1.0        winget
Microsoft Visual C++ 2015-2022 Redistributable … Microsoft.VCRedist.2015+.x64      14.36.32532.0  14.38.33135.0  winget
Oracle VM VirtualBox 7.0.6                       Oracle.VirtualBox                 7.0.6          7.0.14         winget
MySQL Workbench 8.0 CE                           Oracle.MySQLWorkbench             8.0.28         8.0.36         winget
Dell Display Manager                             Dell.DisplayManager               < 2.0          2.2.0.43       winget
Node.js                                          OpenJS.NodeJS.LTS                 18.16.0        20.11.0        winget
Microsoft Windows Desktop Runtime - 6.0.26 (x64) Microsoft.DotNet.DesktopRuntime.6 6.0.26         6.0.27         winget
Microsoft .NET Runtime - 6.0.26 (x64)            Microsoft.DotNet.Runtime.6        6.0.26         6.0.27         winget
Microsoft Visual C++ 2015-2022 Redistributable … Microsoft.VCRedist.2015+.x64      14.34.31938.0  14.38.33135.0  winget
Microsoft .NET SDK 7.0.405 (x64)                 Microsoft.DotNet.SDK.7            7.0.405        7.0.406        winget
Microsoft Visual C++ 2013 Redistributable (x86)… Microsoft.VCRedist.2013.x64       12.0.30501.0   12.0.40664.0   winget
26 アップグレードを利用できます。
PS C:\Users\"ユーザー名">

別の記事で文字コードの設定情報をPowerShellウィンドウのタイトルに反映するFunctionも作成しています。
文字コードを変更した後、設定内容をタイトルに表示させたい方は、下記を参考に設定してください。
https://zenn.dev/haretokidoki/articles/67788ca9b47b27

まとめ

  • 事象
    winget updateコマンドを変数に入れてからコンソール表示すると文字化けが発生。

  • 原因
    コンソール出力時の文字コード([console]::OutputEncoding)の規定値Shift JISとなっていて、wingetコマンドで表示されるUTF-8と食い違っていたから。

  • 解決方法
    コンソール出力時の文字コード([console]::OutputEncoding)の設定をUTF-8に変更する。

    コンソール出力の文字コードをUTF-8に変更する方法
    [console]::OutputEncoding = [System.Text.Encoding]::UTF8
    

関連記事

https://haretokidoki-blog.com/pasocon_powershell-startup/
https://zenn.dev/haretokidoki/articles/7e6924ff0cc960
https://zenn.dev/haretokidoki/articles/fb6830f9155de5

GitHubで編集を提案

Discussion