使用Invoke-Expression初始化变量

时间:2011-08-10 14:04:15

标签: scripting powershell

我正在尝试使用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-expression的范围似乎存在一些问题,因为这些值是在read_config函数中设置的,但是当它运行完毕后,值将恢复为原始值。

谁能告诉我这是什么问题?

吉斯利

1 个答案:

答案 0 :(得分:1)

我认为你几乎想通了。这是一个范围问题。在构建$ exp时,将$ Script:放在每个变量名前(所以$ Script:Verbose = 2而不是$ verbose = 2)。这将强制变量的范围到脚本级别。