PowerShell App.Config

时间:2008-08-20 13:33:58

标签: powershell configuration-files

有没有人研究过如何让PowerShell使用app.config个文件?我有一些.NET DLL,我想在我的一个脚本中使用,但是他们希望自己的配置部分出现在app.config / web.config中。

3 个答案:

答案 0 :(得分:36)

使用此主题进行交叉引用,这对我提出了同样的问题: Subsonic Access To App.Config Connection Strings From Referenced DLL in Powershell Script

在调用需要配置设置的DLL之前,我在脚本中添加了以下内容,其中$ configpath是我要加载的文件的位置:

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

请参阅this post以确保指定的配置文件应用于正在运行的上下文。

答案 1 :(得分:6)

我猜测设置必须在powershell目录中的powershell.exe.config中,但这似乎是一种糟糕的做法。

您可以使用ConfigurationManager.OpenMappedExeConfiguration根据正在执行的DLL名称而不是应用程序exe打开配置文件,但这显然需要更改DLL。

答案 2 :(得分:2)

尝试对旧问题的新答案。

我认为现代的答案是:不要这样做。 PowerShell是一个shell。在shell的各个部分之间传递信息的常规方法是shell变量。对于看起来像的powershell:

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

如果希望跨进程边界继承设置,则约定是使用环境变量。我将其扩展到跨越C#/ PowerShell边界的设置。几个例子:

$env:PATH
$env:PSModulePath

如果您认为这是.NET的反模式,您可能需要重新考虑。这是PAAS托管应用程序的标准,并且将成为在服务器优化的CLR(ASP.NET v5)上运行的ASP.NET的新默认值。

https://github.com/JabbR/JabbRv2/blob/dev/src/JabbR/Startup.cs#L21
注意:在撰写本文时,我会链接到.AddEnvironmentVariables()

我已经多次重新审视过这个问题,包括自己问一下。我想说的是,PowerShell的内容与<appSettings>的效果并不理想。在这方面,IMO在.NET方面采用PS的shell方面要好得多。

如果您需要复杂的配置,请使用JSON字符串。 POSH v3 +内置ConvertFrom-JSON。如果进程中的所有内容都使用相同的复杂配置,请将其放在.json文件中,并从环境变量指向该文件。

如果单个文件不够用,那么有完善的解决方案,例如PATH模式, GIT .gitignore 解析或 ASP.NET web.config < / strong>分辨率(我不会在此重复)。