2017-05-10 23 views
1

私はこのようなカスタムメソッドを持つオブジェクトを定義しようが、私のsyntaxeが間違っている:のように使用するため[PsCustomObject]プロパティとメソッドを使用して作成する方法

$Obj = [pscustomobject]@{ 
    A = @(5,6,7) 
    B = 9 
    Len_A = {return $this.A.count;} 
    Sum_A = {return (SumOf $this.A);} 
} 

:おそらく

$Obj.Len_A()  # return 3 
$Obj.A += @(8,9) # @(5,6,7,8,9) 
$Obj.Len_A()  # return 5 
+2

対象とするPowerShellのバージョンは何ですか? –

答えて

3

ますAdd-Memberコマンドレットを使用する:

$Obj = [pscustomobject]@{ 
    A = @(5,6,7) 
    B = 9 
} 

$Obj | Add-Member -MemberType ScriptMethod -Name "Len_A" -Force -Value { 
    $this.A.count 
} 

これで、このメソッドを期待通りに呼び出すことができます。

$Obj.Len_A() 
+0

良い! Add-Memberは非常に遅い関数です。https://learn-powershell.net/2014/01/11/custom-powershell-objects-and-performance-revisited/ – Alban

+0

さて、あなたは*パフォーマンス*クリティカル*スクリプト、そうでなければ、あなたの質問に言及していたでしょう。あなたのスクリプトが実際の動作が遅い場合を除いて、あなたは安全にすべてのthosの性能を無視することができます... –

2

使用しているPowerShellのバージョンについては言及していません。このようにオブジェクト指向のクラスを使用したい場合。

class CustomClass { 
    $A = @(5,6,7) 
    $B = 9 
    [int] Len_A(){return $this.A.Count} 
    [int] Sum_A(){ 
     $sum = 0 
     $this.A | ForEach-Object {$sum += $_} 
     return $sum 
    } 
} 

$c = New-Object CustomClass 
$s = $c.Sum_A() 
$l = $c.Len_A() 
関連する問題