Инициализируйте переменные с помощью выражения-вызова - PullRequest
1 голос
/ 10 августа 2011

Я пытаюсь использовать Invoke-Expression для инициализации ряда переменных в моем скрипте powershell.

Вот переменные:

$saved_state_file = './var/mirmon.tmp';
$log_file = './var/mirmon.log';
$once_file = './var/once';
$plugin_dir = './libexec';
$verbose = 0;
$pause = 0;
$submit_method = 'ssh,http,smtp';
$http_user = $null
$http_pass = $null

Вот функция:

function read_config{
     $lasthost = 'Default'
     $return = @()
     $checks = @()
     $logs = @()
     foreach ($s in Get-Content $config_file){
         if(){...}
         else{
             $split = $s.Split('=',$option)
             $exp = "$" + $split[0] + '=' + '"' + $split[1] + '"'
             Invoke-Expression $exp
             }
      }
$return = $checks,$logs
return $return

}

А вот пример того, что яЯ пытаюсь прочесть:

verbose=2
http_user = user
http_pass = passw
smtp_host = test.some.com
log_file=/tmp/test.log
saved_state_file=/tmp/test.test.tmp
hung_time=20
plugin_dir=libexec
once_file=/tmp/once
submit_method=http

Но, похоже, существует некоторая проблема с областью выражения invoke, потому что значения установлены в функции read_config, но после завершения работы значения возвращаются к своим исходнымзначения.

Может кто-нибудь сказать мне, в чем проблема?

Gísli

1 Ответ

1 голос
/ 10 августа 2011

Я думаю, вы в значительной степени поняли это.Это проблема сферы.Когда вы строите свой $ exp, поместите $ Script: перед каждым именем переменной (поэтому $ Script: Verbose = 2 вместо $ verbose = 2).Это приведет к тому, что область видимости переменной перейдет на уровень сценария.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...