我有一个与下面脚本有关的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"
}
}
}
答案 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)"
...
}