Чтобы определить новых членов на уровне тип , а не на уровне экземпляр , необходимо использовать Update-TypeData
вместо Add-Member
:
Update-TypeData -TypeName System.Array -MemberType ScriptMethod -MemberName JoinSpaces `
-Value { $this -join ' ' }
Для принудительного переопределения , добавьте -Force
.
Это делает метод доступным для всех будущих экземпляров типа [System.Array]
.
Чтобы увидеть его в действии:
PS> ('one', 'two').JoinSpaces()
one two
Что касается то, что вы пытались :
Передав [System.Array]
в -InputObject
, вы передали строковый литерал '[System.Array]'
, а не массив type , потому что в аргумент -разбор режиматокен, начинающийся с [
, интерпретируется как строка , а не как выражение.
Чтобы передать тип , вам пришлось бы использовать -InputObject ([System.Array])
- обратите внимание на (...)
- но при этом метод joinSpaces()
будет присоединен к объекту , представляющему сам тип , а не всех экземпляров этого типа.
Другими словами, вы бы смоглисделайте следующее, хотя это не очень полезно:
PS> [System.Array].joinSpaces()
System.Array