2011-03-11 57 views
3

鉴于提供的配置信息的传统方式,自PS的cmdlet的组件,我不能为他们提供配置通过正常的App.config路由信息。向自定义cmdlet提供配置信息的传统方式是什么?什么是自定义的PowerShell命令

+0

[PowerShell App.Config]的可能重复(http://stackoverflow.com/questions/17960/powershell-app-config) – Howli 2014-05-11 23:29:03

+0

引用此主题:http://stackoverflow.com/questions/17960/powershell- app-config – 2011-03-11 20:50:08

+0

请注意,PowerShell cmdlet不必是基于程序集的。您可以在纯PowerShell中创建cmdlet。 – 2015-01-09 23:38:51

回答

1

通常我会只使用参数传递数据表明。

Get-MyData -connectionstring $connectionString -table Test ... 

当那是不实际的(参数太多,等..),那么你可以随时通过参数提供的路径,配置文件:

Get-MyData -Config .\My.config 

然后,您可以读取指定来自cmdlet内部的配置文件。

这允许cmdlet的用户定义他们自己的配置文件来使用。

1

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)在这方面拥抱.NET方面的PS外壳方面要好得多。

如果需要复杂的设置才能JSON字符串。 POSH v3 +内置了ConvertFrom-JSON。如果一切都在你的过程中使用相同的复杂的配置把它放在一个以.json文件,并指向文件从一个环境变量。

如果单个文件不足够有喜欢PATH模式完善的解决方案,GIT的.gitignore分辨率,或ASP.NET的web.config分辨率(我这里就不重复了)。