呼び元となるメインファイル上から、別モジュールファイルに定義した関数、変数、クラスメソッドなどを、VBAの開発ツールと同様にインテリセンス(自動補完)が効くようにできるコーディングさせる方法の一例
例
以下、メインファイル(Main.ps1)、関数、変数を記載したモジュールファイル、クラスを記載したファイルになる。
<#
ファイル名 : Main.ps1
の内容
#>
#Using Moduleで対象モジュールを取り込む
#これによりインテリセンスが効く
Using Module .\Module.psm1 #関数、変数の格納されたモジュールファイル
Using Module .\Class.psm1 #クラスで実装したモジュールファイル
#モジュールファイルからの関数の呼び出し
DoModuleFunction
$Ret = DoFunctionByValue([int]12)
Write-Host 'DoFunctionByValue 実行結果' $Ret.ToString()
#モジュールファイルからの変数の呼び出し
write-host $global:ModuleVariable
write-host $global:ModuleValueStrings
#モジュール定義された変数を塗り替え、モジュール関数で変更具合を確認
$global:ModuleValueStrings = '違う変数に入れ替え'
ShowModuleValueStrings
#クラスを生成
$test = New-Object TestCls
#クラスのプロパティに値を設定
$test.ClassDataInt = 1
$test.ClassDataStr = '文字列'
#クラスのメソッドを実行
write-host $test.Add(1)
write-host $test.Add(3)
write-host $test.Domethod()
<#
ファイル名 : Module.psm1
#>
#モジュール変数
$global:ModuleValueInteger = 9999 #何らかの数値(例:リトライ値等)
$global:ModuleValueStrings = 'モジュール変数' #
#モジュール関数
function DoModuleFunction
{
#何らかの処理を記載
Write-Host "Exec DoModuleFunction"
}
#モジュール関数、引数あり
function DoFunctionByValue( [int]$aa = 1)
{
write-host 'DoFunctionByValue :' $aa.ToString()
return $true
}
function ShowModuleValueStrings
{
write-host $global:ModuleValueStrings
}
#これが大事、定義した変数の公開
Export-ModuleMember -Variable ModuleValueInteger
Export-ModuleMember -Variable ModuleValueStrings
#これが大事、定義した関数の公開
Export-ModuleMember -Function DoModuleFunction
Export-ModuleMember -Function DoFunctionByValue
Export-ModuleMember -Function ShowModuleValueStrings
<#
ファイル名 : Class.psm1
#>
class TestCls
{
# プロパティ
[int] $ClassDataInt
[string] $ClassDataStr
# 静的プロパティ
static [int] $StaticData
#メソッド
Domethod()
{
Write-host "methodが実行されました。"
}
[int] Add([int]$Indata){
$this.ClassDataInt += $Indata
return $this.ClassDataInt
}
}
実行結果
Exec DoModuleFunction
DoFunctionByValue : 12
DoFunctionByValue 実行結果 True
モジュール変数
違う変数に入れ替え
2
5
methodが実行されました。
PS C:\Users\hp\papanda925\ps1>
ポイント
ポイントは、 Using Module でモジュールファイルを読み込むこと
コメント