2017-01-24 2 views
8

Просто хотите сделать простой пользовательский тип от [System.Collections.ArrayList] до, скажем, короче [arrayList] или что-то в этом роде и положите его в модуль для удобства. Посмотрел на Add-Type, но не мог понять, подходит ли он и как это сделать. Что я хочу получить:Есть ли простой способ создания пользовательских типов в Powershell?

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

ответ

9

Вы ищете type accelerator.

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

Я бы не стал использовать нестандартные ускорители. У PowerShell есть хорошая поддержка завершения вкладок для классов, так как по крайней мере v3.

Так что, если вы наберете [arraylTAB, то он заполнит полное имя для вас.

Ryan Bemrose Воспитан большой пункт; [accelerators] тип ускорителя не доступен по умолчанию, но вы можете создать его так:

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

Параметр '[ускорители]' акселератор не включена по умолчанию на моем PS, хотя Я могу добавить его с помощью '$ acc = [psobject] .assembly.gettype (" System.Management.Automation.TypeAccelerators "); $ acc :: Добавить ('ускорители', $ acc) ' –

8

Если вы просто хотите, чтобы избежать повторного печатая System.Collections.ArrayList все время, вы можете просто присвоить тип литерала переменной и использовать это:

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

или, используя v5.0 new() конструктор:

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

О да, мне тоже нравится. – briantist

Смежные вопросы