Konfigurācijas failu labošana ar PowerShell

Pāris dienas atpakaļ, automatizējot dažādus sīkumus, radās vajadzība pamainīt web.config failu no skripta. Konkrētāk, vajadzēja pamainīt datubāzes konfigurāciju, kura glabājas atsevišķā konfigurācijas sekcijā.

Atbilstošais web.config fragments ir apmēram šāds:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <configuration>
  3.     <connections>
  4.         <Main server="."
  5.               database="Main"
  6.               user="MainSite"
  7.               password="BEwTIDU">
  8.         </Main>
  9.         <Log server="."
  10.              database="Log"
  11.              user="AuditWriter"
  12.              password="TIDUaEAL1">
  13.         </Log>
  14.     </connections>
  15. </configuration>

Sportiskas intereses vadīts, nolēmu, ka šis varētu būt darbs, kuru lieliski varētu paveikt ar PowerShell. Pirmā doma bija to izdarīt ar regulārajām izteiksmēm. Nu, jūs jau ziniet…

Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.

Un tad man ienāca prātā doma, ka web.config taču ir tikai XML fails, kuru lieliski varētu arī kā tādu apstrādāt. Palaidu uzticamo PowerShell ISE un sāku eksperimentēt (t.i., meklēt internetā piemērus, ko pielāgot).

Gala rezultātā izrādījās, ka viss ģeniālais ir vienkāršs un recepte konfigurācijas faila labošanai ir pavisam vienkārša:

  1. Izveido XmlDocument instanci
  2. Ielasa failu
  3. Izmaina atbilstošā elementa vērtību
  4. Saglabā XmlDocument failā

Ja to uzraksta kā skriptu:

  1. param([string]$webConfig = '', [string]$server = '.\sql2008' )
  2. $xml = New-Object System.Xml.XmlDocument
  3. $xml.Load($webConfig)
  4. $doc = $xml.get_DocumentElement();
  5. $doc.connections.Main.server = $server
  6. $doc.connections.Log.server = $server
  7. $xml.Save($webConfig)

Visvairāk man šajā pieejā patīk tas, ka līdz atbilstošajam elementam var nokļūt izmantojot “strongly typed” sintaksi, kā tas ir redzams skripta 5. un 6. rindā.

Veiksmīgu skriptēšanu!

Published 06 October 2011 12:23 PM by ivars.arins
Filed under: ,

Comments

# viesis said on 15 October, 2011 05:24 PM

Es gan prieksroku vienmer dodu iebuvetajam ficam - .config transformacijas un SlowCheetah extensions, kas palidz vizuali apskatit aizstatas vertibas, vel pirms to aizstasanas...

Vienkars un efektivs xslt pielietojums

# ivars.arins said on 17 October, 2011 11:29 AM

Man pašam XSLT ne pārāk patīk un liekas salīdzinoši problemātiskāks par šādu pieeju (ar XmlDocument).

Bet tā kā pats neesmu mēģinājis izmantot transformācijas, tad šis ir tikai teorētisks viedoklis bez praktiska pamatojuma.

Leave a Comment

(obligāts) 
(obligāts) 
(brīvizvēles)
(obligāts)