-1

現在の開発チームのテストフレームワークを構築しています。私が彼らにやらせたいことの1つは、テストを実行するためのPowershellスクリプトを作成することです。このシステムはデータベースデプロイシステムであるため、テストするには、セットアップコードを実行する必要があります。その後、デプロイが開始され、最後にチェックコードが実行されます。

デプロイには時間がかかるので、すべてのテストでフレームワークに一度だけ処理させたいと思います。したがって、基本的なフローは次のとおりです。

Run test #1 set-up
Run test #2 set-up
Run test #3 set-up
Run the deploy process
Run the code to confirm that test #1 passed
Run the code to confirm that test #2 passed
Run the code to confirm that test #3 passed

特定のディレクトリにあるすべてのPowershellスクリプトで、フレームワークが常に「セットアップ」(または同様のもの)と呼ばれる関数を呼び出すようにすることを考えました。「セットアップ」機能が存在しない場合は問題なく、エラーになることはありません。次に、デプロイを実行してから、Powershellスクリプトで他の関数を実行します。

ディレクトリリストがある場合、各Powershellスクリプトを循環して、これらの関数を実行するにはどうすればよいですか?

ガイダンスをありがとう!

4

2 に答える 2

1

これにより、指定されたフォルダーが繰り返され、見つかったすべてのsetup.ps1スクリプトが実行されます。

Get-ChildItem D:\test -Recurse | where { $_.name -eq "setup.ps1" }| foreach {
   "Executing $($_.Fullname)"
    Invoke-Expression "$($_.Fullname) -setup -Verbose"
}

ただし、パラメータは受け入れません。

1つのフォルダを深くしたいだけなら、これでうまくいきます。

Get-ChildItem D:\test | where{$_.psiscontainer}|foreach {
    Get-ChildItem $_.fullname | where { $_.name -eq "setup.ps1" }| foreach {
       "Executing $($_.Fullname)"
       Invoke-Expression "$($_.Fullname) -setup -Verbose"
    }
}

パラメータが機能しなかったのは少しイライラしました。Invoke-Commandを使用すると機能するのではないかと思います。他の誰かがそれを理解しない限り、私は今試す時間がありません。後で見ていきます。

これが私がsetup.ps1に使用したスクリプトです

[cmdletbinding()]
Param()

function setup() {

    Write-Verbose "In setup 1"
    Write-Output "Done setup 1"

}

setup

HTH

于 2011-06-02T06:49:55.553 に答える
0

マットのアイデアのおかげで、私は出くわすことができましたInvoke-Expression。理想的には、デフォルトでローカルで実行されると思われるパラメーターで使用Invoke-Commandしたいと思います。ただし、ローカルで実行している場合でもパラメータ-filepathを使用する必要があるバグがあります。-ComputerNameこのパラメーターを使用する場合は、ローカルコンピューターで実行している場合でも、リモート処理をオンにする必要があります。

スクリプトで使用したコードは次のとおりです。

# Run the setup functions from all of the Powershell test scripts
foreach ($testPSScript in Get-ChildItem "$testScriptDir\*.ps1") {
    Invoke-Expression "$testPSScript -Setup"
}

# Do some other stuff

# Run the tests in the Powershell test scripts
foreach ($testPSScript in Get-ChildItem "$testScriptDir\*.ps1") {
    Invoke-Expression "$testPSScript"
}

私のテストスクリプトは次のようになりました。

param([switch]$Setup = $false)

if ($Setup) {write-host "Setting things up"; return}

Write-Host "Running the tests"
于 2011-06-02T15:16:54.620 に答える