2009-03-27 7 views
17

나는 사람이 추가 형을 사용하여 정의 PowerShell을에 목록을 선언하려고를 사용하여 정의 된 클래스와 제네릭 목록을 선언하는 것은 :Powershell. '추가 형'

add-type -Language CSharpVersion3 -TypeDefinition @" 
    public class Person 
    { 
     public Person() {} 

     public string First { get; set; } 
     public string Last { get; set; } 
    } 
"@ 

이 잘 작동 :

New-Object Person 
New-Object System.Collections.Generic.List``1[System.Object] 

하지만이 줄은 실패합니다.

New-Object System.Collections.Generic.List``1[Person] 

무엇이 잘못 되었나요?

+0

PowerShell 2.0, 맞나요? –

+0

예, 2.0으로 작업 중 – alex2k8

+1

궁금한 분은 Powershell 3.0에서 실패한 줄 (Windows Server 2012에서 실행했기 때문에 "-Language CSharpVersion3"을 제거해야했지만)이 실패했습니다. –

답변

24

이것은 New-Object의 버그입니다. PowerShell을 버전 2에서 이에 대한 지원을 추가 : http://www.leeholmes.com/blog/2006/08/18/creating-generic-types-in-powershell

UPDATE :이 당신이 더 쉽게 만드는 데 도움이됩니다, 내가 FileStream 개체 목록을 만들려고했다

PS > $r = New-Object "System.Collections.Generic.List[Int]" 
PS > $r.Add(10) 
+1

StackOverflow Lee에 오신 것을 환영합니다! –

8

음이 내 솔루션이었습니다 (this link에 따라 - 실제로 문제를 해결하는 방법을 서술) : 도움이

$fs = New-Object 'System.Collections.Generic.List[System.IO.FileStream]' 
$sw = New-Object 'System.Collections.Generic.List[System.IO.StreamWriter]' 
$i = 0 
while ($i < 10) 
{ 
    $fsTemp = New-Object System.IO.FileStream("$newFileName",[System.IO.FileMode]'OpenOrCreate',[System.IO.FileAccess]'Write') 
    $fs.Add($fsTemp) 
    $swTemp = New-Object System.IO.StreamWriter($fsTemp) 
    $sw.Add($swTemp) 
    $i++ 
} 

희망!