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からパッケージ管理ができるという点は非常に有用なので、アップデート機能などの機能追加を今後期待したいところです。