PowerShellで、モジュールとしてfunctionを外部ファイルに定義する



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.のように指定することで、モジュール名.関数名のように呼び出すことができました。(かっこ悪いですが)

コメント

このブログの人気の投稿

PowerShell 6で、Shift_JISのCSVをImport-Csvで読み込んだら文字化けした

Windowsで、特定のユーザーに特定のサービスの再起動を許可する

PowerShellでイベントログを取得する時、「指定した選択条件に一致するイベントが見つかりませんでした。」が煩わしいのでcatchする