PowerShell FINDSTR eqivalent?

后端 未结 8 940
栀梦
栀梦 2021-02-02 09:28

What\'s the DOS FINDSTR equivalent for PowerShell? I need to search a bunch of log files for \"ERROR\".

8条回答
  •  迷失自我
    2021-02-02 09:57

    On a related note, here's a search that will list all the files containing a particular regex search or string. It could use some improvement so feel free to work on it. Also if someone wanted to encapsulate it in a function that would be welcome.

    I'm new here so if this should go in it's own topic just let me know. I figured I'd put it her since this looks mostly related.

    # 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
    #>
    

提交回复
热议问题