優れた PowerShell スクリプトを作成したら、それを他の人たちと共有すると、まったく新しい世界が開けます。スクリプトを PowerShell ギャラリーに公開することで、コミュニティへの貢献ができ、人から認められたいという欲求が満たされ、交流することで自らの PowerShell スキルの向上にもつながります。
PowerShell ギャラリーに公開されるのは PowerShell モジュールやソフトウェアパッケージが多いですが、昔ながらのPS1スクリプトを公開することもできます。
PowerShell ギャラリーにコンテンツを公開するのは誰にでもできますが、まずアカウントを設定する必要があります。アカウントを設定したら、次に自分に割り当てられた固有のAPIキーが必要になりますが、APIキーは、PowerShell ギャラリーの自分のプロファイルにアクセスして見つけることができます。
PowerShell ギャラリー API キー
APIキーが確認できたら、準備完了です。公開するスクリプトが必要なので、わかりやすい例としてばからしいほど単純なスクリプトをアップロード用に作成しました。このスクリプトを adbtest.ps1 と呼ぶことにします。
param(
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string]$Name
)
Write-Host $Name
スクリプトを公開するには、Publish-Script コマンドレットを使います。最もシンプルな場合、2つのパラメータ、スクリプトへのパスと NuGetApiKey パラメータとして定義されるAPIキーを指定します。
ですが、スクリプトをそのまま公開しようとすると、すぐに問題が発生します。
PS> Publish-Script -Path C:\adbtest.ps1 -NuGetApiKey
NuGet.exe is required to continue
PowerShellGet requires NuGet.exe to publish an item to the NuGet-based repositories. NuGet.exe must be available in 'C:\ProgramData\Microsoft\Windows\PowerShell\PowerShellGet\' or 'C:\Users\abertram\AppData\Local\Microsoft\Windows\PowerShell\PowerShellGet\, or under one
of the paths specified in PATH environment variable value. NuGet.exe can be downloaded from https://nuget.org/nuget.exe. Do you want PowerShellGet to install NuGet.exe now?
[Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): y
9:01:33 AM : PSScriptInfo is not specified in the script file 'C:\adbtest.ps1'. You can use the Update-ScriptFileInfo with -Force or New-ScriptFileInfo cmdlet to add the PSScriptInfo to the script file.
PowerShell ギャラリーに公開するスクリプトには、事前にメタデータを追加しておく必要があります。このメタデータには、バージョン、作成者、GUIDなどが含まれます。必要な情報を追加するには、New-ScriptFileInfo コマンドを使用して新しいスクリプトを最初から作成するか、Update-ScriptFileInfo コマンドを使用して既存のスクリプトを更新します。Update-ScriptFileInfo コマンドによってスクリプトが変更されるかもしれない可能性を排除するために、筆者は常に新しいスクリプトを最初から作成するようにしています。
New-ScriptFileInfo コマンドを使って、新しく AdamsTestScript.ps1 というPS1スクリプトを作成して、前のスクリプトの内容をコピーしてこのスクリプトに貼り付けます。
PS> New-ScriptFileInfo -Path C:\AdamsTestScript.ps1 -Description 'This is a test description'
PS> Get-Content -Path 'C:\AdamsTestScript.ps1'
<#PSScriptInfo
.VERSION 1.0
.GUID 5611f619-12cf-4a85-863a-1b09f337e397
.AUTHOR abertram
.COMPANYNAME
.COPYRIGHT
.TAGS
.LICENSEURI
.PROJECTURI
.ICONURI
.EXTERNALMODULEDEPENDENCIES
.REQUIREDSCRIPTS
.EXTERNALSCRIPTDEPENDENCIES
.RELEASENOTES
#>
<#
.DESCRIPTION
This is a test description
#>
param(
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string]$Name
)
Write-Host $Name
これで本当にスクリプトを公開する準備が整ったので、もう一度、Publish-Script を実行します。
Publish-Script -Path C:\AdamsTestScript.ps1 -NuGetApiKey
今度はエラーは返ってきません。スクリプトが実際に公開されたかどうかは、PS1拡張子なしの名前を入れて Find-Script コマンドを実行すれば確認できます。
PS> Find-Script -Name AdamsTestScript
Version Name Repository Description
------- ---- ---------- -----------
1.0 AdamsTestScript PSGallery This is a test description
この時点で、誰にでも利用可能です。ギャラリーポータルからも見ることができます。
Managing PowerShell Gallery Items
Adam Bertram
Adam Bertram is a 20-year veteran of IT. He’s currently an automation engineer, blogger, independent consultant, freelance writer, author, and trainer. Adam focuses on DevOps, system management, and automation technologies as well as various cloud platforms. He is a Microsoft Cloud and Datacenter Management MVP and efficiency nerd that enjoys teaching others a better way to leverage automation.