2017-09-15 42 views
0

我在文本文件中輸出了Invoke-sqlcmd如何在PowerShell中檢查文件中的字符串

我需要檢查輸出的字失敗失敗,如果它的發現,我需要打破

這裏是我的代碼:

$var=Get-Content "C:\JenkinsDrops\TRGDB0632 tSQLt Report.txt" 
$count = 0 
foreach($item in $var -match "Failure"){ 
    $count=$count+1 
    out-host $item.ToString() 
} 

輸出看起來是這樣的:

[PayrollUnitTests].[test sp_GetEmployeePaySlipPayElements_Basic] failed: (Failure) Unexpected/missing resultset rows! 
    |_m_|Descn      |Units|Rate |Amount|Category |isGross| 
    +---+--------------------------+-----+-----+------+---------+-------+ 
    |< |Tronc Payment Caffe  |0 |77.96|77.96 |Payment |False | 
    |= |Back Of House Tronc Caffe |1 |27.29|27.29 |Deduction|False | 
    |= |Champneys Springs Salaried|0 |0 |0.89 |Deduction|False | 
    |= |Hour Caffe    |31 |7.2 |223.2 |Payment |False | 
    |= |NI      |0 |0 |8.18 |Deduction|False | 
    |= |Tax      |0 |0 |12.4 |Deduction|False | 
    |> |Tronc Payment Caffe  |1 |77.96|77.96 |Payment |False | 

    +----------------------+ 
    |Test Execution Summary| 
    +----------------------+ 

    |No|Test Case Name             |Dur(ms)|Result | 
    +--+----------------------------------------------------------------+-------+-------+ 
    |1 |[PayrollUnitTests].[test fn_GetEmployeeBradfordFactor]   | 413|Success| 
    |2 |[PayrollUnitTests].[test sp_GetEmployeeDetailsforPreview]  | 220|Success| 
    |3 |[PayrollUnitTests].[test sp_GetEmployeesDetailsForCalc]   | 520|Success| 
    |4 |[PayrollUnitTests].[test sp_GetP11DetailsForEmployee]   | 290|Success| 
    |5 |[PayrollUnitTests].[test sp_UpdateEmployeeP11FromCalc]   | 306|Success| 
    |6 |[PayrollUnitTests].[test sprc_BACS_UpdateBACSStatus]   | 130|Success| 
    |7 |[PayrollUnitTests].[test sp_GetEmployeePaySlipPayElements_Basic]| 333|Failure| 

單詞「失敗」或「失敗」的任何發生意味着tSQLt單元TE sts失敗並且部署到QA無法繼續

要做到這一點的最佳方法是什麼?

回答

2

這種方法稍微簡單一些,但似乎有竅門。這是否適用於你想要做的事情?

$failures = Select-String -Path "C:\JenkinsDrops\TRGDB0632 tSQLt Report.txt" -Pattern "Fail(ed|ure)?" 

if ($failures) 
{ 
    $failures 
    throw ("The unit tests were not successful!") 
} 

基本上,搜索字符串讀取文件的全部內容,併爲您指定匹配的話「失敗」或「失敗」的行。輸出匹配行並且腳本引發異常。

1

這比您想象的要容易。

Get-Content "C:\JenkinsDrops\TRGDB0632 tSQLt Report.txt" | % { if ($_ -match 'Failure' -or $_ -match 'Failed') {write-host $_} } 

這將輸出顯示關鍵字匹配的日誌文件的行。

相關問題