Powershell对象:引用自身

Powershell对象:引用自身,powershell,object,self,Powershell,Object,Self,我可以创建一个具有如下四个属性的对象 $pocketKnife = New-Object PSObject -property @{ Color = 'Black' Weight = '55' Manufacturer = 'Buck' Blades = '1' } 它的工作原理与预期基本一致。然而,我似乎不知道如何添加引用对象自身属性的方法。我可以补充一下 $pocketKnife | Add-Member ScriptMethod GetColor {

我可以创建一个具有如下四个属性的对象

$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,我是个新手,我不知道我不知道的是什么。我所知道的是,现在我正在为日志文件路径使用一个全局变量,以及引用它的init和log函数,我正在寻找消除全局变量的最佳方法,并使用PS挖掘它的潜力,同时学习一些编程概念。我所有的Google Fu都只提供了更多关于对象属性的信息,而没有任何关于方法的信息,只提供了一些简单的例子,这些例子会回显一些文本来证明你在这个方法中。 所以,任何建议都是非常感谢的,即使它只是“那棵树上什么也没有”

谢谢

PowerShell和C#非常相似。C#使用当前实例/自身作为引用,而PowerShell使用
$this

美元这个

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

资料来源:

样本:

$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

啊哈!谢谢你。我想我的Obj-C/Swift定位显示在那里除非C也使用Self。无论如何,这让我回到了周末的轨道上。另一方面,我的理解正确吗?在Powershell中,您基本上构建对象并定义它的Init方法,然后调用Init方法?而不是存在在特定时间被调用的标准方法,比如Init、getter和setter?另外,由于我的程序现在已经结构化,所有日志函数都在不同的模块中,这意味着我的新日志对象需要是一个全局变量,是吗?我不是开发人员,所以即使我理解您使用的单词,我的编程经验也不足以完全理解您的问题。:-)您需要了解的是,PowerShell不是一种编程语言,而是一种脚本语言。它基于.NET Framework构建,这意味着它可以使用托管和非托管程序集中90%以上的类等,但它不能替代C、C等。如果您需要定义类或使用高级编程功能,那么您应该编写一个C程序集,在PS中使用它。在Powershell中,我使用日志记录的方式是一个简单的函数,它运行
Out File-Append
等将消息保存到一个文件中,例如,一个全局范围变量指定路径(将在脚本中或首次运行该函数时生成)。是的,要使用在另一个脚本中创建的对象,您应该在全局范围内保存变量,比如<代码> $Global:MyGlobal Value=……/Cord>。您可能要考虑为对象创建自定义类,而不是在MJOLINOR和FRODE上构建它们。F、 我会考虑自定义类选项,但考虑到我不懂C,我可能不得不在短期内下注(我可以把它留给我的Swift班去真正了解OOP。