PowerShell
Powershellモジュール
サーチ…
前書き
PowerShellバージョン2.0以降、開発者はPowerShellモジュールを作成できます。 PowerShellモジュールは、共通の機能のセットをカプセル化します。たとえば、さまざまなクラウドサービスを管理するベンダー固有のPowerShellモジュールがあります。また、ソーシャルメディアサービスとやり取りし、Base64エンコーディング、Named Pipeなどの一般的なプログラミングタスクを実行する一般的なPowerShellモジュールもあります。
モジュールは、コマンドエイリアス、関数、変数、クラスなどを公開することができます。
モジュール・マニフェストの作成
@{
RootModule = 'MyCoolModule.psm1'
ModuleVersion = '1.0'
CompatiblePSEditions = @('Core')
GUID = '6b42c995-67da-4139-be79-597a328056cc'
Author = 'Bob Schmob'
CompanyName = 'My Company'
Copyright = '(c) 2017 Administrator. All rights reserved.'
Description = 'It does cool stuff.'
FunctionsToExport = @()
CmdletsToExport = @()
VariablesToExport = @()
AliasesToExport = @()
DscResourcesToExport = @()
}
すべての優れたPowerShellモジュールにはモジュールマニフェストがあります。モジュールマニフェストには、PowerShellモジュールに関するメタデータが含まれているだけで、モジュールの実際の内容は定義されていません。
マニフェストファイルは、 .psd1
を含む.psd1
ファイル拡張子を持つPowerShellスクリプトファイルです。 PowerShellが正しくPowerShellモジュールファイルとして解釈するためには、マニフェストのHashTableに特定のキーが含まれている必要があります。
上記の例は、モジュールマニフェストを構成する主要なHashTableキーのリストを提供していますが、他にも多数あります。 New-ModuleManifest
コマンドは、新しいモジュールマニフェストスケルトンを作成するのに役立ちます。
単純なモジュールの例
function Add {
[CmdletBinding()]
param (
[int] $x
, [int] $y
)
return $x + $y
}
Export-ModuleMember -Function Add
これは、PowerShellスクリプトモジュールファイルの外観の簡単な例です。このファイルはMyCoolModule.psm1
と呼ばれ、モジュールマニフェスト(.psd1)ファイルから参照されます。 Export-ModuleMember
コマンドを使用すると、モジュール内のどの機能をモジュールのユーザーに「エクスポートする」、または公開するかを指定できます。一部の関数は内部のみであり、公開されるべきではないため、 Export-ModuleMember
呼び出しでは省略されます。
モジュールからの変数のエクスポート
$FirstName = 'Bob'
Export-ModuleMember -Variable FirstName
変数をモジュールからExport-ModuleMember
するには、 Export-ModuleMember
コマンドを-Variable
パラメータとともに-Variable
ます。ただし、変数が明示的にモジュールマニフェスト(.psd1)ファイルにエクスポートされていない場合、変数はモジュールコンシューマには表示されません。モジュールのマニフェストを "ゲートキーパー"のように考えてください。関数または変数がモジュールマニフェストで許可されていない場合は、モジュール消費者には表示されません。
注:変数をエクスポートすることは、クラスのフィールドをパブリックにすることに似ています。それはお勧めできません。フィールドを取得する関数とフィールドを設定する関数を公開する方がよいでしょう。
PowerShellモジュールの構造化
1つの.psm1
PowerShellスクリプトモジュールファイルにすべての関数を定義するのではなく、関数を個別のファイルに分割したい場合があります。これらのファイルは、スクリプトモジュールファイルからドットソースできます。スクリプトモジュールファイルは、本質的に.psm1
ファイルの一部であるかのように扱われます。
このモジュールのディレクトリ構造を考えてみましょう:
\MyCoolModule
\Functions
Function1.ps1
Function2.ps1
Function3.ps1
MyCoolModule.psd1
MyCoolModule.psm1
MyCoolModule.psm1
ファイル内に次のコードを挿入できます。
Get-ChildItem -Path $PSScriptRoot\Functions |
ForEach-Object -Process { . $PSItem.FullName }
これにより、個々の関数ファイルが.psm1
モジュールファイルにドットソースされます。
モジュールの位置
PowerShellは、$ Env:PSModulepathにリストされているディレクトリ内のモジュールを探します。
fooというフォルダ内にfooというモジュールが、で発見されるImport-Module foo
そのフォルダ内で、PowerShellはモジュールマニフェスト(foo.psd1)、モジュールファイル(foo.psm1)、DLL(foo.dll)を検索します。
モジュールメンバーの可視性
デフォルトでは、モジュール内で定義されている関数のみがモジュールの外側に表示されます。言い換えると、モジュール内で変数とエイリアスを定義すると、モジュールのコード以外では使用できなくなります。
この動作をオーバーライドするには、 Export-ModuleMember
コマンドレットを使用します。これには、 -Function
、 -Variable
、および-Alias
というパラメータがあり、エクスポートするメンバーを正確に指定できます。
Export-ModuleMember
を使用すると、指定した項目だけが表示されることに注意することが重要です。