2011年10月5日水曜日

◆New-Module、Export-ModuleMemberでオブジェクト作成

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

2011-10-05 11h39_19

サンプル自体は特に有用なものではないが、幾つかのプロパティとメソッドが定義されているのが判る。

0 件のコメント:

コメントを投稿