Проблема Select-String работает с перебоями

У меня есть код, который иногда работает, а другие нет. Я не вижу ошибок, когда он терпит неудачу, поэтому я застрял в том, почему это прерывается.

Я использую командлет Select-String, который найдет много совпадений, что я и хочу.

Я также использую тот же текстовый файл, что и мой тест, так что изменяемые данные не меняются.

$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)"
}

Код выше является частью формы. Он будет искать текстовый файл и совпадать на основе ввода. Это прекрасно работает. Но только иногда. Чтобы отобразить результаты в форме, я нажимаю кнопку поиска. Когда я нажимаю кнопку поиска, иногда отображаются результаты. иногда это не так. И я не делаю ничего другого каждый раз, когда я проверяю.

Кто-нибудь может пролить свет?

Это делает это периодически

1 ответ

Решение

Вы не должны использовать Format-Table Командлет здесь, просто используйте -expand включить Select-Object Командлет для получения желаемого результата:

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

Кроме того, ваша проблема, вероятно, связана с тем, что Select-String Командлет использует регулярные выражения, и вы, вероятно, вводите некоторые символы регулярных выражений в поле поиска? Вы можете изменить это поведение, добавив -SimpleMatch переключиться на командлет:

-SimpleMatch

Использует простое совпадение, а не совпадение с регулярным выражением. В простом сопоставлении Select-String ищет ввод для текста в параметре Pattern. Он не интерпретирует значение параметра Pattern как оператор регулярного выражения.


Редактировать:

Вы можете изменить свой код на:

Select-String -AllMatches -Path "x:\Scripts\PowerShell\HospDepartments.txt" -pattern ($HospInput.Text) | 
    Select-Object -expand line | ForEach-Object {
        $textbox1.Items.Add($_)
    }
Другие вопросы по тегам