tutorial desired powershell configuration-files

powershell - tutorial - desired state configuration



AplicaciĆ³n PowerShell.Config (3)

¿Alguien ha averiguado cómo hacer que PowerShell use los archivos app.config ? Tengo un par de DLL .NET que me gustaría usar en uno de mis scripts pero esperan que sus propias secciones de configuración estén presentes en app.config / web.config .


Referencia cruzada con este hilo, que me ayudó con la misma pregunta: Acceso subsónico a las cadenas de conexión de App.Config desde la DLL referenciada en Powershell Script

Agregué lo siguiente a mi secuencia de comandos, antes de invocar la DLL que necesita configuraciones, donde $ configpath es la ubicación del archivo que quiero cargar:

[appdomain]::CurrentDomain.SetData("APP_CONFIG_FILE", $configpath) Add-Type -AssemblyName System.Configuration

Consulte this publicación para asegurarse de que el archivo de configuración especificado se aplique al contexto en ejecución.


Supongo que las configuraciones tendrían que estar en powershell.exe.config en el directorio de powershell, pero eso parece ser una mala forma de hacer las cosas.

Puede usar ConfigurationManager.OpenMappedExeConfiguration para abrir un archivo de configuración basado en el nombre de la DLL de ejecución, en lugar del exe de la aplicación, pero esto obviamente requeriría cambios en las DLL.


Intentando una nueva respuesta a una vieja pregunta.

Creo que la respuesta moderna sería: no hagas eso. PowerShell es un caparazón. La forma normal de pasar información entre partes del shell son variables de shell. Para powershell que se vería así:

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

Si se espera que la configuración se herede a través de los límites de los procesos, la convención es usar variables de entorno. Extiendo esto a configuraciones que cruzan el límite de C # / PowerShell. Un par de ejemplos:

$env:PATH $env:PSModulePath

Si crees que esto es un antipatrón para .NET, deberías reconsiderarlo. Esta es la norma para las aplicaciones alojadas en PAAS, y será la nueva configuración predeterminada para ASP.NET que se ejecuta en CLR optimizado para servidor (ASP.NET v5).

Ver https://github.com/JabbR/JabbRv2/blob/dev/src/JabbR/Startup.cs#L21
Nota: al momento de escribir esto, estoy vinculando a .AddEnvironmentVariables()

He vuelto a visitar esta pregunta algunas veces, incluso preguntándome a mí mismo. Quería poner una estaca en el suelo para decir que las cosas de PowerShell no funcionan bien con <appSettings> . OMI es mucho mejor adoptar el aspecto shell de PS sobre el aspecto .NET a este respecto.

Si necesita una configuración compleja, tome una cadena JSON. POSH v3 + tiene ConvertFrom-JSON incorporado. Si todo en su proceso utiliza la misma configuración compleja, colóquelo en un archivo .json y apunte a ese archivo desde una variable de entorno.

Si un solo archivo no es suficiente, existen soluciones bien establecidas como el patrón PATH , la resolución .gitignore de GIT o la resolución web.config de ASP.NET (que no repetiré aquí).