PowerShellで、モジュールとしてfunctionを外部ファイルに定義する
Follow @venividivici830
psm1ファイルを作成し、PSModulePathに追加し、Import-Moduleで読み込むのが簡単かと思います。
以下、実行環境はmacOS 10.13.5、PowerShell v6.0.2。
MyModule.psm1
main.ps1
上記2ファイルを、下記のディレクトリー構成で配置します。
main.ps1が配置されたディレクトリーをカレントディレクトリーとして、実行しました。
psm1ファイルを格納するディレクトリーの名前は、psm1ファイルのファイル名と同じにする必要があるようです。(上の例だと、MyModuleとMyModule.psm1)
psm1ファイルが格納されたディレクトリー(上の例だと、modules)を、$env:PSModulePathに追加します。(適宜、フルパス指定などで)
モジュールパスの区切り文字は、Macだと:ですが、Windowsだと;だったはずです。
-Prefixを使うことで、名前の衝突を避けることができます。-Prefix MyModule.のように指定することで、モジュール名.関数名のように呼び出すことができました。(かっこ悪いですが)
psm1ファイルを作成し、PSModulePathに追加し、Import-Moduleで読み込むのが簡単かと思います。
以下、実行環境はmacOS 10.13.5、PowerShell v6.0.2。
MyModule.psm1
function printHello () { Write-Output "Hello" }
main.ps1
$env:PSModulePath += ":modules" Import-Module MyModule -Prefix MyModule. MyModule.printHello
上記2ファイルを、下記のディレクトリー構成で配置します。
├── main.ps1 └── modules └── MyModule └── MyModule.psm1
main.ps1が配置されたディレクトリーをカレントディレクトリーとして、実行しました。
$ pwsh main.ps1 Hello
psm1ファイルを格納するディレクトリーの名前は、psm1ファイルのファイル名と同じにする必要があるようです。(上の例だと、MyModuleとMyModule.psm1)
psm1ファイルが格納されたディレクトリー(上の例だと、modules)を、$env:PSModulePathに追加します。(適宜、フルパス指定などで)
モジュールパスの区切り文字は、Macだと:ですが、Windowsだと;だったはずです。
-Prefixを使うことで、名前の衝突を避けることができます。-Prefix MyModule.のように指定することで、モジュール名.関数名のように呼び出すことができました。(かっこ悪いですが)
コメント
コメントを投稿