Windowsのパッケージマネージャ(winget)を使ってみる
WindowsにもLinuxのaptやyumといったものと似たようなコマンドラインで実行できるパッケージマネージャが実装されていました。
前の記述のままでは動かなくなっていた(2023/06/04)ので、修正しました。
・Microsoft.UI.Xamlのインストールを追記。
・Pythonパッケージ名を修正
また、前の記述のままでは動かなくなっていた(2024/04/15時点)ので、修正しました。
・Microsoftのサイトのリンクに変更
winget
wingetの使い方は、他のパッケージマネージャツールとほとんど変わらないようです。
searchで検索して、installでインストール、です。
https://docs.microsoft.com/ja-jp/windows/package-manager/
Sandboxでのwinget
実際に使える場面としては、Sandboxで環境を作る際にバッチファイルで作成しやすいとかですね。
前の記事(Windows Sandbox設定)では、インストーラをダウンロードしてオプション指定してサイレントインストールをしていました。
wingetに置き換えるとスマートに記述できると思うので作成しようとしたのですが、Sandboxにはwingetはインストールされていません。
Sandboxで使うためには、wingetをインストールしてから、他のアプリをwingetでインストールという形になります。
また、VCLibsも必要とのことなので、それもインストールが必要となります。
wingetのインストール
VCLibsのパッケージのURLは以下のページから取得します。
C++ ランタイム フレームワーク パッケージのデスクトップ ブリッジ
以下のページからPackage ManagerのパッケージのURLを取得します。
https://github.com/microsoft/winget-cli/releases/
Windows 10 (1809+).同等のパッケージが現時点(2022/02/27)のLatestなので、ここからURLを取得します。
以前の記述だけでは、wingetインストールでエラーとなります。
フレームワーク"Microsoft.UI.Xaml.2.7"が必要なようです。
実際のコマンドは以下のようになります。
Microsoftのサイトのリンクに変更
wingetでの環境構築
wingetをコマンドラインで実行する場合には、以下のようなコマンドになります。
winget install Microsoft.VisualStudioCode
winget install OpenJS.NodeJS.LTS
winget install Python.Python.3.8
Jsonファイルでまとめてimportもできます。
詳細は公式import コマンド (winget)を参照して下さい。
インストール対象のアプリに関しては、ホスト側のWindowsのインストールパッケージを参考にしたいため、一旦、チェックします。
以下のコマンドでインストール済みパッケージがファイルに出力されます。
winget export export.json
import時のコマンドは以下のようになります。
winget import export.json
Sandboxファイル作成
これまでの情報を元にSnadbox構築ファイルを作っていきます。
定番のソフトと開発用も含めて以下のパッケージをインストール対象としたSndbox起動用ファイルを作成します。
・VSCode
・Node.js
・Python
・Git
・7zip
パッケージの指定方法は、exportしたファイルを参考にしてjsonファイルを作成します。
packages.json
まずは、import対象ファイルをJSONファイルにまとめます。
{
"$schema": "https://aka.ms/winget-packages.schema.2.0.json",
"Sources": [
{
"Packages": [
{
"PackageIdentifier": "Microsoft.VisualStudioCode"
},
{
"PackageIdentifier": "OpenJS.NodeJS.LTS"
},
{
"PackageIdentifier" : "Python.Python.3.8"
},
{
"PackageIdentifier": "Git.Git"
},
{
"PackageIdentifier": "7zip.7zip.Alpha.msi"
}
],
"SourceDetails": {
"Argument": "https://winget.azureedge.net/cache",
"Identifier": "Microsoft.Winget.Source_8wekyb3d8bbwe",
"Name": "winget",
"Type": "Microsoft.PreIndexed.Package"
}
}
]
}
setup.ps1
環境設定用のPowerShellスクリプトを作成します。
# wingetインストール
$progressPreference = 'silentlyContinue'
Write-Information "Downloading WinGet and its dependencies..."
Invoke-WebRequest -Uri https://aka.ms/getwinget -OutFile Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle
Invoke-WebRequest -Uri https://aka.ms/Microsoft.VCLibs.x64.14.00.Desktop.appx -OutFile Microsoft.VCLibs.x64.14.00.Desktop.appx
Invoke-WebRequest -Uri https://github.com/microsoft/microsoft-ui-xaml/releases/download/v2.8.6/Microsoft.UI.Xaml.2.8.x64.appx -OutFile Microsoft.UI.Xaml.2.8.x64.appx
Add-AppxPackage Microsoft.VCLibs.x64.14.00.Desktop.appx
Add-AppxPackage Microsoft.UI.Xaml.2.8.x64.appx
Add-AppxPackage Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle
# wingetでimport
cd C:\Users\WDAGUtilityAccount\Desktop\SandboxScripts\
winget import packages.json
setup.cmd
環境設定用のPowerShellスクリプトを呼び出すスクリプトを作成します。
"%SystemRoot%\System32\\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command Start-Process -wait 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe' C:\Users\WDAGUtilityAccount\Desktop\SandboxScripts\setup.ps1"
setup.wsb
Sandbox起動用ファイルを作成します。
<Configuration>
<MappedFolders>
<MappedFolder>
<HostFolder>C:\SandboxScripts</HostFolder>
<ReadOnly>true</ReadOnly>
</MappedFolder>
</MappedFolders>
<LogonCommand>
<Command>C:\Users\WDAGUtilityAccount\Desktop\SandboxScripts\setup.cmd</Command>
</LogonCommand>
</Configuration>
上記の設定は、packages.json/setup.ps1/setup.cmdはC:\SandboxScriptsに格納されている前提です。
作成したsetup.wsbファイルをダブルクリックでSandboxが起動され、環境設定まで実行されます。