Select-String问题间歇性地工作

时间:2016-12-28 21:49:21

标签: powershell select-string

我有些代码有时可以使用而其他代码则无效。当它失败时我没有看到任何错误,所以我不知道为什么它会断断续续。

我正在使用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

通过在搜索框中输入win,它将显示此内容..任何有关' win'在里面。

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

..此行上方没有代码只有文本文件内容,搜索获胜后应显示的内容。

$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 个答案:

答案 0 :(得分:1)

您不应在此处使用Format-Table cmdlet,只需使用-expand cmdlet上的Select-Object开关检索所需的输出:

$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($_)
    }