5

PowerShell v5.0.10586.117 にアップグレードしたところ、app.config ファイルから AppSettings にアクセスできなくなりました。このコードは PowerShell v4 で動作します (v4 がインストールされている他のコンピューターで試してみたところ、AppSettings からデータが返されます)。

PowerShell で App Config を設定しました

[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

0PowerShell v4 で返されます。

アプリ構成ファイルを移動した場合C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe.config、データを返す問題はありません。また、アプリ構成の情報を期待する、ロードしている外部 dll の問題もありません。

4

1 に答える 1