2008-08-20 39 views
22

PowerShellにapp.configファイルを使用させる方法はありますか?いくつかの.NET DLLをスクリプトの1つで使用したいと思っていますが、自分の設定セクションがapp.config/web.configに存在することを期待しています。PowerShell 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

+0

+1ありがとうございました!この問題を解決するネット上の唯一の解決策は、 'ConfigurationManager.OpenMappedExeConfiguration'であり、参照されるアセンブリを制御できないシナリオはありません。これは私の場合に最適です。 – fozylet

+2

このコードは機能しませんでした。私はRobert Mooneyのソリューションを使用して終了しました:http://stackoverflow.com/questions/16216736/loading-app-config-into-the-appdomain#answer-33290175 –

6

私は設定がpowershell.exe.configのpowershellディレクトリになければならないと思っていますが、それはやり方が悪いようです。

ConfigurationManager.OpenMappedExeConfigurationを使用すると、アプリケーションexeではなく実行中のDLL名に基づいて構成ファイルを開くことができますが、明らかにDLLの変更が必要になります。

+0

私はこのような解決法を強く使用しません。 STDOUTまたはASP.NET WebAPIアプリケーションにJSONとしてデータを書き込むコンソールアプリケーションでラップします。コンソールとAPIの選択は、ホスティングとセキュリティによって異なります。 – yzorg

+0

これを使わない別の理由:PowerShellはOSとpowershell.exeで更新されます。configは保護されたOSファイルです。つまり、メモ帳で編集することはできません。 – yzorg

2

古い質問に対する新しい回答を試みています。

私は現代の答えがそうであると思います:それをしないでください。 PowerShellはシェルです。シェルの部分間で情報を渡す通常の方法は、シェル変数です。設定が慣例は、環境変数を使用することですプロセスの境界を越えて継承されることが予想されている場合は

$global:MyComponent_MySetting = '12' 
# i.e. 
$PSDefaultParameterValues 
$ErrorActionPreference 

:PowerShellのそれは次のようになります。これを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は解像度、または(私はここでは繰り返しません)ASP.NETのweb.configファイル解像度を.gitignore。

+1

"*しないでください。*" - 確かに、あなたがこの答えに入れた時間を感謝します。しかし、環境変数などは、これらのレガシーアセンブリでは動作しません。彼らは、 'AppSettings'コレクションから設定を読むことができると期待しています。 – Kev

+0

@Kevこれらのアセンブリは、PowerShellのコンテキストでは使用しないでください。自分でPowerShellをホストする必要があるかもしれません。 Visual Studioの「パッケージマネージャコンソール」のような「PowerShellの埋め込み」を参照してください。 – yzorg