访问powershell类中的属性

时间:2016-04-13 21:16:05

标签: class powershell powershell-v5.0

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

例如

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

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

function do_things{
    echo $myvar
}

当我尝试在$myvar中作为类的一部分访问my_function时,我得到一个解析错误"变量未在方法中定义"这是有意义的,因为变量没有在类中声明,但我会想象属性块中的东西是可用的。

我希望有一些我不知道的东西,并且无法在文档中找到允许我这样做的东西。我无法在班级职能中使用属性,这似乎很愚蠢。

我目前的(不利的)解决方案是让我的类继承自另一个类中定义了一堆静态变量的类,因为您可以通过[MyOtherClass]::static_variable_name访问脚本中的其他任何位置。这并不是我喜欢做的事情。

请告知

1 个答案:

答案 0 :(得分:1)

我现在无法提供参考,但我记得在一些PowerShell博客中阅读,此功能的目的是使PowerShell类更自包含并尽早捕获错误,例如,如果拼错变量名称。

Parser只是不允许您直接在类方法体中引用随机变量,除非您在globalscript范围前添加前缀。但是,显然,没有任何技术限制来阻止您以任何其他方式引用变量。

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

Get-Variable myvar -ValueOnly

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

&{$myvar}