0

免责声明:我对 ps 的了解还不够,无法在合理的时间内完成此任务,所以是的,我要求其他人做我的肮脏工作。

我希望能够在不打开命令行的情况下运行 web.config 转换。

我在一个文件夹中有以下文件:

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

这就是我想要的:PS 文件应使用枚举当前目录.*\.(?<env>.*?)\.config并让我选择<env>我感兴趣的生成 web.config 的目录。在我的示例中,我将看到两个选项:“qa”、“production”。

在我(用户)选择环境后(假设它是“qa”,选择的环境存储为 $env,相应的文件名将存储为 $transformation)脚本应执行以下操作:

  1. 备份原件web.configweb.config.bak
  2. 执行以下命令:

.

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

ctt .exe 是一个基于 XDT 的工具,可以从命令行运行 web.config 转换。

4

1 回答 1

2

好吧,看起来很简单,我会为你做你的脏活。;)

将以下内容另存为 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."
    }
于 2013-05-10T22:23:24.380 回答