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 つの追加フォルダーがあります。

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"
            }
        }
    }
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 に答える