PowerShell sql部署脚本 - 处理新的子文件夹

时间:2013-11-13 12:10:13

标签: sql powershell

我有一个与下面脚本有关的PowerShell问题。该脚本查找“update.sql”的所有实例,并通过输入“Y”或“N”为用户提供运行它们的选择。到目前为止,这一点运作良好。但是,由于文件夹结构的更改,引入了包含其自己版本的“update.sql”的其他文件夹。当脚本运行时,它还会找到“update.sql”的这些实例,并且用户必须多次输入“N”。不是世界末日,但我宁愿他们没有。

当代码到达时选择“-First 1”,所选文件夹即: \ Pro \ TFS Builds \ Ni - ProjName - 数据库\ Ni - ProjName - Databases_20131113.1

在此文件夹中有另外5个名为:

的文件夹

ProjName Release 1

Buff Release 1

日志

Por Release 1

Por Release 2

除日志外,所有这些文件夹都有3个子文件夹:

CompanyName_Pro2000_Audit_LIVE

CompanyName_Pro2000_Control_LIVE

CompanyName_Pro2000_LIVE

这些是“update.sql”所在的文件夹。

我需要代码找到\ Pro \ TFS Builds \ Ni - ProjName - Databases \ Ni - ProjName - Databases_20131113.1然后选择其中名为ProjName Release 1的文件夹。此后,ProjName Release 1中的每个文件夹都带有“更新将向用户标识.sql“以选择执行脚本。任何修改当前代码的帮助都会很棒。

的Jak

当前脚本:

    #Locate all update.sql related to the project
    #$dbscript = ls '\\Pro\TFSBuilds\'$TFSName'\Databases\' | sort name -Descending | select -First 1

    $dbscripts = ls '\\Pro\TFS Builds\' | ? {$_.Name -like 'Ni - '+$TFSName+'*- Databases*'}
    $dbscript = ls $dbscripts.FullName | sort Name -Descending |  select -First 1
    $updatescripts = ls $dbscript.FullName update.sql -Recurse

    foreach($script in $updatescripts)
    {
    Write-Host $script.Name "found....`n `n"
    #Write-Host $script.FullName.Substring(36,$script.FullName.Length - 36) "


        #$scriptin = Read-Host "Run Script.....`n `n" $script.FullName  "on" $sqlserver
        $scriptin = Read-Host $script.FullName.Substring(25,$script.FullName.Length - 25) "on" $sqlserver "`n `n""Do you want to run Database Script: (Enter Y or N)"
        if($scriptin -ieq "Y")
        {
            try
            {

                $returnres = invoke-sqlcmd -inputfile $script.FullName -serverinstance $sqlserver -Username '********' -Password '**********' -Database 'CompanyName_Pro2000_LIVE'
                Write-Host "Script complete.....`n `n"
            }
            catch
            {
            Write-Host "Script not run.....`n `n"
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

试试这个:

$dbscripts = ls '\\Pro\TFS Builds\' | ? {$_.Name -like 'Ni - '+$TFSName+'*- Databases*'}
$dbscript = ls $dbscripts.FullName | sort Name -Descending | select -First 1
$updatescripts = ls $dbscript.FullName update.sql -Recurse
foreach ($script in $updatescripts) {
    $resp = Read-Host "Run script from $($script.Directory.Name) on $sqlserver`n `nDo you want to run Database Script: (Enter Y or N)"
    ...
}