如何创建PowerShell和行为的真实对象(方法)?(How to create real obj

2019-08-16 22:00发布

也许这个问题已经回答过了....但我还没有找到一个明确的答案,以我的需求。

顺便说一句,我使用的PowerShell 3

嗯,我在PowerShell中新的,但我有很多的经验,作为一个C#开发人员,所以工作对象是对我很重要。

所以我在PowerShell脚本知道是否有申请OOP概念 干净的方式 (当然不是所有的人,尽管这将是真棒),例如有,我愿做具体的事情。

注:我知道,我可以写在PowerShell中的C#代码来创建DTO的,也我可以创建在C#的PowerShell二进制模块,我已经做了,在过去,但我在寻找什么现在是写的能力我所有的代码在PowerShell中,但在面向对象的方式

的事情,我想这样做:

  • 建立在PowerShell中的对象,并公开写在PowerShell中还有一个功能,是这样的:

     function New-Person ( [Parameter()][string]$firstName ) { function Walk() { Write-Host "Walking..."; } $person = New-Object psobject; $person | Add-Member -MemberType NoteProperty -Name FirstName -Value $firstName; #This line does not work #$person | Add-Member -MemberType CodeMethod -Name Walk -Value Walk; return $person; } $MyPerson = New-Person -firstName "JP"; $MyPerson; #This line does not work $MyPerson.Walk(); 
  • 封装的行为,这意味着创建我的对象内的功能,然后将其标记为私有

  • [很高兴有]。 创建基类,所以我可以继承和专注自己的行为覆盖方法

  • [很高兴有]。 创建接口,这样我就可以开始在单元测试中的思维隔离我PowerShell的方法(我知道有像纠缠的工具来做到这一点,我只是专注于面向对象特性)

什么到目前为止,我所做的是创建具有属性的对象只(DTO的),但我想添加行为,我的对象

如果你们点我在正确的方向我会很感激

Answer 1:

两个选项与方法创建对象:

  1. 加入会员
  2. 新模块-AsCustomObject

代码示例:

$person | Add-Member -MemberType ScriptMethod -Value {
    'I do stuff!'
}

$person = New-Module -AsCustomObject -ScriptBlock {
    $Property = 'value'
    [string]$Other = 'Can be strongly typed'

    function MyMethod {
        'I do stuff!'
    }

}

编辑:私有/公共发言......在后一个例子财产将不会显示“默认”。 你可以决定使用什么是公共Export-ModuleMember并指定-Variable (性质)和/或-Function (方法),这将是公众。 没有明确的Export-ModuleMember它会表现一样“正常”模块-出口仅函数(方法)。



Answer 2:

如果你想完全面向对象(包括继承,虽然不是接口),然后PSClass是MS-PL许可的实施。



Answer 3:

PowerShell的V5引入了满级的支持,因此很容易与性能,以建立自己的类和实现方法。

看看Trevor的伟大的博客文章对这里的话题。 特雷弗沙利文,实现一个.NET类



文章来源: How to create real objects with behavior (methods) in PowerShell?