我创建了一个简单的GUI,用于在用户单击“确定”后立即输入存储在.txt文件中的某些值。 为了验证,我在弹出窗口中显示刚刚创建的文件的数据及其输入。
由于我想在我用于项目的其他几个.ps1文件中使用配置文件的数据,我开始将事物移到globals.ps1文件中。一切都很好,除了我不能再显示哈希表。
这是我在globals.ps1中的内容:
# Wshell popup
$wshell = New-Object -ComObject Wscript.SHell
# read config
function readcfg
{
Get-Content -Path $cfg | foreach-object -begin { $conf = @{ } } -process {`
$key = [regex]::split($_, ':');
if (($key[0].CompareTo("") -ne 0) -and ($key[0].StartsWith("[") -ne $True))`
{ $conf.Add($key[0], $key[1]) }
}
}
这是我的设置GUI中的部分,如果按下确定按钮,则执行该部分:
$cfgData = "
[Account]
Screds:" + $Admaccount.text + "
Spw:" + $PW + "
[Domainconfig]
Sdomain:" + $domain.text + "
SSearchBase:" + $searchBase.text + "
SdeactivatedUsers_OU:" + $deactivatedUsersOU.text + ""
Out-File -filepath $cfg -inputobject $cfgData -Force
Start-Sleep -s 1
$wshell.Popup("Settings saved:`nAccount: " + $conf.Screds + "`nDomain: " + $conf.Sdomain + "`nSearchBase: " + $conf.SSearchBase + "`ndeactivatedUsersOU " + $conf.SdeactivatedUsers_OU + "", 0, "Yarr...!", 0x0)
如果我将get-Content移出readcfg函数,我可以再次显示这些值。但这当然不是解决方案,因为如果设置发生变化并且弹出窗口再次出现,它将显示旧数据。
我在这里缺少什么?
答案 0 :(得分:0)
正如Kayasax在评论中所说的,它只是一个超出范围"问题。
在将函数和散列表声明为全局后,它再次完美地运行。
# read config
function global:readcfg
{
Get-Content -Path $cfg | foreach-object -begin { $global:conf = @{ } } -process {`
$key = [regex]::split($_, ':');
if (($key[0].CompareTo("") -ne 0) -and ($key[0].StartsWith("[") -ne $True))`
{ $global:conf.Add($key[0], $key[1]) }
}
}