0

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

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

此文件夹内有 5 个附加文件夹,名为:

项目名称第 1 版

增益版本 1

日志

或第 1 版

第 2 版

除 Logs 外,所有这些文件夹都有 3 个子文件夹,名为:

公司名称_Pro2000_Audit_LIVE

公司名称_Pro2000_Control_LIVE

公司名称_Pro2000_LIVE

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

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

杰克

当前脚本:

    #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"
            }
        }
    }
4

1 回答 1

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)"
    ...
}
于 2013-11-14T05:04:35.043 回答