New-Moduleコマンドレットは「メモリ内にのみ存在する新しい動的モジュールを作成します」とヘルプにある。
ネットでもあまり使用例を見かけないので詳細な使い方は確認できていないのだが、さしあたってメソッド付きのPsObjectを作ったり出来るようだ。
スクリプトブロックで、プロパティとして公開したい変数やメソッドを定義し「New-Module」コマンドレットにアサインしてあげれば良さそう。
デフォルトではメソッドは全てが公開され、変数は公開されない。
これを制御するには「Export-ModuleMember」コマンドレットで指定してあげれば良い。
変数についてはNew-Moduleした時点で確保されていないものは公開されないようだ。(以下の例では$dummy)
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 | #オブジェクト定義 $blk = { param ( [System.IO.FileSystemInfo]$file ) $fileSystemInfo = $file $dummy $dummy2 = 1 $name = $file.Name $nameNoExt = ($file.Name -replace $file.Extension,"") function Rename { param ( [string]$newName ) $script:dummy = 2 Rename-Item -Path $fileSystemInfo.FullName -NewName $newName Write-Host "dummy value = $dummy" } Export-ModuleMember -Function * -Variable name,nameNoExt,dummy,dummy2 } #ファクトリー function Get-FileObj($path){ $files = @() dir $path | %{ $file = New-Module -AsCustomObject -ScriptBlock $blk -ArgumentList $_ $files += $file } return $files } #使用例 $files = Get-FileObj "d:\Desktop\test\*" $files | gm | Out-String $files[0].Rename("temp6.txt") Get-FileObj "d:\Desktop\test\*" | ft -AutoSize |
サンプル自体は特に有用なものではないが、幾つかのプロパティとメソッドが定義されているのが判る。
0 件のコメント:
コメントを投稿