2008-08-20 48 views
22

有沒有人找出如何讓PowerShell使用app.config文件?我有幾個.NET DLL,我想用在我的一個腳本中,但他們希望他們自己的配置部分出現在app.config/web.configPowerShell App.Config

回答

32

交叉參考此線,這讓我同樣的問題: 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 
+3

哇......這些年來的答案:)。謝謝,我會給這個鏡頭。 – Kev 2011-04-11 18:26:30

6

我猜測設置必須在powershell目錄下的powershell.exe.config中,但這似乎是一種不好的做事方式。

您可以使用ConfigurationManager.OpenMappedExeConfiguration基於執行的DLL名稱而不是應用程序exe來打開配置文件,但這顯然需要更改DLL。

+0

我強烈不會使用這樣的解決方案。將它包裝在控制檯應用程序中,該應用程序將數據作爲JSON寫入STDOUT或ASP.NET WebAPI應用程序。控制檯與API之間的選擇取決於託管和安全性。 – yzorg 2016-09-13 22:41:47

+0

不使用此功能的另一個原因:PowerShell獲得了操作系統和powershell.exe的更新。config是一個受保護的操作系統文件,這意味着它不能用記事本編輯。 – yzorg 2016-09-13 22:42:05

2

試圖對舊問題作出新的回答。

我認爲現代的答案是:不這樣做。 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)在這方面接受PS在.NET方面的外殼方面要好得多。

如果您需要複雜的配置,請使用JSON字符串。 POSH v3 +內置了ConvertFrom-JSON。如果進程中的所有內容都使用相同的複雜配置,則將其放在.json文件中,並從環境變量指向該文件。

如果單個文件不足夠有喜歡PATH模式完善的解決方案,GIT的.gitignore分辨率,或ASP.NET的web.config分辨率(我這裏就不重複了)。