Проблема 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($_)
}