我有一个与以下脚本有关的 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"
}
}
}