在 powershell 中访问属性 class

Accessing properties within powershell class

我需要在我的 class 函数中访问公共属性,不幸的是,在我的 class 之外的其他函数中。

例如

Class Myclass {
    [Void]my_function(){
        $file_location = "$myvar"
    }
}

properties { # some props
    $myvar = "somefile.txt"
}

function do_things{
    echo $myvar
}

当我尝试访问 my_function 中的 $myvar 作为 class 的一部分时,我收到一个解析错误 "variable is not defined in the method",这是有道理的,因为变量不是在 class 中声明,但我认为属性块中的内容是可用的。

我希望有一些我不知道并且无法在允许我执行此操作的文档中找到的东西。我不能在我的 class 函数。

我当前的(不利的)解决方案是让我的 class 继承自另一个 class ,它只定义了一堆静态变量,因为您可以通过以下方式访问脚本中其他任何地方的变量做 [MyOtherClass]::static_variable_name。这不是我喜欢的方式。

请指教

我现在无法提供参考,但我记得在一些 PowerShell 博客上读过,该功能的目的是使 PowerShell classes 更加自包含并及早发现错误,例如,如果你拼错了变量名。

解析器只是不允许您直接在 class 方法主体中引用随机变量,除非您在其前面加上 globalscript 作用域。但是,显然,没有技术限制来阻止您以任何其他方式引用变量。

这样,您可以让Get-Variable为您读取变量值:

Get-Variable myvar -ValueOnly

你甚至可以做到这一点,因为没有分析嵌套的脚本块:

&{$myvar}