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

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


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 settingsforeach($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>


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")