Войти

Показать полную графическую версию : [решено] Вернуть символические переменные из функции


blackmane
17-10-2014, 23:13
Доброго дня!
Есть код, который берет настройки скрипта из файла:

#Выгребаем настройки из файла
$f_set = [System.IO.File]::ReadAllText("$include_settings")
$start = $f_set.IndexOf("$begin")+$begin.Length
$end = $f_set.IndexOf("$stop")
$f_res = $f_set.Substring($start, $end-$start) | ConvertFrom-StringData
foreach ($key in $($f_res.keys)) {
set-variable -name $key -value $f_res[$key]
}

сам файл в таком виде (имя_переменной = значение_переменной):

[r_start]
Dest = "B:\\Backup\\Full"
Source = "D:\\"
[r_end]

[start]
bla = "bla"
[end]


Код в итоге создает (точнее переопределяет значения) переменные для работы скрипта.
Он отлично отрабатывает, но этот вариант не является универсальным, хотелось бы завернуть его в функцию, дабы, указав другие входящие параметры, я мог бы использовать функцию с другими скриптами.
Но, как я ни пытался, а переменные мне не вытащить из функции, проблема в том, что заблаговременно имя переменной неизвестно и вариант:
return $name_var1,$name_var2...,$name_varN
Использовать не получится.
Варианты с массивами и хэш-таблицами не подходят - придется переписывать весь имеющийся код + вид будет не комильфо + в коде не будет смысла - он сам работает с хэш-таблицей.

Как осуществить возврат всех созданных переменных из функции?
Спасибо.

Kazun
18-10-2014, 12:06
1) Объявить переменные уровня global,script(set-variable -Scope).
2) Вернуть hash-массив($f_res). Вообще слабо понимаю зачем создавать переменные заново, когда уже есть значения.

blackmane
18-10-2014, 12:43
Вообще слабо понимаю зачем создавать переменные заново, когда уже есть значения. »
Я Вас не понял.

Вернуть hash-массив($f_res) »

Если я верну хэш-массив, то для получения значения переменной $Dest, мне придется писать $f_res.Dest, или я не прав?

Kazun
18-10-2014, 15:14
Не значение переменной $Dest, а значение ключа Dest. $f_res.Dest - можно и так, или если есть сильное желание создать уже переменную в не функции - set-variable -name $key -value $f_res[$key]




© OSzone.net 2001-2012