Question

Disclaimer: I don't know enough about ps to accomplish this in a reasonable amount of time, so yes, I am asking someone else to do my dirty job.

I want to be able to run a web.config transformation without opening a command line.

I have following files in a folder:

web.config - actual web config
web.qa.config - web config transformation for qa env
web.production.config - web config transformation for production env
transform.ps1 - powershell script I want to use to run transformation

Here is what I want: PS file shall enumerate current directory using .*\.(?<env>.*?)\.config and let me choose which <env> I am interested in generate web.config for. In my example I will be presented with two options: "qa", "production".

After I (user) select the environment (let's say it is "qa", selected environment is stored as $env, and corresponding filename will be stored as $transformation) script shall do following:

  1. backup original web.config as web.config.bak
  2. execute following command:

.

echo applying $transformation...
[ctt][1].exe source:web.config transformation:$transformation destination:web.config preservewhitespaces verbose
echo done.

ctt.exe is a tool based on XDT that runs web.config transformation from command line.

Was it helpful?

Solution

Okay, looks simple enough, I'll do your dirty job for you. ;)

Save the following as transform.ps1:

    $environments = @()f
    gci | %{if ($_ -match '.*\.(?<env>.*?)\.config') {$environments += $matches.env}}
    Write-Host "`nEnvironments:"
    for ($i = 0; $i -lt $environments.Length; $i++) {Write-Host "[$($i + 1)] $($environments[$i])"}
    Write-Host
    do {
        $selection = [int](Read-Host "Please select an environment")
        if ($selection -gt 0 -and $selection -le $environments.Length) {
            $continue = $true
        } else {
            Write-Host "Invalid selection. Please enter the number of the environment you would like to select from the list."
        }
    } until ($continue)
    $transformation = "web.$($environments[$selection - 1]).config"
    if (Test-Path .\web.config) {
        cpi .\web.config .\web.config.bak
    } else {
        Write-Warning "web.config does not exist. No backup will be created."
    }
    if ($?) {
        Write-Host "`nApplying $transformation..."
        [ctt][1].exe source:web.config transformation:$transformation destination:web.config preservewhitespaces verbose
        Write-Host "Done.`n"
    } else {
        Write-Error "Failed to create a backup of web.config. Transformation aborted."
    }
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top