如果在函数中生成哈希表,如何在powershell中访问哈希表值?

时间:2015-02-05 10:47:08

标签: powershell powershell-v4.0

我创建了一个简单的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函数,我可以再次显示这些值。但这当然不是解决方案,因为如果设置发生变化并且弹出窗口再次出现,它将显示旧数据。

我在这里缺少什么?

1 个答案:

答案 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]) }
    }
}