PowerShell 应用程序配置
Posted
技术标签:
【中文标题】PowerShell 应用程序配置【英文标题】:PowerShell App.Config 【发布时间】:2010-09-06 06:53:24 【问题描述】:有没有人想出如何让 PowerShell 使用 app.config
文件?我想在我的一个脚本中使用几个 .NET DLL,但他们希望自己的配置部分出现在 app.config
/web.config
中。
【问题讨论】:
【参考方案1】:与此线程交叉引用,这帮助我解决了同样的问题: 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 帖子以确保将指定的配置文件应用于运行上下文。
【讨论】:
哇……这么多年后的答案:)。谢谢,我会试一试。 +1 非常感谢!在整个网络上,唯一提到这个问题的解决方案是ConfigurationManager.OpenMappedExeConfiguration
,而对于我们无法控制引用的程序集的情况,没有一个解决方案!这非常适合我的情况。
这段代码不起作用,我最终使用了罗伯特穆尼的解决方案:***.com/questions/16216736/…
那么,有谁知道你是否可以在 dll 中设置这个?我在设置它时遇到了问题...似乎范围错误,或者我不知道如何在我的 C# dll 模块中编写 Set-AppConfigFile。 /grr【参考方案2】:
我猜测设置必须在 powershell 目录中的 powershell.exe.config 中,但这似乎是一种不好的处理方式。
您可以使用 ConfigurationManager.OpenMappedExeConfiguration 根据正在执行的 DLL 名称而不是应用程序 exe 打开配置文件,但这显然需要更改 DLL。
【讨论】:
我强烈建议不要使用这样的解决方案。将其包装在一个控制台应用程序中,该应用程序将数据作为 JSON 写入 STDOUT 或 ASP.NET WebAPI 应用程序。控制台还是 API 之间的选择取决于托管和安全性。 不使用它的另一个原因:PowerShell 随操作系统更新,而 powershell.exe.config 是受保护的操作系统文件,这意味着它不能只用记事本编辑。【参考方案3】:尝试对旧问题的新答案。
我认为现代答案是:不要那样做。 PowerShell 是一个外壳。在 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 最好采用 PS 的 shell 方面而不是 .NET 方面。
如果您需要复杂的配置,请使用 JSON 字符串。 POSH v3+ 内置了ConvertFrom-JSON。如果您的流程中的所有内容都使用相同的复杂配置,请将其放入 .json 文件并从环境变量指向该文件。
如果单个文件不够用,则有完善的解决方案,例如 PATH
模式、GIT .gitignore 分辨率或 ASP.NET web.config 分辨率(这里不再赘述)。
【讨论】:
“不要那样做。” - 当然,感谢您为这个答案付出的时间。但是环境变量等不适用于这些遗留程序集,他们希望能够从AppSettings
集合中读取他们的配置。
@Kev 那么这些程序集真的不应该在 PowerShell 上下文中使用。您可能必须自己托管 PowerShell。请参阅“嵌入 PowerShell”,ala Visual Studio 的“包管理器控制台”。以上是关于PowerShell 应用程序配置的主要内容,如果未能解决你的问题,请参考以下文章
Powershell - 在应用程序配置文件中找不到程序集绑定重定向
powershell Windows 10 bootstarter脚本:部署配置和应用程序