2017-01-24 6 views
8

Po prostu chcę zrobić prosty niestandardowy typ z [System.Collections.ArrayList] na, powiedzmy, tylko krótszy [arrayList] lub coś w tym stylu i umieścić go w module dla wygody. Wygląda na Add-Type, ale nie może dowiedzieć się, czy pasuje i jak to zrobić dokładnie. To, co chcę uzyskać, to:Czy istnieje prosty sposób tworzenia niestandardowych typów w Powershell?

[ArrayList]<-[System.Collections.ArrayList] #Something like that 
$myArList=New-Object ArrayList 
$myArList.Add(1,2,3) 

Odpowiedz

9

Poszukujesz numeru type accelerator.

[accelerators]::add('arrayList','System.Collections.ArrayList') 

Unikałbym używania niestandardowych akceleratorów. PowerShell ma dobrą obsługę uzupełniania zakładek dla klas od co najmniej v3.

Jeśli więc wpiszesz [arraylTAB, to uzupełnimy dla Ciebie pełną nazwę.

Ryan Bemrose przedstawił wspaniały punkt; [accelerators] akcelerator typu nie jest dostępna domyślnie, ale można stworzyć go tak:

$acc = [psobject].assembly.gettype("System.Management.Automation.TypeAccelerators") 
$acc::Add('accelerators', $acc) 
+3

Opcja '[akceleratory]' akcelerator nie jest domyślnie włączona na moim PS, chociaż Mogę dodać go za pomocą '$ acc = [psobject] .assembly.gettype (" System.Management.Automation.TypeAccelerators "); $ acc :: Dodaj ("akceleratory", $ acc) ' –

8

Jeśli chcesz po prostu uniknąć ponownego wpisywania System.Collections.ArrayList cały czas, można po prostu przypisać typ dosłownego do zmiennej i użyć tego:

$ListType = [System.Collections.ArrayList] 
$MyArrayList = New-Object $ListType 
# more code 
$AnotherArrayList = New-Object $ListType 

lub korzystając z v5.0 new() konstruktora:

$MyArrayList = $ListType::new() 
+1

Och tak, też to lubię. – briantist