1

WMIとPowershellに関する本をフォローしていて、Powershellでカスタムクラスを作成する方法を説明しています。これには、C#コードとadd-typeコマンドの記述が含まれます。コマンドを使用してオブジェクトに複数のエントリを作成しようとすると+=、次のエラーが発生します。

Method invocation failed because [pawobject] doesn't contain a method named 'op_Addition'.
At line:23 char:14
+ $MyObjects += <<<<  $MyObject
    + CategoryInfo          : InvalidOperation: (op_Addition:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

クラスの作成に使用しているコードは次のとおりです。

$source = @"
public class pawobject
{
    public string Description { get; set; }
    public string Name { get; set; }
    public int Number { get; set;}
}
"@

そしてそれをPowerShellに追加するには、次を使用します。

Add-Type $source -Language CSharpVersion3

値を作成するコードは次のとおりです。

$MyObject = New-Object -TypeName pawobject -Property @{
    Name = "MyObject5";
    Number = 200;
    Description = "Take3"
}

これにより、単一のが作成されます$MyObject。ここから私の問題が発生します。次のような複数のエントリを持つオブジェクトを作成しようとしました。

$MyObjects += $MyObject

しかし、上記のエラーが発生します。私が試してみました

$MyObjects = $MyObjects + $MyObject

私はオンラインで周りを見回し、次のコードを追加してみましたpublic class

public static string Add(string a, string b) {
    return (a + b);
}

しかし、それは数字でしか機能しないようです。私はC#にまったく精通していないので、このエラーを修正するためにどこから始めればよいのかさえわかりません。私は常に自分の環境で新しいオブジェクトを作成しているので、これは非常に便利であることがわかります。独自のタイプを定義できることは、特に各プロパティに入れることができるデータのタイプを制御できることで、大きな利点になります。よろしくお願いします。良い一日を!

編集:結果に何をさせたいかを説明しましょう。

私はこのような何かを宣言できるようにしたいと思います:

$MyObject = New-Object -TypeName pawobject -Property @{
    Name = "MyObject";
    Number = 100;
    Description = "Take1"
    }

私がの出力を取るとき、私は$MyObjectこれで終わります:

Description   Name         Number
-----------   ----         ------
Take1         MyObject     100

次に、これを宣言できるようにしたいと思います。

$MyObjects += $MyObjects

そして、$MyObjectsこれを持っていることになります:

Description   Name         Number
-----------   ----         ------
Take1         MyObject     100
Take2         MyObject5    200

基本的に(2セットのオブジェクトを追加するための専門用語がわからない)$MyObject$MyObjects

4

1 に答える 1

2

2 つのオブジェクトを一緒に追加すると解釈しています。C# では、次のように操作を実装する必要があると思います。

    public static pawobject operator +(pawobject A, pawobject B)
    {

        //I have no idea how you would add two of these together
    }

これが実際にあなたがやりたいことかどうかはわかりません。オブジェクトの配列を作成したいようです。

I've tested this out and it does create an array of objects.

PS C:\Users\James> $source = @"
>> public class pawobject3
>> {
>>     public string Description { get; set; }
>>     public string Name { get; set; }
>>     public int Number { get; set;}
>>     public static pawobject3[] operator +(pawobject3 A, pawobject3 B)
>>     {
>>         pawobject3[] Result = new pawobject3[2];
>>         Result[0] = A;
>>         Result[1] = B;
>>         return Result;
>>     }
>>     public static pawobject3[] operator +(pawobject3[] A, pawobject3 B)
>>     {
>>         pawobject3[] Result = new pawobject3[A.Length + 1];
>>         for(int i = 0; i < A.Length; i++)
>>             Result[i] = A[i];
>>         Result[A.Length] = B;
>>         return Result;
>>     }
>> }
>> "@
>>
PS C:\Users\James> Add-Type $source -Language CSharpVersion3
PS C:\Users\James> $MyPaw1
PS C:\Users\James> $MyPaw1 = New-Object -TypeName pawobject3 -Property @{
>> Name = "Test1";
>> Number = 1;
>> Description = "D1";
>> }
>>
PS C:\Users\James> $MyPaw2 = New-Object -TypeName pawobject3 -Property @{
>> Name = "Test2";
>> Number = 2;
>> Description = "D2";
>> }
>>
PS C:\Users\James> $MyPaw3 = New-Object -TypeName pawobject3 -Property @{
>> Name = "Test3";
>> Number = 3;
>> Description = "D3";
>> }
>>
PS C:\Users\James> $MyPaws = $MyPaw1 + $MyPaw2
PS C:\Users\James> $MyPaws += $MyPaw3
PS C:\Users\James> $MyPaws

Description                             Name                                                                     Number
-----------                             ----                                                                     ------
D1                                      Test1                                                                         1
D2                                      Test2                                                                         2
D3                                      Test3                                                                         3

You need to make sure the operator knows what it's adding together. There's no declaration of variable type so to create the array I'm using the return type of adding 2 together.

Hope this helps

于 2012-08-17T15:18:42.667 に答える