Aplikacja PowerShell.Config

Czy ktoś wymyślił jak zmusić PowerShella do używania plików app.config? Mam kilka. Net DLL, które chciałbym użyć w jednym z moich skryptów, ale oczekują, że ich własne sekcje config będą obecne w app.config/web.config.

Author: Kev, 2008-08-20

3 answers

Odsyłacz do tego wątku, który pomógł mi w tym samym pytaniu: Subsoniczny Dostęp Do Aplikacji.Konfiguracja ciągów połączeń z odwołanej biblioteki DLL w skrypcie Powershell

Dodałem następujący skrypt przed wywołaniem biblioteki DLL, która wymaga ustawień config, gdzie $configpath jest lokalizacją pliku, który chcę załadować:

[appdomain]::CurrentDomain.SetData("APP_CONFIG_FILE", $configpath)
Add-Type -AssemblyName System.Configuration

Zobacz this post, aby upewnić się, że podany plik konfiguracyjny jest zastosowany do uruchomionego kontekstu.

 35
Author: millerjs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-10 05:04:56

Domyślam się, że ustawienia muszą być w powershell.exe.config w katalogu powershell, ale to chyba zły sposób na robienie rzeczy.

Można użyć ConfigurationManager.OpenMappedExeConfiguration aby otworzyć plik konfiguracyjny oparty na wykonującej nazwie DLL, a nie exe aplikacji, ale oczywiście wymagałoby to zmian w bibliotekach DLL.

 6
Author: samjudson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-20 14:11:34

próba nowej odpowiedzi na Stare pytanie.

Myślę, że współczesna odpowiedź brzmiałaby: nie rób tego. PowerShell to powłoka. Normalnym sposobem przekazywania informacji pomiędzy częściami powłoki są Zmienne powłoki. Dla PowerShella wyglądałoby to tak:

$global:MyComponent_MySetting = '12'
# i.e. 
$PSDefaultParameterValues
$ErrorActionPreference

Jeśli oczekuje się, że ustawienia będą dziedziczone poza granicami procesów, konwencją jest użycie zmiennych środowiskowych. Rozszerzam to na ustawienia przekraczające granicę C# / PowerShell. Kilka przykłady:

$env:PATH
$env:PSModulePath

Jeśli uważasz, że jest to anty-wzorzec dla. NET, możesz rozważyć to ponownie. Jest to norma dla aplikacji hostowanych przez PAAS i będzie nową wartością domyślną dla ASP.NET uruchamianie na serwerze zoptymalizowanym CLR (ASP.NET v5).

Zobacz https://github.com/JabbR/JabbRv2/blob/dev/src/JabbR/Startup.cs#L21
Uwaga: w momencie pisania linkuję do .AddEnvironmentVariables()

[5]}powtórzyłem to pytanie kilka razy, w tym zadając je sobie. Chciałem włożyć kołek w grunt, aby powiedzieć, że rzeczy PowerShell nie działa dobrze z <appSettings>. IMO znacznie lepiej jest przyjąć aspekt powłoki PS nad aspektem. NET w tym zakresie.

Jeśli potrzebujesz skomplikowanej konfiguracji weź łańcuch JSON. POSH v3 + ma wbudowane convertfrom-JSON. Jeśli wszystko w procesie używa tej samej złożonej konfiguracji umieścić go w .pliku json i wskazać na ten plik ze zmiennej środowiskowej.

Jeśli pojedynczy plik nie wystarczy, istnieją dobrze ustalone rozwiązania takie jak PATH wzorzec, GIT .gitignore resolution, or ASP.NET www.config rozdzielczość (której tutaj nie będę powtarzał).

 2
Author: yzorg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-30 17:40:23