Winget によるアプリの更新確認スクリプトがうまく動作しない

森田 真生 20 評価のポイント
2024-03-21T07:07:28.91+00:00

返信してくださった対応方法や、こちらでネット検索し見つけた対応方法など試した場合は追記していきます。

デバイスに指定したアプリの最新版がインストールされているか確認するps1 スクリプトを作成中です。
デバイスによらず確認でき(OS 以外不問)、最新版の情報を自動で取得できるものにしたいです。

そこでWinget による更新確認を検討し、次のps1 スクリプトを作成しました。

$AppName = "Google.Chrome"
$UpgradeList = winget upgrade
Write-Host $UpgradeList.GetType()
if ($UpgradeList.Contains($AppName)) {
    echo Latest_Version_isnot_Installed
}
else {
    echo Latest_Version_is_Installed
}

しかし、最新版がインストールされていないにもかかわらず、Latest_Version_is_Installed が出力される始末
各変数を出力しても問題があるようには見えません。

また、Winget の出力結果を格納する変数$UpgradeList に対して | Select-Object Name などによって、出力結果の一部のみを抽出しようとしてもなぜかうまくいかず...

問題点と解決法を教えてください

Windows
Windows
パーソナル コンピューター、タブレット、ノート PC、電話、モノのインターネット デバイス、自己完結型 Mixed Reality ヘッドセット、大規模なコラボレーション画面、その他のデバイスにわたって実行される Microsoft オペレーティング システムのファミリ。
80 件の質問
PowerShell
PowerShell
コマンドライン シェルと関連するスクリプト言語で構成される Microsoft タスク自動化および構成管理フレームワークのファミリ。
23 件の質問
{count} 件の投票

承認済みの回答
  1. Ian Xue 37,621 評価のポイント Microsoft ベンダー
    2024-03-21T10:14:26.01+00:00

    こんにちわ。

    containsメソッドの代わりに-matchを使用してください。

    $AppName = "Google.Chrome" 
    $UpgradeList = winget upgrade 
    Write-Host $UpgradeList.GetType() 
    if ($UpgradeList -match $AppName)) {     
    	echo Latest_Version_isnot_Installed 
    } 
    else {     
    	echo Latest_Version_is_Installed 
    }
    

    Ian Xue


    回答が参考になった場合は、「回答を承認する」をクリックし、アップボートしてください。

    1 人がこの回答が役に立ったと思いました。

0 件の追加の回答

並べ替え方法: 最も役に立つ

お客様の回答

回答は、質問作成者が [承諾された回答] としてマークできます。これは、ユーザーが回答が作成者の問題を解決したことを知るのに役立ちます。