向自定义Powershell cmdlet提供配置信息的传统方法是什么?

时间:2011-03-11 18:16:29

标签: powershell

鉴于自定义PS cmdlet是程序集,我无法通过正常的App.config路由为它们提供配置信息。向自定义cmdlet提供配置信息的传统方法是什么?

2 个答案:

答案 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 决议(我在此不再赘述)。