2016-04-25 13 views
5

Uaktualniłem do wersji PowerShell 5.0.10586.117, a teraz nie mogę uzyskać dostępu do aplikacji AppSettings z pliku app.config. Kod działa z PowerShell v4 (próbowałem go na innych komputerach z zainstalowaną wersją v4 i zwraca dane z AppSettings).PowerShell 5 AppSettings Bug?

ustawić App Config w PowerShell

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

mogę sprawdzić, czy bieżący domeny ustawień aplikacji z

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

zwrotów PATH\App.config ale gdy uruchamiam

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

PowerShell v5 powraca: 0

ale PowerShell v4 (Windows 7, Windows Server 2008 R2 Enterprise, etc) zwraca: 5

Dlaczego zachowanie się różnić na 5 vs PowerShell PowerShell 4? Czy to błąd? Masz pomysł, jak rozwiązać problem z ustawieniami aplikacji?

[Więcej informacji]

Próbowałem robić obejście z

 $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) 

tej pracy -round pomocą $ retval mogę uzyskać dane z AppSettings że spodziewać się, ale później zawiedzie plik .dll, który importuję, który oczekuje, że dane konfiguracji aplikacji istnieją.

[Aktualizacja 1]: Zaktualizowałem do wersji PowerShell 5 w systemach Windows 8, Windows 8.1 i Server 2012 i otrzymałem ten sam problem. Zaktualizowano tytuł i opis problemu, aby odzwierciedlić to we wszystkich testowanych egzemplarzach PowerShell 5.

[Aktualizacja 2]:

Per @PetSerAl, odkryłem, że będę miał ten sam problem w PowerShell v4 jeśli próbuję uzyskać AppSetting przed ustawić plik konfiguracyjny

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

zwraca 0 w PowerShell v4.

Jeśli przenieść mój plik konfiguracyjny aplikacji do C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe.config wtedy nie mam problemu przekazujących dane, nie mam problemu z zewnętrznych bibliotek DLL, że jestem loading że oczekują informacji w app config

+0

Jeśli z PowerShell v4 najpierw pytasz '[System.Configuration.ConfigurationManager] :: AppSettings' przed' [System.AppDomain] :: CurrentDomain.SetData ("APP_CONFIG_FILE", $ AppConfigPath) ', to czy masz ten sam problem? ? – PetSerAl

+0

'[System.Configuration.ConfigurationManager] :: AppSettings' (* ma *) zwrócić sekcję AppSettings zdefiniowaną w pliku konfiguracyjnym aplikacji bieżącej domeny. Jeśli wywołasz AppSettings bez definiowania pliku konfiguracyjnego aplikacji, domyślnie jest to plik 'C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe.config', który nie istnieje w testowanych systemach. Ponieważ nie istnieje, nie zwróci niczego dla sekcji AppSettings. Mogę spróbować utworzyć plik, ale nie jestem pewien, co próbujesz przetestować. – rogergarrison

+0

'[System.Configuration.ConfigurationManager] :: AppSettings; [System.AppDomain] :: CurrentDomain.SetData ("APP_CONFIG_FILE", $ AppConfigPath); [System.Configuration.ConfigurationManager] :: AppSettings'. Czy zwraca dane z pliku konfiguracyjnego przy drugim dostępie do '[System.Configuration.ConfigurationManager] :: AppSettings'? – PetSerAl

Odpowiedz

1

Wydaje się, że jest to błąd we wcześniejszych wersjach PowerShell 5. Po aktualizacji do wersji PowerShell 5.1.14409.1005 problem został rozwiązany.