【发布时间】:2012-02-24 21:54:17
【问题描述】:
我有一个包含以下代码的 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
当我在 ps ISE 中运行此脚本时,load-config 会运行,因为它位于脚本的末尾(我使用断点验证了这一点),但 $configData 变量仍然为空。
但是,如果我立即将 $configData = Import-Clixml -path "$cfgPath" 行复制并传递到 powershell 命令行并运行它,则 $configData 将加载数据。有没有人有任何想法可能会发生什么?
编辑
我认为您所说的是由于范围规则,$configData = Import-Clixml -path "$cfgPath" 中的 $configData 被视为一个完整的单独变量(并且是函数的本地变量)。我认为它更像是一个 c# 类,因此会分配给同名的脚本级变量。
我喜欢 powershell,但动态类型确实让事情变得更棘手。
编辑 2
两个答案都很有见地。在这种情况下,我通常会向声誉最低的人提供答案。无论如何,我确实做了安迪的第二个例子。
赛斯
【问题讨论】: