サーチ…


前書き

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を使用すると、指定した項目だけが表示されることに注意することが重要です。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow