かつて山市良と呼ばれたおじさんのブログ

セイテクエンジニアのブログ  かつて山市良と呼ばれたおじさんのブログ  vol.241 自動化スクリプト ─ アプリ(Edge)の更新|Hyper-V 小技・裏技集

 

 

vol.241 自動化スクリプト ─ アプリ(Edge)の更新|Hyper-V 小技・裏技集

2026年10月13日配信
2026年10月13日更新
執筆者:山内 和朗

 「Hyper-V小技・裏技集」シリーズでは、Hyper-Vの仮想環境を利用していて、知っていると便利な小技や裏技を紹介します。vol.237では、PowerShell DirectとCopy-VMFileの使いこなしについて説明しました。これらを活用した、VMのゲスト側タスクの自動化例を紹介しています。

 

※ここで紹介するサンプルコードは、PowerShellスクリプト(.ps1)内に記述することを想定しています。-ErrorAction Stopパラメーターは、エラー時にスクリプト全体を停止します。PowerShellウィンドウに入力して実行した場合は、エラーが発生しても以後のスクリプトは停止しないため、別のエラーが発生する可能性があることに注意してください。

 

VMゲストのMicrosoft Edgeバージョンをホストから更新

 

 前回は、Hyper-Vホスト側に用意したWindows Update用のスクリプト(WUA_SearchDownloadInstall.ps1)をCopy-VMFileを使用してVMのゲストにコピーし、Invoke-Commandを使用してリモート実行、更新を完了するまでの再起動を含めVMのシャットダウンまで行う自動化スクリプトを紹介しました。PowerShellでスクリプト化できれば、Invoke-Commandを使用した管理タスクの自動化は簡単です。任意のアプリケーションの更新についても、同じ方法で自動化できるでしょう。スクリプトが複雑になる場合は、Windows Updateの例のように、ホスト側にスクリプトファイル(.ps1)を用意して、Copy-VMFileでVMのゲストにコピーしてから実行すればよいのです。

 

 今回は、VMのゲストのWindowsやWindows Server(デスクトップエクスペリエンス)に標準搭載されているMicrosoft Edgeの更新をスクリプト化してみます。PowerShellでMicrosoft Edgeを更新する方法については、以下のMicrosoft Learnドキュメントで具体的なコマンドラインが説明されています。

Windows 10 更新プログラムを適用した Microsoft Edge の展開|Microsoft Edge(Microsoft Learn)

Start-Process -FilePath "C:\Program Files (x86)\Microsoft\EdgeUpdate\MicrosoftEdgeUpdate.exe" -argumentlist "/silent /install appguid={56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}&appname=Microsoft%20Edge&needsadmin=True"

 

 現在インストールされているMicrosoft Edteのバージョン情報を取得するには、次のいずれかのコマンドラインを使用します。なお、2つ目の方法は更新直後だと古い情報を返すことがあるので、1つ目のレジストリから取得する方(Get-Item...)をお勧めします。

(Get-Item "${env:ProgramFiles(x86)}\Microsoft\Edge\Application\msedge.exe").VersionInfo.ProductVersion
または
(Get-AppXPackage Microsoft.MicrosoftEdge.Stable).Version

 

 これらのコマンドラインを組み合わせて(以下のコードの青字の部分)、Invoke-CommandでVMに対してリモート実行すれば、VMのコンソールに接続することなく、Microsoft Edgeを最新バージョンに更新できます(画面1)。

 

#$cred = Get-Credential
# または
#(事前に Get-Credential | Export-Clixml $HOME\vm01-cred.xml でXMLを作成)
#$cred = Import-Clixml $HOME\vm01-cred.xml
# または
$username = ".\Administrator"
$password = "P@ssw0rd!"
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force
$cred = [PSCredential]::new($username, $securePassword)

$vmName = "vm01"

Invoke-Command -VMName $vmName -Credential $cred -ScriptBlock {

$before = (Get-Item "${env:ProgramFiles(x86)}\Microsoft\Edge\Application\msedge.exe").VersionInfo.ProductVersion
#https://learn.microsoft.com/ja-jp/deployedge/deploy-edge-with-windows-10-updates
Start-Process -FilePath "${env:ProgramFiles(x86)}\Microsoft\EdgeUpdate\MicrosoftEdgeUpdate.exe" -ArgumentList "/silent /install appguid={56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}&appname=Microsoft%20Edge&needsadmin=True" -Wait
$after = (Get-Item "${env:ProgramFiles(x86)}\Microsoft\Edge\Application\msedge.exe").VersionInfo.ProductVersion
"Edge: $before -> $after"

}

