Являются ли модули PowerShell ближе к классам в C#?

Это продолжение моего предыдущего вопроса:

Как создавать реальные объекты с поведением (методами) в PowerShell?

Я думаю, что теперь я могу инкапсулировать свое поведение в классах, но я все еще считаю этот подход хакерским, и я хотел бы решить эту проблему путем PowerShell

Итак, модули Powershell кажутся ответом...

Я хотел бы знать, если, например, я хочу инкапсулировать поведение объектно-ориентированным способом в PowerShell, что было бы лучшим вариантом/подходом?

Предназначены ли модули PowerShell для этой цели?

Изменить 01

Другими словами, как вы, ребята, пишете свои сценарии?

Вы просто пишете их процедурно?

or...

Есть ли более чистый способ применить некоторые концепции объектно-ориентированного программирования при написании сценариев PowerShell?


person Jupaol    schedule 12.02.2013    source источник
comment
Модули на самом деле не выглядят так, как будто они вводят объектную систему, если раньше она не была доступна в PSH.   -  person millimoose    schedule 12.02.2013
comment
Я только что обновил свой вопрос.   -  person Jupaol    schedule 12.02.2013
comment
Итак... ты снова задаешь тот же вопрос, несмотря на то, что получил ответ? (На самом деле их два.)   -  person millimoose    schedule 12.02.2013
comment
Если внимательно читать, то это не то же самое. Последний вопрос дал мне технические инструменты для достижения того, что я хотел, теперь я хочу знать, что было бы лучшим подходом в PowerShell.   -  person Jupaol    schedule 12.02.2013
comment
Или вы могли бы написать этот вопрос более тщательно, изложив свои конкретные проблемы с решением, которое у вас есть, вместо того, чтобы просто туманно просить чище. Кроме того, лучший подход, скорее всего, будет закрыт как неконструктивный — может быть много подходов, подходящих для разных вариантов использования.   -  person millimoose    schedule 12.02.2013
comment
Я ценю это, но я думаю, что это было достаточно конкретно, чтобы вы ответили на него в первую очередь...   -  person Jupaol    schedule 12.02.2013


Ответы (2)


не знаю, лучший ли это метод, но почему бы не использовать pscustomobject?

$o=New-Object -TypeName pscustomobject -Property @{"val"="test"}
Add-Member -InputObject $o -MemberType ScriptMethod -Name upper -Value {$this.val.toUpper()}
$o.upper()

TEST

или, может быть, вам понравится этот проект на codeplex: http://psclass.codeplex.com/

person Loïc MICHEL    schedule 12.02.2013
comment
Этот проект выглядит офигенно. Спасибо, мужик. Я очень строго отношусь к написанию своего кода на C#, а теперь я работаю с PowerShell, и мне просто не нравится писать УГРОЗНЫЙ процедурный код. Я думаю, что я собираюсь создать некоторое доказательство концепций, используя PSClass. Спасибо большое - person Jupaol; 13.02.2013

Мое отношение к этому следующее. Я не верю, что языки сценариев когда-либо были объектно-ориентированными. Большинство из них будут поддерживать какие-то объектные модели, но это не является их основной целью.

Powershell поддерживает его, потому что он построен поверх .NET и, следовательно, у вас есть полный доступ к объектной модели .NET.

Вы можете написать встроенный код C# в сценарии powershell (с классами и всем остальным) и скомпилировать его на лету, а затем выполнить повторно. Как только вы привыкнете к этому, это совсем не сложно.

Сама по себе powershell не предоставляет объектную систему далеко за пределы того, что вы можете найти в .NET.

Если вы еще не нашли его, обратитесь к командлету Add-Member, это будет ближе всего к тому, что вам нужно, если по каким-либо религиозным или культурным причинам вы не хотите встраивать классы С# в свой код powershell.

Надеюсь это поможет.

person Andrew Savinykh    schedule 12.02.2013