5

我升级到 PowerShell v5.0.10586.117,现在我无法从我的 app.config 文件访问 AppSettings。该代码适用于 PowerShell v4(我已经在其他安装了 v4 的计算机上尝试过它,它从 AppSettings 返回数据)。

我在 PowerShell 中设置应用程序配置

[System.AppDomain]::CurrentDomain.SetData("APP_CONFIG_FILE", $AppConfigPath)

我可以验证当前域是否具有应用程序设置

[System.AppDomain]::CurrentDomain.GetData("APP_CONFIG_FILE")

返回PATH\App.config 但当我跑步时

[System.Configuration.ConfigurationManager]::AppSettings.count

PowerShell v5 返回:0

但在 PowerShell v4(Windows 7、Windows Server 2008 R2 Enterprise 等)上返回:5

为什么 PowerShell 5 与 PowerShell 4 的行为会有所不同?这是一个错误吗?知道如何解决应用程序设置问题吗?

[更多信息]

我试过做一个解决方法

      $configFile = System.Configuration.ConfigurationManager]::OpenExeConfiguration([System.Configuration.ConfigurationUserLevel]::None)
      $settings = $configFile.AppSettings.Settings
      $retVal = $settings[$keyName].Value
      $configFile.Save([System.Configuration.ConfigurationSaveMode]::Modified)
      [System.Configuration.ConfigurationManager]::RefreshSection($configFile.AppSettings.SectionInformation.Name)

通过使用 $retVal 的这项工作,我可以从我期望的 AppSettings 中获取数据,但稍后它在我正在导入的期望 App Config 数据存在的 .dll 上失败。

[更新 1]:我在 Windows 8、Windows 8.1 和 Server 2012 上升级到 PowerShell 5 并遇到了同样的问题。更新了标题和问题描述,以反映它在我测试过的所有 PowerShell 5 实例上。

[更新 2]:

根据@PetSerAl,我发现如果我在设置配置文件之前尝试获取 AppSetting,我将在 PowerShell v4 中遇到同样的问题

[System.Configuration.ConfigurationManager]::AppSettings
[System.AppDomain]::CurrentDomain.SetData("APP_CONFIG_FILE", $AppConfigPath)
[System.Configuration.ConfigurationManager]::AppSettings.Count

0在 PowerShell v4 中返回。

如果我将我的应用程序配置文件移动到,C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe.config那么我返回数据没有问题,我正在加载的外部 dll 也没有问题,即应用程序配置中的预期信息

4

1 回答 1

1

这似乎是 PowerShell 5 早期版本中的一个错误。我已经升级到 PowerShell 5.1.14409.1005 并且问题已经解决。

于 2017-08-23T21:47:50.503 回答