PowerShell App.Config

Кто-нибудь работал, как заставить PowerShell использовать app.configфайлы? У меня есть пара .NET DLL, которые я хотел бы использовать в одном из моих сценариев, но они ожидают, что их собственные разделы конфигурации будут присутствовать в app.config/ web.config.

20.08.2008 13:33:58
3 ОТВЕТА
РЕШЕНИЕ

Перекрестные ссылки с этим потоком, который помог мне с тем же вопросом: Дозвуковой доступ к строкам соединения App.Config из ссылочной DLL в скрипте Powershell

Я добавил следующее в свой скрипт, прежде чем вызывать DLL, которая нуждается в настройках конфигурации, где $ configpath - это местоположение файла, который я хочу загрузить:

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

Смотрите этот пост, чтобы убедиться, что указанный файл конфигурации применяется к рабочему контексту.

37
10.08.2018 05:04:56
Вау ... ответ после всех этих лет :). Спасибо, я сделаю это.
Kev 11.04.2011 18:26:30
+1 Большое спасибо! Во всей сети единственное решение, упомянутое для этой проблемы, - ConfigurationManager.OpenMappedExeConfigurationни одно для сценария, где у нас нет контроля над ссылочной сборкой! Это прекрасно работает для моего случая.
fozylet 22.02.2012 06:16:50
Этот код не работал, в итоге я использовал решение Роберта Муни: stackoverflow.com/questions/16216736/…
Tahir Hassan 16.12.2015 10:53:16
Итак, кто-нибудь знает, если вы можете установить это внутри DLL? У меня проблемы с его настройкой ... кажется, что область действия неверна или я не знаю, как написать Set-AppConfigFile внутри моего модуля C # dll. / грр
Omzig 7.12.2017 02:50:15

Я предполагаю, что настройки должны быть в powershell.exe.config в каталоге powershell, но это плохой способ сделать что-то.

Вы можете использовать ConfigurationManager.OpenMappedExeConfiguration, чтобы открыть файл конфигурации, основанный на имени исполняемой DLL, а не на exe приложения, но для этого, очевидно, потребуются изменения в DLL.

6
20.08.2008 14:11:34
Я бы сильно НЕ использовал такое решение. Оберните его в консольное приложение, которое записывает данные в виде JSON в STDOUT или приложение ASP.NET WebAPI. Выбор между консолью и API будет зависеть от хостинга и безопасности.
yzorg 13.09.2016 22:41:47
Другая причина НЕ использовать это: PowerShell обновляется вместе с ОС, а powershell.exe.config - это защищенный файл ОС, поэтому его нельзя редактировать с помощью блокнота.
yzorg 13.09.2016 22:42:05

Попытка нового ответа на старый вопрос.

Я думаю, что современный ответ будет: не делай этого. PowerShell - это оболочка. Обычный способ передачи информации между частями оболочки - переменные оболочки. Для powershell это будет выглядеть так:

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

Если ожидается, что настройки будут наследоваться через границы процессов, соглашение заключается в использовании переменных среды. Я распространяю это на настройки, которые пересекают границу C # / PowerShell. Пара примеров:

$env:PATH
$env:PSModulePath

Если вы думаете, что это антишаблон для .NET, вы можете пересмотреть. Это норма для приложений, размещаемых PAAS, и она станет новым значением по умолчанию для ASP.NET, работающего на оптимизированной для сервера среде CLR (ASP.NET v5).

См. Https://github.com/JabbR/JabbRv2/blob/dev/src/JabbR/Startup.cs#L21
Примечание: на момент написания я ссылаюсь на.AddEnvironmentVariables()

Я несколько раз повторял этот вопрос, в том числе и сам. Я хотел сделать ставку на то, чтобы говорить о том, что с PowerShell ничего не получается <appSettings>. ИМО, в этом отношении гораздо лучше охватить аспект оболочки PS, чем аспект .NET.

Если вам нужна сложная конфигурация, возьмите строку JSON. POSH v3 + имеет встроенную функцию ConvertFrom-JSON . Если все в вашем процессе использует одну и ту же сложную конфигурацию, поместите ее в файл .json и укажите на этот файл из переменной среды.

Если одного файла недостаточно, существуют хорошо зарекомендовавшие себя решения, такие как PATHшаблон, разрешение GIT .gitignore или разрешение ASP.NET web.config (что я не буду здесь повторять).

2
30.01.2015 17:40:23
« Не делай этого », - конечно, и цените время, которое вы вложили в этот ответ. Но переменные окружения и т. Д. Не будут работать с этими устаревшими сборками, они ожидают, что смогут прочитать свои конфигурации из AppSettingsколлекции.
Kev 30.01.2015 21:07:48
@Kev Тогда эти сборки действительно не следует использовать в контексте PowerShell. Возможно, вам придется разместить PowerShell самостоятельно. См. «Внедрение PowerShell», также как «Консоль диспетчера пакетов» Visual Studio.
yzorg 13.09.2016 22:29:42