2016-12-28 46 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