以下のスクリプトに関連する PowerShell に関する質問があります。スクリプトは「update.sql」のすべてのインスタンスを検出し、「Y」または「N」を入力してそれらを実行する選択肢をユーザーに提供します。今日まで、これはうまく機能しています。ただし、フォルダ構造の変更により、独自のバージョンの「update.sql」を含む追加のフォルダが導入されました。スクリプトを実行すると、「update.sql」のこれらのインスタンスも検出され、ユーザーは「N」を数回入力する必要があります。世界の終わりではありませんが、私はむしろ彼らがそうする必要がなかったことを望みます.
コードが "-First 1" を選択すると、選択されたフォルダーは次のようになります: \Pro\TFS Builds\Ni - ProjName - Databases\Ni - ProjName - Databases_20131113.1
このフォルダー内には、次の名前の 5 つの追加フォルダーがあります。
ProjName リリース 1
バフ解放1
ログ
リリース 1 について
リリース 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 内の各フォルダーに「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"
}
}
}