【问题标题】:Select-String issue working intermittentlySelect-String 问题间歇性工作
【发布时间】:2016-12-28 21:49:20
【问题描述】:

我有一些代码有时有效,而另一些则无效。当它失败时我看不到任何错误,所以我不知道为什么它是间歇性的。

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

..此行上面没有代码只有文本文件内容和搜索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)"
}

上面的代码是表单的一部分。它将搜索文本文件并根据输入进行匹配。这很好用。但只是有时。要在表单中显示结果,我单击搜索按钮。当我点击搜索时,有时它会显示结果。有时它不会。而且每次测试时我都没有做任何不同的事情。

谁能解释一下?

它会间歇性地这样做

【问题讨论】:

    标签: powershell select-string


    【解决方案1】:

    您不应该在这里使用Format-Table cmdlet,只需使用Select-Object cmdlet 上的-expand 开关来检索您想要的输出:

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

    除此之外,您的问题可能与以下事实有关:Select-String cmdlet 使用正则表达式,您可能在搜索框中输入了一些正则表达式字符?您可以通过将 -SimpleMatch 开关添加到 cmdlet 来更改此行为:

    -简单匹配

    使用简单匹配而不是正则表达式匹配。在一个 简单匹配,Select-String 在输入中搜索 Pattern 参数中的文本。它不解释的价值 模式参数作为正则表达式语句。


    编辑:

    您可以将代码重构为:

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

    【讨论】:

    • 嗨,马丁刚刚输入了更多代码。我每次只是在搜索框中输入“赢”。我现在将尝试扩展选项..
    • 我看到了您的编辑并编辑了我的答案(只是重构了它)。你可以试试看。
    • 这似乎工作得很好,谢谢......但由于某种原因不在winpe内......知道为什么吗?我在 winpe 中运行 powershell v4,代码在版本 4 中编译...( x:\ )是 winpe RAM 驱动器
    • 抱歉,没有使用winpe的经验:/
    • Martin - 使用你上面的代码来断断续续地使用你的代码......试图找出为什么这个值有时只存在......
    猜你喜欢
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 2015-12-02
    相关资源
    最近更新 更多