2016-12-28 92 views
1

我有一些代碼有時有效,其他代碼沒有。當它失敗時,我看不到任何錯誤,所以我堅持爲什麼它是間歇性的。選擇字符串問題間歇性地工作

我正在使用Select-String cmdlet,它將查找許多匹配,這是我想要的。

我也使用與我的測試相同的文本文件,所以它不是搜索的數據正在改變。

$Hospinput.Text是輸入的項目進行搜索。

搜索文件的內容是:

Windows 7 Clinical Complete Nursing A3S 
Windows 7 Clinical Complete Nursing A3S Wireless 
Windows 7 Clinical Complete Nursing A4N 
Windows 7 Clinical Complete Nursing A4N Wireless 
Windows 7 Clinical Complete Nursing A4S 
Windows 7 Clinical Complete Nursing A4S Wireless 
Windows 7 Clinical Complete Observation 
Windows 7 Clinical Complete Observation Wireless 
SPU Fastpass 
SPU Fastpass Wireless 
24-7 - Windows 7 Pro x86 
Admitting General - Windows 7 x86 - v1.7 

通過輸入贏在搜索框中會顯示這個..任何與它「雙贏」。

Windows 7 Clinical Complete Nursing A3S 
Windows 7 Clinical Complete Nursing A3S Wireless 
Windows 7 Clinical Complete Nursing A4N 
Windows 7 Clinical Complete Nursing A4N Wireless 
Windows 7 Clinical Complete Nursing A4S 
Windows 7 Clinical Complete Nursing A4S Wireless 
Windows 7 Clinical Complete Observation 
Windows 7 Clinical Complete Observation Wireless 
24-7 - Windows 7 Pro x86 
Admitting General - Windows 7 x86 - v1.7 

..這行上面沒有代碼只有文本文件的內容以及搜索win後應該顯示什麼。

$list = (Select-String -AllMatches -Path "x:\Scripts\PowerShell\HospDepartments.txt" -pattern $HospInput.Text | Select line | ft -HideTableHeaders | Out-String).Trim() 
$separator = "`n`r" 
$Array = @($list.split($separator,  [System.StringSplitOptions]::RemoveEmptyEntries)) 
$Array.Length 

If ($list) 

{ 
$Array.trim() 
$Array | foreach{$textbox1.Items.Add($_) } 

}Else 
{ 
$TextBox1.Text = "Error in finding $($hospInput.Text)" 
} 

上面的代碼是一種形式的一部分。它將搜索文本文件並根據輸入進行匹配。這很好。但只是有時候。要在表單中顯示結果,請點擊搜索按鈕。這是當我點擊搜索有時會顯示結果。有時它不會。而且我每次測試都沒有什麼不同。

任何人都可以擺脫任何光線?

爲此,它會間歇性地

回答

1

你不應該在這裏使用Format-Table cmdlet時,只需使用-expand交換機上的Select-Object cmdlet檢索所需輸出:

$list = Select-String -AllMatches -Path "x:\Scripts\PowerShell\HospDepartments.txt" -pattern ($HospInput.Text) | Select -expand line 

在那旁邊,你的問題是可能與這個事實有關,Select-String cmdlet是使用正則表達式,你可能會在搜索框中輸入一些正則表達式字符?你可以通過添加-SimpleMatch切換到cmdlet更改此行爲:

-simpleMatch

使用一個簡單的比賽,而不是一個正則表達式匹配。在 簡單匹配中,Select-String搜索Pattern參數中 文本的輸入。它不會將 模式參數的值解釋爲正則表達式語句。


編輯:

你可以重構你的代碼:

Select-String -AllMatches -Path "x:\Scripts\PowerShell\HospDepartments.txt" -pattern ($HospInput.Text) | 
    Select-Object -expand line | ForEach-Object { 
     $textbox1.Items.Add($_) 
    } 
+0

HI馬丁剛剛進入更多的代碼。我只是每次都在搜索框中輸入「贏」。我現在會嘗試擴展選項.. – LDStewart

+0

我看到了您的編輯並編輯了我的答案(只是重構了它)。你可以試試看。 –

+0

這似乎是工作非常感謝...然而,由於某種原因,不在winpe內。任何想法爲什麼?我在winpe中運行powershell v4,代碼編譯爲版本4 ...(x:\)是winpe RAM驅動器 – LDStewart