2011-03-11 92 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分辨率(我這裏就不重複了)。