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