我感谢的任何反馈或帮助
我遇到的问题是,我有一个文件夹,其中包含我当前使用的所有机器的日志文件。我有几个脚本可以在日志中搜索预定的字符串,我还有另一个脚本可以根据每个结果的计数生成报告。然而,另外,我希望它告诉每个字符串结果的机器名称。此外,如果未找到任何内容,则不显示任何内容。幸运的是,我已经用机器名为每个日志文件命名,希望如果它在日志中找到字符串,它只需要命名它所在的日志文件的标题。
有人能为这个脚本提供任何帮助吗?我尝试过使用GCI和if语句的各种脚本,但都无济于事。
谢谢!
$items = get-childitem "path-to-file"
ForEach ($item in $items)
{
if ($items -contains "SUCCESS") {
write-host $items.name
}
}
您应该使用Get-Content
来查询文件内容。
foreach ($item in $items) {
if ((get-content $item) -match "SUCCESS") {
$item.name
}
}
-contains
不幸因其误导性名称而受到一些人的关注。它用于查找数组中的匹配元素。虽然$items
是一个数组,但它不包含您期望的内容。由于您也在寻找每个字符串结果的机器名,如果您熟悉unix,我建议使用Select-String
,它与grep
类似。
Get-ChildItem "C:temp" -filter "*.log" | Select-String "SUCCESS" | Select-Object Path,Line
那里有一个你可能不需要的过滤器。如果目录仅包含有问题的文件,请删除。这会让你看到这样的东西。
Path Line
---- ----
C:templogfile.log computer = success
匹配的文件名以及匹配的完整行。