(プレーンテキストでダウンロード/表示)

※ この例のようにスクリプト内に平文パスワードを記述することは推奨されません。平文パスワードを排除する方法については、vol.238の「スクリプトから平文パスワードを排除する簡単な方法」を参照してください。

 

画面1 Hyper-VホストからVMのMicrosoft Edgeを更新するPowerShellスクリプトの実行例
画面1 Hyper-VホストからVMのMicrosoft Edgeを更新するPowerShellスクリプトの実行例

 

 もう少し凝ってみましょう。以下の連載で紹介したサンプルスクリプト「get-msedgebiz.ps1」は、Microsoft Edgeのリリースに関する方法を提供するMicrosoft EdgeのAPI「https://edgeupdates.microsoft.com/api/products?view=enterprise」を使用したスクリプトであり、指定したチャネル(例: -Channel Stable)、プラットフォーム(例: -Platform Windows)、アーキテクチャ(例: -Architecture x64)、バージョン(例: -Version Current《最新》)のダウンロードURLを含む詳細情報を取得できます。このサンプルスクリプトを組み合わせれば、最新バージョンがインストールされているかどうかを確認し、必要であれば更新するということができます(画面2、画面3)。

 

メモ. Microsoft Edgeインストーラーのダウンロード自動化の可能性を探る

 

#$cred = Get-Credential
# または
#(事前に Get-Credential | Export-Clixml $HOME\vm01-cred.xml でXMLを作成)
#$cred = Import-Clixml $HOME\vm01-cred.xml
# または
$username = ".\Administrator"
$password = "P@ssw0rd!"
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force
$cred = [PSCredential]::new($username, $securePassword)

$vmName = "vm01"

# https://www.say-tech.co.jp/contents/blog/yamanxworld/2025memo56
$edgecurrent = (.\get-msedgebiz.ps1 -Channel "Stable" -Platform "Windows" -Architecture "x64" -Version "Current").Version

$before = Invoke-Command -VMName $vmName -Credential $cred -ScriptBlock {

$before = (Get-ItemProperty "${env:ProgramFiles(x86)}\Microsoft\Edge\Application\msedge.exe").VersionInfo.ProductVersion
return $before

}

if ($before -eq $edgecurrent) {
    Write-Host "Microsoft Edge: $($edgecurrent) already up to date."
} else {
    $after = Invoke-Command -VMName $vmName -Credential $cred -ScriptBlock {

#https://learn.microsoft.com/ja-jp/deployedge/deploy-edge-with-windows-10-updates
Start-Process -FilePath "${env:ProgramFiles(x86)}\Microsoft\EdgeUpdate\MicrosoftEdgeUpdate.exe" -ArgumentList "/silent /install appguid={56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}&appname=Microsoft%20Edge&needsadmin=True" -Wait
$after = (Get-ItemProperty "${env:ProgramFiles(x86)}\Microsoft\Edge\Application\msedge.exe").VersionInfo.ProductVersion
return $after

    }
    if ($after -eq $edgecurrent) {
        Write-Host "Microsoft Edge: $($before) -> $($after)"
    } else {
        Write-Host "Microsoft Edge: $($before) -> $($after) Something went wrong, try again!"
    }
}

(プレーンテキストでダウンロード/表示)

※ この例のようにスクリプト内に平文パスワードを記述することは推奨されません。平文パスワードを排除する方法については、vol.238の「スクリプトから平文パスワードを排除する簡単な方法」を参照してください。

 

画面2 最新バージョンより古い場合は更新

画面2 最新バージョンより古い場合は更新

 

画面3 既に最新バージョンの場合は更新しない 

画面3 既に最新バージョンの場合は更新しない

 

リファレンス(Microsoft Learn):

Invoke-Command(PowerShell)|  Export-Clixml(PowerShell)| Import-Clixml(PowerShell)


Hyper-V 小技・裏技集 (1)|(2)|(3)|(4)|(5)|(6)|(7)|(8)|(9)|(10)

blog_yamanxworld_subscribe

blog_yamanxworld_comment

blog_yamanxworld_WP_ws2025

最新記事