2017-06-12 11 views
2

個別のソースファイルを使用してPowerShellスクリプトモジュールを作成します。モジュール内部のソース関数を他の内部ソースファイルから参照する標準的な方法は何ですか?モジュールで参照する複数のファイルからPowerShellモジュールを作成する

例えば、私のモジュールが "foo"と "bar"ファイルのPSソースコードから作成されている場合。 "foo"の関数は "bar"で関数を呼び出す必要がありますが、これを実行する最善の方法は何ですか?

ドットソーシングは良い考えではないようです。また、コンポーネントファイル( "foo"と "bar")のpsm1ファイルも作成しません。これはpsd1ファイルの "ScriptsToProcess"フィールドの背後にある考えですか?

私はこの間違ったことを考えていますか(非「PowerShelly」)?すべてを1つのpsm1にダンプする必要がありますか?

答えて

2

私は個人的にはここで彼のブログでRamblingCookieMonsterによってレイアウトされた練習に続いてきました:http://ramblingcookiemonster.github.io/Building-A-PowerShell-Module/

サブフォルダ\Public\Privateの下に別個の.ps1ファイルへのあなたの機能を整理することです。パブリックには、ユーザーが直接呼び出すことができる関数が含まれています。プライベートは、PowerShellの内部関数です。次のようにループやドットソーシングを経由して機能をロード.psm1ファイルに続いて

#Get public and private function definition files. 
    $Public = @(Get-ChildItem -Path $PSScriptRoot\Public\*.ps1 -ErrorAction SilentlyContinue) 
    $Private = @(Get-ChildItem -Path $PSScriptRoot\Private\*.ps1 -ErrorAction SilentlyContinue) 

#Dot source the files 
    Foreach($import in @($Public + $Private)) 
    { 
     Try 
     { 
      . $import.fullname 
     } 
     Catch 
     { 
      Write-Error -Message "Failed to import function $($import.fullname): $_" 
     } 
    } 

# Here I might... 
    # Read in or create an initial config file and variable 
    # Export Public functions ($Public.BaseName) for WIP modules 
    # Set variables visible to the module and its functions only 

Export-ModuleMember -Function $Public.Basename 

あなたは、その後も明示的にリストする必要があります.psd1モジュールマニフェストファイルのPublic関数名はFunctionsToExportの設定になります。これを行うと、これらの機能を検出可能にし、ユーザーがモジュールである場合にモジュールを自動ロードすることができます。

関連する問題