Alecriar Studioの中の人の技術メモ

横浜の個人事業主が日々の技術的な情報をつづります

PowerShellを使ってWindows 10のアプリを管理をしよう

PowerShellでのパッケージ管理 Package Management

前回の記事ではChocolateyを使用し、PowerShellコマンドラインからWindowsのアプリを管理する(パッケージ管理)方法を解説しました。では、WindowsそのものにはPowerShellを使ってパッケージ管理する方法はないのでしょうか。

実はWindows 10から、標準でPowerShellからパッケージを操作することができるようになりました。その名も Package Management です。それだけでなく、既存の Chocolatey や NuGet といったサードパーティーをパッケージプロバイダという形で取り込み、Package Management の下で一元的に取り扱いできるようになりました。今回は Package Management の設定と、パッケージの操作まで解説します。

Package Management を使用するための前準備

PowerShellのデフォルトでは、外部のスクリプトを実行するのは許可されていません。そこでまずスクリプトの実行ポリシーを変更します。 Windowsキー + X を押し、Windows PowerShell (管理者)(A) を選択し管理者モードPowerShellを起動し、そこで以下のコマンドを実行します。

PS C:\> Set-ExecutionPolicy RemoteSigned

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (https://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): Y

設問にはYと打ってEnterを押します。

パッケージプロバイダの確認・インストール

現在インストールされているのパッケージプロバイダの一覧を確認します。

PS C:\> Get-PackageProvider

Name                     Version          DynamicOptions
----                     -------          --------------
msi                      3.0.0.0          AdditionalArguments
msu                      3.0.0.0
PowerShellGet            1.0.0.1          PackageManagementProvider, Type, Scope, AllowClobber, SkipPublisherCheck, InstallUpdate, NoPathUpdate, Fi...
Programs                 3.0.0.0          IncludeWindowsInstaller, IncludeSystemComponent

現状ではパッケージの数ではChocolateyが最も多いので、Chcolateyをパッケージプロバイダとしてインストールします。

PS C:\> Get-PackageProvider Chocolatey

プロバイダー 'chocolatey v2.8.5.130' がインストールされていません。
chocolatey は、https://onegetcdn.azureedge.net/providers/ChocolateyPrototype-2.8.5.130.exe から手動でダウンロードしてインストールすることができます。
PackageManagement で chocolatey を自動的にダウンロードしてインストールしますか?
[Y] はい(Y)  [N] いいえ(N)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"): Y

設問にはYと打ってEnterを押します。正常にChocolateyがインストールされると以下が表示されます。

Name                     Version          DynamicOptions
----                     -------          --------------
Chocolatey               2.8.5.130        SkipDependencies, ContinueOnFailure, ExcludeVersion, ForceX86, PackageSaveMode, FilterOnTag, Contains, Al...

もう一度パッケージプロバイダを一覧表示すれば、Chocolateyが新たに加わっていることを確認できます。

PS C:\> Get-PackageProvider

Name                     Version          DynamicOptions
----                     -------          --------------
Chocolatey               2.8.5.130        SkipDependencies, ContinueOnFailure, ExcludeVersion, ForceX86, PackageSaveMode, FilterOnTag, Contains, AllowPrereleaseVersions,...
msi                      3.0.0.0          AdditionalArguments
msu                      3.0.0.0
Programs                 3.0.0.0          IncludeWindowsInstaller, IncludeSystemComponent

今後はChocolateyに含まれるパッケージも Package Management のコマンドで操作できるようになりました。

パッケージの操作

パッケージの検索

インストールできるパッケージを検索し、候補を表示します。以下の例は Firefox を検索したときの例です。

PS C:\> Find-Package -Name Firefox

プロバイダー 'nuget v2.8.5.208' がインストールされていません。
nuget は、https://onegetcdn.azureedge.net/providers/Microsoft.PackageManagement.NuGetProvider-2.8.5.208.dll
から手動でダウンロードしてインストールすることができます。
PackageManagement で nuget を自動的にダウンロードしてインストールしますか?
[Y] はい(Y)  [N] いいえ(N)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"): Y

Name                           Version          Source           Summary
----                           -------          ------           -------
Firefox                        70.0.1           chocolatey       Bringing together all kinds of awesomeness to make browsing better ...

途中で nuget を入れるかどうかを聞いてきていますが、 NuGetもまたパッケージプロバイダの一種です。Firefoxをインストールする場合はこれを先に入れる必要があります。

パッケージのインストール

パッケージの検索で該当するパッケージが見つかれば、以下のコマンドでパッケージのインストールを行います。

PS C:\> Install-Package Firefox

パッケージは、信頼済みとマークされていないパッケージ ソースから取得されています。
'chocolatey' からソフトウェアをアンインストールしますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): Y

Name                           Version          Source           Summary
----                           -------          ------           -------
Firefox                        70.0.1           chocolatey       Bringing together all kinds of awesomeness to make browsing better for you

インストール済みパッケージの確認

以下のコマンドでインストールされているかどうかを確認します。

PS C:\> Get-Package Firefox

Name                           Version          Source                           ProviderName
----                           -------          ------                           ------------
Firefox                        70.0.1           C:\Chocolatey\lib\Firefox.70.... Chocolatey

また、単に引数なしで実行すると現在インストールされているパッケージの一覧がでます。

PS C:\> Get-Package

この場合、Chocolatelyのパッケージだけでなく、Windows標準インストーラでインストールされたパッケージも合わせて表示されます。もちChocolateyのパッケージのみを表示したい場合は以下のようにします。

PS C:\> Get-Package -ProviderName Chocolatey

Name                           Version          Source                           ProviderName
----                           -------          ------                           ------------
Firefox                        70.0.1           C:\Chocolatey\lib\Firefox.70.... Chocolatey

パッケージの削除

パッケージが不要になり削除したい場合は、以下のようにします。

PS C:\> Uninstall-Package Firefox

Package Management の問題点

便利な Package Management ですが、ひとつ気になる点があります。 Chocolateyにはパッケージのアップデート機能がありました。コマンドで掛けば choco update です。どうやら Package Management には同様の機能が存在しないらしく、パッケージのバージョンが新しくなった場合は一旦アンインストールし再インストールするしか手段がなさそうです。またどのパッケージのバージョンが新しくなったかの情報も確認しずらいという点もあります。

Windowsの標準機能でPowerShellからパッケージ管理ができるという点は非常に有用なので、アップデート機能などの機能追加を今後期待したいところです。