Как получить несколько конфигураций модуля автоматически в другую папку с помощью PowerShell? - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть несколько папок, например, www содержит папки A, B, C и т. Д., И эта же структура существует в другой среде, такой как INT, REG, DR, PROD.каждый содержит разные web.config.

Итак, перед нами стоит задача предоставить автоматизированный способ регистрации каждого web.config.

Именуется как web_A_int.config, web_A_REG.config, web_A_Prod.config, Web_A_DR.configи Web_B_int.config, Web_B_Reg_config и т. д.

Среда - TFS (2015), Source Control, а решение - решение на основе .net.

Пожалуйста, дайте мне знать, если вам что-то понадобится, чтобы понять вопрос.

Как сохранить эту структуру после компиляции.или Как мы можем использовать proj или скрипт Powershell для его достижения?

Желаемый результат: INT -> www -> A, B, C Папки и каждый файл web.config, помещенный в соответствующую папку.REG -> www -> A, B, C -> с каждым web.config и каждым уровнем модуля, размещенным правильно.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Я не знаком с развертыванием веб-сервера в TFS, но вот некоторые обычные функции PowerShell, которые можно использовать для создания циклов:

$environmentTypes = @('INT', 'REG', 'DR', 'PROD')

Function Get-WebConfig([String]$Path)
{
    try {
        $configContent = Get-Content \\path\to\config\file
    }
    catch {
        Write-Debug "ERROR: Could not get content of $($Path)" 
    }

    return $configContent
}

Function Create-FolderStructure() {

    [cmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [ValidateSet('INT','REG','DR','PROD')]
        [String]$EnvironmentType,
        [Parameter(Mandatory)]
        [String]$Server,
        [Parameter(Mandatory)]
        [String[]]$FolderNames,
        [Parameter(Mandatory=$false)]
        [Switch]$CheckServerUp
    )
    Begin {}
    Process {
        try {
            if($CheckServerUp)
            {
                try {
                    Test-Connection -ComputerName $Server
                }
                catch {
                    Write-Debug "ERROR: Unable to test connection to $Server"
                }
            }

            foreach($item in $FolderNames)
            {
                try {
                    New-Item -Path "\\$Server\c$\www\$item" -ItemType Directory

                }
                catch {
                    Write-Debug "ERROR: Unable to create folder $item"
                }
                try {
                    switch($EnvironmentType)
                    {
                        'INT' 
                        {
                            $neededConfig = Get-WebConfig -Path \\path\to\your\intconfig
                            break
                        }
                        'REG'
                        {
                            $neededConfig = Get-WebConfig -Path \\path\to\your\regconfig
                            break
                        }
                        'DR'
                        {
                            $neededConfig = Get-WebConfig -Path \\path\to\your\drconfig
                            break
                        }
                        'PROD'
                        {
                            $neededConfig = Get-WebConfig -Path \\path\to\your\prodconfig
                            break
                        }

                        try {
                            New-Item -Path "\\$Server\c$\www\$item\Web_$EnvironmentType.config"
                            Set-Content -Path "\\$Server\c$\www\$item\Web_$EnvironmentType.config" -Value $neededConfig
                        }
                        catch {
                            Write-Debug "ERROR: Unable to create file"
                        }

                    }
                }
                catch {
                    Write-Debug "ERROR: Unable to get web config content"
                }
            }
        }
        catch {
            Write-Debug "ERROR: Could not get content of $($Path)" 
        }
    }
    End{}
}
0 голосов
/ 26 февраля 2019

Один из способов решить эту проблему - использовать веб-преобразования и создать веб-файл. {Environment} .config, а затем применить это преобразование при развертывании.

Microsoft docs должна получить васначал о том, как использовать веб-преобразования.Я могу предоставить вам некоторый код Powershell о том, как это сделать, если вы так решите.

...