2011-06-01 47 views
-1

我正在爲當前的開發團隊構建一個測試框架。我想讓他們做的一件事是創建一個Powershell腳本來運行他們的測試。該系統是一個數據庫部署系統,因此爲了測試它,他們將需要運行一些設置代碼,然後部署將被啓動,然後他們將在最後運行一些檢查代碼。在多個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腳本並運行這些功能?

感謝您的任何指導!

回答

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" 
1

這將遞歸通過給定的文件夾並執行它找到的所有setup.ps1腳本。

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

它不接受參數雖然....

如果你只是想去一個文件夾深這將做的工作:

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

+0

感謝。我知道有一個語法可以通過一個包含括號的變量名來調用,但我無法在任何地方找到它。我會嘗試一些我自己的測試,並在這裏發佈結果。另外,我的目標是在所有腳本中運行Setup函數,但後來我想用「-setup」開關參數來代替......當然,這需要能夠傳遞參數:) – 2011-06-02 13:59:28

+0

我測試了你的第一個腳本它只是返回字符串變量的值(腳本的完整路徑)。 Invoke-Command有一些問題(似乎有一個需要使用「-ComputerName」參數的錯誤,但即使在本地計算機上,它也是一個遠程調用。我將發佈解決方案。我給你加票。如果你想要我改變選定的答案,那麼你可以改變你的,我會改變它。謝謝您的幫助! – 2011-06-02 15:12:35

+0

@ Tom-H。感謝您的投票 - 現在對我來說有點遲了。我剛剛意識到Invoke-command在本地調用filepath參數時使用WinRM - 這對我來說是新的!很高興有幫助。 – Matt 2011-06-02 22:05:42