Powershell 2.0でAmazon.Cloudwatch.Model.Dimensions
タイプの新しいCollections.Generic.List
オブジェクトを作成しようとしています。Powershell 2でサードパーティーアセンブリタイプの汎用リストを宣言する
私は成功しAmazon.Cloudwatch.Model.Dimensions
オブジェクトを作成することができます
> $dimension = New-Object Amazon.Cloudwatch.Model.Dimensions
そして私はとタイプstring
のCollections.Generic.List
オブジェクトを作成することができます:私がしようとするとのCollections.Generic.List
オブジェクトを作成するときに、しかし
> $list = New-Object Collections.Generic.List[string]
Amazon.Cloudwatch.Model.Dimensions
と入力すると、次のエラーが表示されます。
> $list = New-Object Collections.Generic.List[Amazon.Cloudwatch.Model.Dimension]
New-Object : Cannot find type
[Collections.Generic.List[Amazon.Cloudwatch.Model.Dimension]]: make sure the assembly containing this type is loaded.
At line:1 char:19
+ $list = New-Object <<<<
Collections.Generic.List[Amazon.Cloudwatch.Model.Dimension]
+ CategoryInfo : InvalidType: (:) [New-Object],
PSArgumentException
+ FullyQualifiedErrorId :
TypeNotFound,Microsoft.PowerShell.Commands.NewObjectCommand
Powershell 3.0でも同じことが言えるので、Powershell 2.0ジェネリックがアセンブリをルックアップする方法が原因であるようです。 another SO answerによると関係している可能性のPowershell 2.0のバグがあります:
However, there's an unfortunate catch. In PowerShell 2.0, there's a bug when you mix and match BCL and 3rd party types as type parameters. The latter need to be assembly qualified:
# broken over two lines for clarity with backtick escape
$o = new-object ('collections.generic.dictionary[[{0}],[{1}]]' -f `
[type1].fullname, [type2].fullname)
Hope this helps. In PowerShell 3.0, this has been fixed.
は、私は(一種の)成功せずにこれを試みてきました。私が試してみました
The solution is to specify the fully qualified assembly name for the generic parameter types. It's extremely ugly, but works:
$bar = new-object "System.Collections.Generic.Dictionary``2[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"
:
> $list = New-Object "System.Collections.Generic.List``1[[Amazon.CloudWatch.Model.Dimension, AWSSDK.CloudWatch, Version=3.3.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604]]"
をも成功せず
そしてanother SO answerはしても、より多くのアセンブリ予選を示唆しています。
> $list = New-Object "System.Collections.Generic.List``1[[Amazon.CloudWatch.Model.Dimension, AWSSDK.CloudWatch, Version=3.3.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604]]"
New-Object : Cannot find type
[System.Collections.Generic.List`1[[Amazon.CloudWatch.Model.Dimension, AWSSDK.CloudWatch, Version=3.3.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604]]]: make sure the assembly containing this type is loaded.
At line:1 char:22
+ $dimlist = New-Object <<<<
"System.Collections.Generic.List``1[[Amazon.CloudWatch.Model.Dimension, AWSSDK.CloudWatch, Version=3.3.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604]]"
+ CategoryInfo : InvalidType: (:) [New-Object], PSArgumentException
+ FullyQualifiedErrorId : TypeNotFound,Microsoft.PowerShell.Commands.NewObjectCommand
ご意見をいただければ幸いです。
注:Amazon.Cloudwatch.Model.Dimensions
私は、このエンドツーエンドをテストすることはできませんよThe AWS SDK for .NET
これを裸のWindows 7 VMでテストし、CLRバージョン2.0.50727.8669のPSH v.2.0で動作することを確認できます。 .net fx 4.0(これは必要ないと思います)とAWS SDK、最新バージョンもインストールしました。 – wp78de
それに釘付け。乾杯! –