Сведения о вопросе

GANGST1ER

15:30, 28th August, 2020

Теги

search   powershell    

PowerShell FINDSTR эквивалентный?

Просмотров: 534   Ответов: 7

Что такое эквивалент DOS FINDSTR для PowerShell ? Мне нужно найти кучу файлов журнала для "ERROR".



  Сведения об ответе

SEEYOU

04:09, 15th August, 2020

Вот быстрый ответ

Get-ChildItem -Recurse -Include *.log | select-string ERROR 

Я нашел его здесь , который имеет большой глубокий ответ!


  Сведения об ответе

LIZA

23:49, 20th August, 2020

Например, найдите все экземпляры "#include " в файлах c в этом каталоге и во всех подкаталогах.

gci -r -i *.c | select-string "#include"

gci-это псевдоним для get-childitem


  Сведения об ответе

$DOLLAR

11:06, 16th August, 2020

Просто чтобы расширить ответ Монро-Чизмена. gci-это псевдоним для Get-ChildItem (что эквивалентно dir или ls), переключатель -r выполняет рекурсивный поиск, а-i означает include.

Передав результат этого запроса в select-string, он читает каждый файл и ищет строки, соответствующие регулярному выражению (в данном случае используется ERROR, но это может быть любое регулярное выражение .NET).

Результатом будет коллекция объектов соответствия, показывающая соответствие линии, файл и другую связанную информацию.


  Сведения об ответе

davran

00:39, 16th August, 2020

if ($entry.EntryType -eq "Error")

Будучи объектно-ориентированным, вы хотите проверить рассматриваемое свойство с помощью одного из стандартных операторов сравнения, которые вы можете найти здесь .

У меня есть скрипт PS , который смотрит журналы удаленно для меня прямо сейчас - некоторые простые модификации должны заставить его работать для вас.

edit: я полагаю, что мне также следует добавить, что это командлет, уже построенный для этого, если вы не хотите разворачиваться так, как я это сделал. Проверять:

man Get-EventLog
Get-EventLog -newest 5 -logname System -EntryType Error


  Сведения об ответе

lourence

15:17, 7th August, 2020

В соответствующем примечании, вот поиск, который будет перечислять все файлы, содержащие определенный поиск regex или строку. Он мог бы использовать некоторые улучшения, так что не стесняйтесь работать над ним. Кроме того, если кто-то захочет инкапсулировать его в функцию, это будет приветствоваться.

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

# Search in Files Script
# ---- Set these before you begin ---- 
$FolderToSearch="C:\" # UNC paths are ok, but remember you're mass reading file contents over the network
$Search="Looking For This" # accepts regex format
$IncludeSubfolders=$True #BUG: if this is set $False then $FileIncludeFilter must be "*" or you will always get 0 results
$AllMatches=$False
$FileIncludeFilter="*".split(",") # Restricting to specific file types is faster than excluding everything else
$FileExcludeFilter="*.exe,*.dll,*.wav,*.mp3,*.gif,*.jpg,*.png,*.ghs,*.rar,*.iso,*.zip,*.vmdk,*.dat,*.pst,*.gho".split(",")

# ---- Initialize ----
if ($AllMatches -eq $True) {$SelectParam=@{AllMatches=$True}}
else {$SelectParam=@{List=$True}}
if ($IncludeSubfolders -eq $True) {$RecurseParam=@{Recurse=$True}}
else {$RecurseParam=@{Recurse=$False}}

# ---- Build File List ---- 
#$Files=Get-Content -Path="$env:userprofile\Desktop\FileList.txt" # For searching a manual list of files
Write-Host "Building file list..." -NoNewline
$Files=Get-ChildItem -Include $FileIncludeFilter -Exclude $FileExcludeFilter -Path $FolderToSearch -ErrorAction silentlycontinue @RecurseParam|Where-Object{-not $_.psIsContainer} # @RecurseParam is basically -Recurse=[$True|$False]
#$Files=$Files|Out-GridView -PassThru -Title 'Select the Files to Search' # Manually choose files to search, requires powershell 3.0
Write-Host "Done"

# ---- Begin Search ---- 
Write-Host "Searching Files..."
$Files|
    Select-String $Search @SelectParam| #The @ instead of $ lets me pass the hastable as a list of parameters.  @SelectParam is either -List or -AllMatches
    Tee-Object -Variable Results|
    Select-Object Path
Write-Host "Search Complete"
#$Results|Group-Object path|ForEach-Object{$path=$_.name; $matches=$_.group|%{[string]::join("`t", $_.Matches)}; "$path`t$matches"} # Show results including the matches separated by tabs (useful if using regex search)

<# Other Stuff
    #-- Saving and restoring results
    $Results|Export-Csv "$env:appdata\SearchResults.txt" # $env:appdata can be replaced with any UNC path, this just seemed like a logical place to default to
    $Results=Import-Csv "$env:appdata\SearchResults.txt"

    #-- alternate search patterns
    $Search="(\d[-|]{0,}){15,19}" #Rough CC Match
#>


  Сведения об ответе

park

00:47, 20th August, 2020

Это не самый лучший способ сделать это:

gci <the_directory_path> -filter *.csv | where { $_.OpenText().ReadToEnd().Contains("|") -eq $true }

Это помогло мне найти все файлы csv, которые имели символ | в них.


  Сведения об ответе

lourence

10:44, 24th August, 2020

PowerShell в принципе исключил необходимость в findstr.exe , как показывают предыдущие ответы. Любой из этих ответов должен работать нормально.

Однако, если вам действительно нужно использовать findstr.exe


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться