У меня есть скрипт 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
Когда я просто запускаю этот скрипт в PSE ISE, запускается load-config, потому что он находится в конце скрипта (я проверил это с точкой останова), но переменная $ configData остается пустой.
Но если я сразу скопирую и пройду строку $configData = Import-Clixml -path "$cfgPath"
в командную строку powershell и запусту ее, то $ configData загружается с данными.У кого-нибудь есть идеи, что может происходить?
РЕДАКТИРОВАТЬ
Я думаю, что вы говорите, что $ configData в $configData = Import-Clixml -path "$cfgPath"
обрабатывается как отдельная переменная (и является локальной для функции) из-за области видимостиправила.Я думал, что это будет больше похоже на класс AC # и поэтому присвоит переменной уровня сценария с тем же именем.
Я ЛЮБЛЮ PowerShell, но динамическая типизация усложняет задачу.
РЕДАКТИРОВАТЬ 2
Оба ответа были проницательными.В таком случае я обычно даю ответ человеку с наименьшей репутацией.И я сделал на самом деле второй пример Энди в любом случае.
Сет