Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I read/write App.config settings with PowerShell?

I'd like to use PowerShell as part of our automated build process to update an App.config file while deploying into our test environment. How can I do this?

like image 571
Robin Avatar asked May 16 '09 02:05

Robin


People also ask

How do I read a config file in PowerShell?

After loading c:\app. config, we are displaying path of currently loaded configuration file, using CurrentDomain. GetData() method. By following the above steps, we can load and read a custom config file in current app domain within PowerShell script.

Where is the config file for PowerShell?

A powershell. config. json file in the $PSHOME directory defines the configuration for all PowerShell sessions running from that PowerShell installation. The $PSHOME location is defined as the same directory as the executing System.


2 Answers

Given this sample App.config: C:\Sample\App.config:

<?xml version="1.0" encoding="utf-8" ?> <configuration>     <connectionStrings>         <add name="dbConnectionString"               connectionString="Data Source=(local);Initial Catalog=Northwind;Integrated Security=True"/>     </connectionStrings> </configuration> 

The following script, C:\Sample\Script.ps1, will read and write a setting:

# get the directory of this script file $currentDirectory = [IO.Path]::GetDirectoryName($MyInvocation.MyCommand.Path) # get the full path and file name of the App.config file in the same directory as this script $appConfigFile = [IO.Path]::Combine($currentDirectory, 'App.config') # initialize the xml object $appConfig = New-Object XML # load the config file as an xml object $appConfig.Load($appConfigFile) # iterate over the settings foreach($connectionString in $appConfig.configuration.connectionStrings.add) {     # write the name to the console     'name: ' + $connectionString.name     # write the connection string to the console     'connectionString: ' + $connectionString.connectionString     # change the connection string     $connectionString.connectionString = 'Data Source=(local);Initial Catalog=MyDB;Integrated Security=True' } # save the updated config file $appConfig.Save($appConfigFile) 

Execute the script:

PS C:\Sample> .\Script.ps1 

Output:

name: dbConnectionString   connectionString: Data Source=(local);Initial Catalog=Northwind;Integrated Security=True 

Updated C:\Sample\App.config:

<?xml version="1.0" encoding="utf-8"?> <configuration>   <connectionStrings>     <add name="dbConnectionString"           connectionString="Data Source=(local);Initial Catalog=MyDB;Integrated Security=True" />   </connectionStrings> </configuration> 
like image 181
Robin Avatar answered Sep 23 '22 12:09

Robin


The code can be much more shorter (based on Robin's app.config):

$appConfig = [xml](cat D:\temp\App.config) $appConfig.configuration.connectionStrings.add | foreach {     $_.connectionString = "your connection string" }  $appConfig.Save("D:\temp\App.config") 
like image 26
Shay Levy Avatar answered Sep 23 '22 12:09

Shay Levy