Powershell对象:引用Self

Gor*_*don 5 powershell object self

我可以用这样的四个属性创建一个对象

$pocketKnife = New-Object PSObject -property @{
    Color = 'Black'
    Weight = '55'
    Manufacturer = 'Buck'
    Blades = '1'
}
Run Code Online (Sandbox Code Playgroud)

并且基本上按预期工作.但是,我似乎无法理解如何添加引用对象自己的属性的方法.我可以加上这个

$pocketKnife | Add-Member ScriptMethod GetColor {
    Write-Host "Color = $($pocketKnife.Color)" 
}
Run Code Online (Sandbox Code Playgroud)

然后我可以调用$ pocketKnife.GetColor()并按预期工作.但是我必须将对象引用硬连接到方法中,并且实际上我引用了在对象本身之外定义的对象变量.我想做的是

$pocketKnife | Add-Member ScriptMethod GetColor {
    Write-Host "Color = $($Self.Color)" 
}
Run Code Online (Sandbox Code Playgroud)

最后,我想创建一个Logger对象,它将初始化自身并在属性中建立适当的日志文件名,并且具有一个采用字符串参数的Log方法,并且在调用时它会记录到属性中的日志文件.我觉得这可能不仅仅是PowerShell真正打算面向对象.就像我应该将我的(自定义)对象的概念限制为结构的数据,而不是类和实例?FWIW,我对OOP足够新,我不知道我不知道什么.我所知道的是,现在我正在使用全局变量作为日志文件路径,以及引用它的init和log函数,我正在寻找消除全局变量的最佳方法,并且还使用PS来实现它的潜力,并在我学习时学习一些编程概念.而且我的所有Google Fu最终都会获得有关对象属性的更多信息,而不仅仅是简单示例之外的方法,它们会回显一些文本以证明您在方法中.因此,任何建议都非常感谢,即使它只是"不是那个树"

谢谢!

Fro*_* F. 11

PowerShell和C#非常相似.this当PowerShell使用时,C#用于引用当前实例/本身$this

$此

在定义脚本属性或脚本方法的脚本块中,$ This变量引用正在扩展的对象.

来源:about_Automatic_Variables

样品:

$pocketKnife2 = New-Object PSObject -property @{
    Color = 'Black'
    Weight = '55'
    Manufacturer = 'Buck'
    Blades = '1'
}

$pocketKnife2 | Add-Member ScriptMethod GetColor {
    Write-Host "Color = $($this.Color)" 
}

$pocketKnife2.GetColor()
Color = Black

$pocketKnife2.Color = 'Red'

$pocketKnife2.GetColor()
Color = Red
Run Code Online (Sandbox Code Playgroud)

  • 您可能需要考虑为对象创建自定义类,而不是动态构建它们http://stackoverflow.com/questions/18705158/powershell-create-a-class-file-to-hold-custom-objects (3认同)