wingetコマンドで一括インストールするときに特定のユーザーではなくマシンインストールする
こんにちは、ひらたつです。
弊社では業務で使用する PC のセットアップ時には、必要なソフトウェアを一括インストールしています。
一括インストールの方法は以下です。
- インストールしたいアプリケーションが記載された JSON ファイルを準備する(以下では対象の JSON ファイルを
winget.json
としています) - コマンドプロンプトを管理者権限で起動し、ダウンロード先のファイルパスに移動して、
winget import [JSON ファイル]
を実行する
{
"$schema" : "https://aka.ms/winget-packages.schema.2.0.json",
"CreationDate" : "2022-01-29T15:37:38.042-00:00",
"Sources" :
[
{
"Packages" :
[
{
"PackageIdentifier" : "Microsoft.VisualStudio.2022.Community"
},
{
"PackageIdentifier" : "7zip.7zip"
},
...
...
],
"SourceDetails" :
{
"Argument" : "https://winget.azureedge.net/cache",
"Identifier" : "Microsoft.Winget.Source_8wekyb3d8bbwe",
"Name" : "winget",
"Type" : "Microsoft.PreIndexed.Package"
}
}
],
"WinGetVersion" : "1.1.13405"
}
ただ、上記の方法では、サインインしているユーザー以外にはインストールされないソフトウェアがありました。
winget.json
の内容を変更することで、サインインしているユーザーに関係なくマシンインストールできると分かりました。
今回はマシンインストールする方法を紹介します。
想定環境
- Windows 11 Enterprise 22H2
マシンインストールする方法
scope の動作は、パッケージのインストール対象として、現在のユーザーとマシン全体のどちらが選択されるかに影響します。 対応するパラメーターは —scope で、同じ値 (user または machine) が使用されます。 パッケージのインストール スコープに関する既知の問題を参照してください。
"installBehavior": { "preferences": { "scope": "user" } },
scope - settings コマンド | Microsoft Learn
上記から、Scope
に machine
を指定すればよいと分かります。
ただ、では実際にどこで Scope
を指定すればよいかが分かりませんでしたが、いろいろ試してみて以下の部分に Scope
の指定を入れることでマシンインストールできました。
{
"$schema" : "https://aka.ms/winget-packages.schema.2.0.json",
"CreationDate" : "2022-01-29T15:37:38.042-00:00",
"Sources" :
[
{
"Packages" :
[
{
"PackageIdentifier" : "Microsoft.VisualStudio.2022.Community",
"Scope": "machine" },
{
"PackageIdentifier" : "7zip.7zip",
"Scope": "machine" },
...
...
],
"SourceDetails" :
{
"Argument" : "https://winget.azureedge.net/cache",
"Identifier" : "Microsoft.Winget.Source_8wekyb3d8bbwe",
"Name" : "winget",
"Type" : "Microsoft.PreIndexed.Package"
}
}
],
"WinGetVersion" : "1.1.13405"
}
上記の例ではソフトウェアを 2 つしか指定していませんが、必要に応じてインストールしたいソフトウェアを増やしてください。
最後に
対象 PC にソフトウェアを一括でマシンインストールする方法を紹介しました。
PC のセットアップは手間がかかる作業ですので、少しでも効率化いただけると幸いです。
では、次の記事でお会いしましょう。