У меня есть Powershell скрипт со следующим кодом в нем ...Линия кода Powershell не запускается при вызове через функцию, но будет работать напрямую. Какие могут быть возможные причины?
$appdir = Split-Path -Path $MyInvocation.MyCommand.Path
$xfrdir = $appdir + "\xfr\"
$cfgFile = "ofx_config.cfg"
$cfgPath = $appdir + "\" + $cfgFile
$configData = New-Object System.Collections.ArrayList
# --- some other code here...
function Load-Config()
{
if (test-path ($cfgPath))
{
$configData = Import-Clixml -path "$cfgPath"
}
}
# ---some other code here
load-config
Когда я просто запустить этот скрипт в псе ISE, нагрузка конфигурация работает, потому что в конце сценария (я проверил это с точкой останова), но переменная $ configData остается пустой.
Но если я немедленно скопирую и миную строку $configData = Import-Clixml -path "$cfgPath"
в командной строке powershell и запустим ее, тогда $ configData загружается данными. Есть ли у кого-нибудь идеи, что может произойти?
EDIT
Я думаю, что то, что вы говорите, что $ configData в $configData = Import-Clixml -path "$cfgPath"
проходит лечение в целом отдельной переменной (и является локальной для функции) из обзорных правил. Я думал, что это будет больше похоже на класс C#, и поэтому будет присваиваться переменной уровня скрипта с тем же именем.
Я ЛЮБЛЮ силу, но динамическая типизация делает вещи сложнее.
EDIT 2
Оба ответа были проницательными. В таком случае я обычно даю ответ человеку с наименьшей репутацией. И во всяком случае, я сделал второй пример Энди.
Сет