Powershell对象:引用Self

时间:2015-02-14 14:30:11

标签: powershell object self

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

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

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

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

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:10)

PowerShell和C#非常相似。 C#使用this引用当前实例/本身,而PowerShell使用$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