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:
- <?xml version="1.0" encoding="utf-8"?>
- <configuration>
- <connections>
- <Main server="."
- database="Main"
- user="MainSite"
- password="BEwTIDU">
- </Main>
- <Log server="."
- database="Log"
- user="AuditWriter"
- password="TIDUaEAL1">
- </Log>
- </connections>
- </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:
- Izveido XmlDocument instanci
- Ielasa failu
- Izmaina atbilstošā elementa vērtību
- Saglabā XmlDocument failā
Ja to uzraksta kā skriptu:
- param([string]$webConfig = '', [string]$server = '.\sql2008' )
- $xml = New-Object System.Xml.XmlDocument
- $xml.Load($webConfig)
- $doc = $xml.get_DocumentElement();
- $doc.connections.Main.server = $server
- $doc.connections.Log.server = $server
- $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!