代码之家  ›  专栏  ›  技术社区  ›  erlando

PowerShell应用程序配置

  •  24
  • erlando  · 技术社区  · 17 年前

    有人知道如何使用PowerShell吗 app.config 文件夹?我有几个.NET DLL,我想在我的一个脚本中使用,但它们希望自己的配置节出现在 App.CONFIG / web.config .

    3 回复  |  直到 7 年前
        1
  •  35
  •   Ben Gripka Javed Akram    7 年前

    与此线程交叉引用,这有助于我解决相同的问题: 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
    

    this 发布以确保指定的配置文件应用于正在运行的上下文。

        2
  •  6
  •   samjudson    17 年前

    我猜设置必须在powershell目录的powershell.exe.config中,但这似乎是一种糟糕的方式。

    您可以使用configurationmanager.openmappedexeconfiguration基于执行的dll名称而不是应用程序exe打开配置文件,但这显然需要更改dll。

        3
  •  2
  •   yzorg    10 年前

    试图对一个旧问题作出新的回答。

    我认为现代的答案是:不要这样做。PowerShell是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> . 在这方面,与.NET相比,使用ps的shell方面要好得多。

    如果需要复杂的配置,请使用JSON字符串。V3+有 ConvertFrom-JSON 内置的。如果流程中的所有内容都使用相同的复杂配置,请将其放在.json文件中,并从环境变量指向该文件。

    如果一个文件不足以满足需要,那么就有一些成熟的解决方案,如 PATH 模式, 吉蒂格诺 分辨率,或 ASP.NET Web.config 决议(这里我不重复)。

    推荐文章