Доступ к свойствам в классе PowerShell

Мне нужно получить доступ к общим свойствам в функциях моего класса и, к сожалению, вне моего класса в других функциях.

Например

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. Просто я бы предпочел не так.

пожалуйста, порекомендуйте


person Kneemin    schedule 13.04.2016    source источник
comment
У вас есть ресурс, который может объяснить, почему это работает, а $ myvar - нет? Кроме того, если вы создадите ответ с этим, я могу отметить это. Спасибо!   -  person Kneemin    schedule 14.04.2016


Ответы (1)


Я не могу предоставить ссылку прямо сейчас, но я помню, как читал в каком-то блоге PowerShell, что цель этой функции - сделать классы PowerShell более самодостаточными и своевременно обнаруживать ошибки, например, если вы неправильно написали имя переменной.

Парсер просто запрещает вам напрямую ссылаться на случайные переменные в теле метода класса, если вы не добавите к нему префикс global или script scope. Но, по-видимому, не было сделано никаких технических ограничений, чтобы вы не могли ссылаться на переменные каким-либо другим способом.

Итак, вы можете попросить Get-Variable прочитать значение переменной для вас:

Get-Variable myvar -ValueOnly

И вы даже можете это сделать, потому что вложенные блоки скрипта не анализируются:

&{$myvar}
person user4003407    schedule 15.04.2016