Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Вернуть символические переменные из функции (http://forum.oszone.net/showthread.php?t=289585)

blackmane 17-10-2014 23:13 2416869

Вернуть символические переменные из функции
 
Доброго дня!
Есть код, который берет настройки скрипта из файла:
Код:

#Выгребаем настройки из файла
        $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 2416979

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

blackmane 18-10-2014 12:43 2416986

Цитата:

Цитата Kazun
Вообще слабо понимаю зачем создавать переменные заново, когда уже есть значения. »

Я Вас не понял.

Цитата:

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

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

Kazun 18-10-2014 15:14 2417023

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


Время: 21:00.

Время: 21:00.
© OSzone.net 2001-