Package Management Preview for PowerShell 4 & 3 is now availableの記事にある通り、PowerShell 3-4向けのPackage Management(Preview版)が出てたので試してみました。
PackageManagement自体はWindows 10で既にリリースされており、ぎたぱそ先生の
や
のエントリで非常にわかりやすく説明されています。
(このエントリを書いている途中に下のエントリが公開されてもうこのエントリいらないかなと思ったのですがせっかく書いたので公開することにしました...)
今回のはPowerShell 3~4向けのもので、諸々の事情でPowerShell 5.0にすることができない環境でもパッケージ管理の恩恵に預かれる様になるのが嬉しい感じです。
インストール
今回はPowerShell 4.0な64bit版Windows 8.1にインストールしてみました。
ここから64bitまたは32bit版のインストーラーをダウンロードしてインストールします。(要管理者権限)
インストーラーでは使用許諾に同意を求められるくらいで選択肢はないので画面の指示に従っていればすぐにインストールできます。
また、コマンドプロンプトから
REM 64bit版の場合 PackageManagement_x64.msi /passive or PackageManagement_x64.msi /quiet
な引数でMSIファイルを実行すればサイレントインストールすることもできます。
インストールが完了すると、PackageManagement
とPowerShellGet
の2モジュールがC:\Program Files\WindowsPowerShell\Modules
にインストールされます。
モジュールの確認
事前準備
PowerShellGet
はスクリプトモジュールなので事前にスクリプトの実行を許可しておいてください。
# 要管理者権限 PS C:\> Set-ExecutionPolicy RemoteSigned -Force
スクリプトの実行が許可されていないとPowerShellGet
モジュールがロードされません。
コマンドの確認
PackageManagement
とPowerShellGet
モジュールに対してGet-Command
をかけると以下の様な感じです。
当たり前といえば当たり前ですがWindows 10のものと同様の結果になっています。
PS C:\> Get-Command -Module PackageManagement CommandType Name ModuleName ----------- ---- ---------- Cmdlet Find-Package PackageManagement Cmdlet Get-Package PackageManagement Cmdlet Get-PackageProvider PackageManagement Cmdlet Get-PackageSource PackageManagement Cmdlet Install-Package PackageManagement Cmdlet Register-PackageSource PackageManagement Cmdlet Save-Package PackageManagement Cmdlet Set-PackageSource PackageManagement Cmdlet Uninstall-Package PackageManagement Cmdlet Unregister-PackageSource PackageManagement PS C:\> Get-Command -Module PowerShellGet CommandType Name ModuleName ----------- ---- ---------- Function Find-Module PowerShellGet Function Get-InstalledModule PowerShellGet Function Get-PSRepository PowerShellGet Function Install-Module PowerShellGet Function Publish-Module PowerShellGet Function Register-PSRepository PowerShellGet Function Save-Module PowerShellGet Function Set-PSRepository PowerShellGet Function Uninstall-Module PowerShellGet Function Unregister-PSRepository PowerShellGet Function Update-Module PowerShellGet
Providerの確認
また、Get-PackageProvider
を実行してProvider(≒アプリの種類)を確認すると以下の様な感じです。
こちらもWindows 10のものと同様ですがバージョン(ビルド番号)がより新しくなっています。
PS C:\> Get-PackageProvider Name Version DynamicOptions ---- ------- -------------- Programs 10.0.10514.0 {IncludeWindowsInstaller, IncludeSystemComponent} msi 10.0.10514.0 {AdditionalArguments} msu 10.0.10514.0 {} PSModule 1.0.0.0 {PackageManagementProvider, Location, InstallUpdate, InstallationPolicy...}
Sourceの確認
Get-PackageSource
を実行してSource(≒リポジトリ)を確認すると以下の結果になります。
現時点ではPowerShell Gallaryのみです。
PS C:\> Get-PackageSource
Name ProviderName IsTrusted IsRegistered IsValidated Location
---- ------------ --------- ------------ ----------- --------
PSGallery PSModule False True False https://www.powershellgallery...
ProviderやSourceの追加
必要に応じてProviderやSourceを増やすと良いと思います。
私は嫌いなので試してませんが、Chocolateyを追加したい場合は以下の様にすると良いです。
PS C:\> Get-PackageProvider -Name Chocolatey
細かい話はここを見てください。
適当に試してみる
モジュールの検索
とりあえずFind-Module
を実行してモジュールを検索してみます。
初回実行時はNuGet-anycpu.exe
のインストールを要求されるのでインストールしてください。
PS C:\> Find-Module
実行結果
PS C:\> Find-Module NuGet-anycpu.exe is required to continue. PowerShellGet requires NuGet-anycpu.exe to interact with NuGet based galleries. NuGet-anycpu.exe must be available in 'C:\Program Files\PackageManagement\ProviderAssemblies' or 'C:\Users\vagrant\AppData\Local\PackageManagement\ProviderAssemblies'. For more information about NuGet provider, see http://OneGet.org/NuGet.html. Do you want PowerShellGet to download NuGet-anycpu.exe now? [Y] はい(Y) [N] いいえ(N) [S] 中断(S) [?] ヘルプ (既定値は "Y"): y Version Name Repository Description ------- ---- ---------- ----------- 3.5.0.0 xPSDesiredStateConfiguration PSGallery The xPSDesiredStateConfiguration module is a par... 1.7.0.0 xWebAdministration PSGallery Module with DSC Resources for Web Administration 1.0.0.13 PSReadline PSGallery Great command line editing in the PowerShell con... (・・・後略・・・)
モジュールのインストール
ここで便利な拡張機能PSReadlineをインストールしてみます。
最初に何も考えずにInstall-Module PSReadline
と実行すると以下の様な感じでエラーになります。
PS C:\> Install-Module PSReadline
これはエラーメッセージの通りで全ユーザー向けにモジュールをインストールする場合は要管理者権限なためです。 Windows 10でも同様ですがこちらはまだプレビュー版なのでメッセージが英語のままです。
そこでInstall-Module PSReadline -Scope CurrentUser
と現在のユーザーのみにインストールする様にします。 *1
PS C:\> Install-Module PSReadline -Scope CurrentUser
現時点でPowerShell Gallary(https://www.powershellgallery.com/api/v2/)は信頼されていないSourceなので都度確認を求められます。
ここは信頼して処理を続行するとC:\Users\[ユーザー名]\Documents\WindowsPowerShell\Modules
フォルダにモジュールがインストールされます。
インストールされた結果を確認すると以下の様な感じになります。
PS C:\> Get-InstalledModule Version Name Repository Description ------- ---- ---------- ----------- 1.0.0.13 PSReadline PSGallery Great command line editing in the PowerShell con...
これでインストールされたモジュールを使えます。
とりあえずこんな感じです。
補足
PSReadlineはモジュールをインストールした後に、C:\Users\[User]\Documents\WindowsPowerShell\profile.ps1
ファイルに
if ($host.Name -eq 'ConsoleHost') { Import-Module PSReadline }
を追加することでPowerShellの起動時にImport-Module
する様になりより便利に使うことができます。
*1:もちろん管理者として実行しても良いです。