2016-04-13 39 views
1

我需要訪問我的類函數中的公共屬性,並且不幸的是,在我的類之外的其他函數中。在PowerShell類中訪問屬性

例如

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

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

function do_things{ 
    echo $myvar 
} 

當我嘗試內my_function訪問$myvar作爲類的一部分,得到了一個解析錯誤,這使得有義「變量沒有在該方法定義」作爲變量不在類中聲明,但我會想象在屬性塊中的東西是可用的。

我希望有些東西我沒有意識到,並且在文檔中找不到,這讓我無法做到這一點。看起來很愚蠢,我不能在我的類函數中使用屬性。

我目前的(不利的)解決方案是讓我的類繼承另一個只包含一堆靜態變量的類,因爲您可以通過執行[MyOtherClass]::static_variable_name來訪問腳本中的其他任何地方。我想如何去做

請告知

+1

'$ file_location = Get-Variable myvar -ValueOnly' – PetSerAl

+0

您是否有資源可以解釋爲什麼可行,但$ myvar不會?另外,如果您用此創建答案,我可以標記它。謝謝! – Kneemin

回答

1

我不能提供參考但是我記得在某些PowerShell博客中閱讀過,該功能的目的是讓PowerShell類更加自我包含並提前發現錯誤,例如,如果拼錯了變量名稱。

解析器不允許您直接在類方法體中引用隨機變量,除非您在前面加上globalscript作用域。但是,顯然,沒有任何技術限制來阻止您以任何其他方式引用變量。

這樣,你可以要求Get-Variable爲你讀變量值:

Get-Variable myvar -ValueOnly 

你甚至可以做這一點,因爲嵌套的腳本塊,不分析:

&{$myvar}