28

PowerShellに相当する DOS FINDSTR は何ですか? 「エラー」のログ ファイルを検索する必要があります。

4

8 に答える 8

33

これが簡単な答えです

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

私はここでそれを見つけました。これには素晴らしい詳細な答えがあります!

于 2008-08-18T14:44:22.273 に答える
9

たとえば、このディレクトリとすべてのサブディレクトリの c ファイルで「#include」のすべてのインスタンスを検索します。

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

gci は get-childitem のエイリアスです

于 2008-08-18T14:51:13.290 に答える
3

Monroecheesemanの答えを拡張するだけです。gci は Get-ChildItem (dir または ls と同等) のエイリアスです。-r スイッチは再帰的な検索を行い、-i はインクルードを意味します。

そのクエリの結果を select-string にパイプすると、各ファイルが読み取られ、正規表現に一致する行が検索されます (この場合、指定されたものは ERROR ですが、任意の .NET 正規表現にすることができます)。

結果は一致オブジェクトのコレクションになり、一致する行、ファイル、およびその他の関連情報が表示されます。

于 2008-08-18T18:22:41.490 に答える
0

関連するメモとして、特定の正規表現検索または文字列を含むすべてのファイルを一覧表示する検索を次に示します。多少の改善が必要になる可能性がありますので、お気軽に取り組んでください。また、誰かがそれを歓迎される関数にカプセル化したい場合。

私はここで新しいので、これが独自のトピックに入る必要がある場合は、私に知らせてください. これは主に関連しているように見えるので、彼女に付けようと思いました。

# 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
#>
于 2012-09-07T19:35:43.050 に答える
0
if ($entry.EntryType -eq "Error")

オブジェクト指向であるため、ここで見つけることができる標準的な比較演算子の 1 つを使用して、問題のプロパティをテストしたいと考えています。

現在、ログをリモートで監視しているPS スクリプトがあります。いくつかの簡単な変更を加えると、それが機能するはずです。

編集:私が行った方法で展開したくない場合は、これはすでにこのために構築されたコマンドレットであることも追加する必要があると思います。チェックアウト:

man Get-EventLog
Get-EventLog -newest 5 -logname System -EntryType Error
于 2008-08-18T14:44:30.293 に答える