Configurazione dell'app PowerShell
-
09-06-2019 - |
Domanda
Qualcuno ha capito come utilizzare PowerShell app.config
File?Ho un paio di DLL .NET che vorrei utilizzare in uno dei miei script, ma si aspettano che siano presenti le proprie sezioni di configurazione app.config
/web.config
.
Soluzione
Riferimento incrociato con questo thread, che mi ha aiutato con la stessa domanda:Accesso subsonico alle stringhe di connessione App.Config dalla DLL di riferimento nello script PowerShell
Ho aggiunto quanto segue al mio script, prima di richiamare la DLL che necessita di impostazioni di configurazione, dove $configpath è la posizione del file che voglio caricare:
[appdomain]::CurrentDomain.SetData("APP_CONFIG_FILE", $configpath)
Add-Type -AssemblyName System.Configuration
Vedere Questo post per garantire che il file di configurazione specificato venga applicato al contesto in esecuzione.
Altri suggerimenti
Immagino che le impostazioni dovrebbero essere in powershell.exe.config nella directory di PowerShell, ma sembra essere un pessimo modo di fare le cose.
È possibile utilizzare ConfigurationManager.OpenMappedExeConfiguration per aprire un file di configurazione in base al nome della DLL in esecuzione, anziché all'exe dell'applicazione, ma ciò richiederebbe ovviamente modifiche alle DLL.
Tentare una nuova risposta a una vecchia domanda.
Penso che la risposta moderna sarebbe:non farlo.PowerShell è una shell.Il modo normale di passare informazioni tra le parti della shell sono le variabili di shell.Per PowerShell sarebbe simile a:
$global:MyComponent_MySetting = '12'
# i.e.
$PSDefaultParameterValues
$ErrorActionPreference
Se si prevede che le impostazioni vengano ereditate oltre i confini dei processi, la convenzione consiste nell'utilizzare variabili di ambiente.Lo estendo alle impostazioni che oltrepassano il limite C#/PowerShell.Un paio di esempi:
$env:PATH
$env:PSModulePath
Se ritieni che questo sia un anti-pattern per .NET, potresti voler riconsiderare.Questa è la norma per le app ospitate PAAS e sarà la nuova impostazione predefinita per ASP.NET in esecuzione su CLR ottimizzato per il server (ASP.NET v5).
Vedere https://github.com/JabbR/JabbRv2/blob/dev/src/JabbR/Startup.cs#L21
Nota:al momento in cui scrivo mi sto collegando a .AddEnvironmentVariables()
Ho rivisitato questa domanda alcune volte, anche ponendola io stesso.Volevo mettere un paletto nel terreno per dire che le cose di PowerShell non funzionano bene <appSettings>
.IMO è molto meglio abbracciare l'aspetto shell di PS rispetto all'aspetto .NET a questo riguardo.
Se hai bisogno di una configurazione complessa, prendi una stringa JSON.POSH v3+ ha ConvertFrom-JSON integrato.Se tutto nel tuo processo utilizza la stessa configurazione complessa, inseriscilo in un file .json e punta a quel file da una variabile di ambiente.
Se un singolo file non è sufficiente esistono soluzioni consolidate come PATH
modello, GIT .gitignore risoluzione, o ASP.NET web.config risoluzione (che non ripeterò qui).