🎁

複数IDを検索キーにwinget showの結果を抽出し表示するPowerShellのFunction

2024/05/13に公開

概要

こちらでソースが winget もしくは msstore のアプリ(ソフトウェア)に再インストールする作業を実施しまいた。

こちらのGitHubのIssueでもあがっていますが、
不具合により winget search では表示されないMicrosoft Store製のアプリが存在しました。

そんな winget search では検索できないMicrosoft Store版のアプリは、 winget show で取得可能な為、
コマンド結果から必要な情報だけ抽出できるFunctionを作成しました。

この記事のターゲット

  • Windows ユーザーの方
  • PowerShell ユーザーの方
  • 複数IDを検索キーwinget show の結果を確認したい方

自作したFunction

今回、作成したFunctionでは、winget search の結果をもとに 「アプリ名・ID・ソース」 の3つを抽出し表示するという内容です。
場合によってはアプリ名で検索する事も考えられます。使用用途に応じてコードを変更してください。

自作したFunction「Write-WingetShow」
# Function
Function Write-WingetShow {
    Param (
        [System.String[]]$targetIds
    )
    # 抽出対象の文字列を指定
    [System.String]$HitMessage = '見つかりました '
    [System.String]$InstallerType = '  インストーラーの種類: '

    # 文字コードをUTF-8に変更
    [console]::OutputEncoding = [System.Text.Encoding]::UTF8

    # コマンド結果から抽出しアプリ名・ID・ソースのみを表示
    foreach ($id in $targetIds) {
        [System.String[]]$appInfo = (winget show --id $id)
        # 検索結果あり
        if ($appInfo -match $HitMessage) {
            $appNameAndId = $appInfo | Select-String "$HitMessage.*" | ForEach-Object {
                $_.Matches[0].Value -replace "$HitMessage", ''
            }
            $appSource = $appInfo | Select-String "$InstallerType.*" | ForEach-Object {
                $_.Matches[0].Value -replace "$InstallerType", ''
            }
            Write-Host "$appNameAndId [$appSource]"
        }
        # 検索結果なし
        else {
            Write-Warning "見つかりませんでした。ID: [$id]"
            # 中断する場合はコメントアウト解除
            #return
        }
    }
}

# 検索対象のIDを配列で指定
$searchIds = @(
	#対象のID
)

# Function の実行
Write-WingetShow $searchIds
実際に実行した結果

私の環境で実行した際の結果を表示。

実際に実行した結果
PS C:\Users\"ユーザー名"> # 検索対象のIDを配列で指定
>> $searchIds = @(
>>     'Microsoft.Edge',
>>     '1234567890AB',
>>     'XPFFZHVGQWWLHB',
>>     'Microsoft.VCLibs.Desktop.14'
>> )
>> # Function の実行
>> Write-WingetShow $searchIds
Microsoft Edge [Microsoft.Edge] [msi]
警告: 見つかりませんでした。ID: [1234567890AB]
OneNote [XPFFZHVGQWWLHB] [exe]
Microsoft Visual C++ 2015 UWP Desktop Runtime Package [Microsoft.VCLibs.Desktop.14] [msix]
PS C:\Users\"ユーザー名">

まとめ

  • このFunctionを使用することでwinget searchで表示されないMicrosoft Store版アプリの情報を複数、取得できるようになった!
  • 表示言語が日本語ではない場合、$HitMessage = '見つかりました '$InstallerType = ' インストーラーの種類: ' を見直す必要あり

関連記事

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

GitHubで編集を提案

Discussion