次のコードを含む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
このスクリプトをpsISEで実行すると、load-configが実行されます。これは、スクリプトの最後にあるためです(ブレークポイントでこれを確認しました)が、$configData変数は空のままです。
しかし、すぐにその行をコピー$configData = Import-Clixml -path "$cfgPath"
してPowerShellコマンドラインに貼り付けて実行すると、$configDataにデータが読み込まれます。誰かが何が起こっているのか考えていますか?
編集
あなたが言っている$configData = Import-Clixml -path "$cfgPath"
のは、スコープ規則のために、inの$ configDataは完全に別個の変数として扱われている(そして関数に対してローカルである)ということだと思います。ac#クラスに似ているので、同じ名前のスクリプトレベルの変数に割り当てると思いました。
私はPowerShellが大好きですが、動的型付けは物事を難しくします。
編集2
両方の答えは洞察に満ちていました。そのような場合、私は通常、評判が最も低い人に答えを出します。そして、私は実際、どのような場合でもアンディの2番目の例を実行しました。
セス