Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scripting 使用调用表达式初始化变量_Scripting_Powershell - Fatal编程技术网

Scripting 使用调用表达式初始化变量

Scripting 使用调用表达式初始化变量,scripting,powershell,Scripting,Powershell,我正在尝试使用Invoke表达式初始化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

我正在尝试使用Invoke表达式初始化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
但是调用表达式的范围似乎有一些问题,因为这些值是在read_config函数中设置的,但是当该函数运行完后,这些值会返回到它们的原始值

谁能告诉我是什么问题吗


吉斯利

我想你基本上明白了。这是一个范围问题。在构建$exp时,将$Script:放在每个变量名前面(因此$Script:Verbose=2而不是$Verbose=2)。这将强制将变量的作用域设置为脚本级别。

谢谢,但您能解释一下为什么会发生这种情况吗?所有的变量都是全局变量,所以我不明白这是怎么发生的。这不起作用。我已经尝试过:$Script:Verbose=“2”和$Script:$Verbose=“2”。我误解了什么吗?不,也许我误解了$脚本:verbose应该将作用域强制到脚本级别。让我检查一些东西,当我四处闲逛时,在命令提示符下执行此操作:Help about_scope我想我已经知道了。我用双引号而不是单引号。这是我脚本中太多问题的根源。语法是$Script:Verbose=“2”,如您在开始时所说。谢谢你的帮助