しばたテックブログ

気分で書いている技術ブログです。

PowerShell 3~4向けのPackage Management Preview for PowerShellが出たので試してみた

Package Management Preview for PowerShell 4 & 3 is now availableの記事にある通り、PowerShell 3-4向けのPackage Management(Preview版)が出てたので試してみました。

PackageManagement自体はWindows 10で既にリリースされており、ぎたぱそ先生の

tech.guitarrapc.com

tech.guitarrapc.com

のエントリで非常にわかりやすく説明されています。
(このエントリを書いている途中に下のエントリが公開されてもうこのエントリいらないかなと思ったのですがせっかく書いたので公開することにしました...)

今回のは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ファイルを実行すればサイレントインストールすることもできます。

インストールが完了すると、PackageManagementPowerShellGetの2モジュールがC:\Program Files\WindowsPowerShell\Modulesにインストールされます。

f:id:stknohg:20151029205606p:plain

モジュールの確認

事前準備

PowerShellGetはスクリプトモジュールなので事前にスクリプトの実行を許可しておいてください。

# 要管理者権限
PS C:\> Set-ExecutionPolicy RemoteSigned -Force

スクリプトの実行が許可されていないとPowerShellGetモジュールがロードされません。

コマンドの確認

PackageManagementPowerShellGetモジュールに対して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

f:id:stknohg:20151029204758p:plain

実行結果

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

f:id:stknohg:20151029204930p:plain

これはエラーメッセージの通りで全ユーザー向けにモジュールをインストールする場合は要管理者権限なためです。 Windows 10でも同様ですがこちらはまだプレビュー版なのでメッセージが英語のままです。

そこでInstall-Module PSReadline -Scope CurrentUserと現在のユーザーのみにインストールする様にします。 *1

PS C:\> Install-Module PSReadline -Scope CurrentUser

現時点でPowerShell Gallary(https://www.powershellgallery.com/api/v2/)は信頼されていないSourceなので都度確認を求められます。

f:id:stknohg:20151029205035p:plain

ここは信頼して処理を続行すると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:もちろん管理者として実行しても良いです。