鉴于自定义PS cmdlet是程序集,我无法通过正常的App.config路由为它们提供配置信息。向自定义cmdlet提供配置信息的传统方法是什么?
答案 0 :(得分:1)
通常我建议只使用参数传递数据。
Get-MyData -connectionstring $connectionString -table Test ...
如果不实用(参数太多等等),那么你总是可以通过参数提供配置文件的路径:
Get-MyData -Config .\My.config
然后,您可以从cmdlet中读取指定的配置文件。
这允许cmdlet的用户定义自己的配置文件以供使用。
答案 1 :(得分:1)
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 决议(我在此不再赘述)。