2015-06-25 68 views
0

我明白任何意见或援助Powershell - 帮助。搜索和名称文件

我遇到的问题是,我有一个包含所有我目前正在工作的机器的日志文件的文件夹。我有几个搜索日志查找预定字符串的脚本,我有另一个脚本会根据每个结果的计数生成一个报告。但是,另外我想让它告诉每个字符串结果的机器名称。此外,如果没有发现任何东西,则不显示任何内容幸运的是,我通过计算机名称命名了每个日志文件,希望如果它在日志中找到该字符串,它只需要命名它所在的日志文件的标题即可。

任何人都可以提供任何帮助用这个脚本?我尝试过使用GCI的各种脚本,如果语句无济于事。

谢谢!

$items = get-childitem "path-to-file" 


ForEach ($item in $items) 
{ 

if ($items -contains "SUCCESS") { 
write-host $items.name 
} 

} 
+3

有什么你试图得到你想要什么,你可以_show us_?我们不是一个代码编写服务,而是一个帮助程序员和编程爱好者的社区。如果你付出一点努力,我们可以帮助休息。截至目前,这很可能会被关闭。 – Matt

+0

我已经在代码中添加了,我很抱歉。我曾试图用各种方式尝试,但不会把它们扔到那里。 –

+0

没问题。感谢您提供一些东西。在大多数情况下,我们需要知道如何处理,因此缩小了解决方案的范围,并获得了许多简单的问题,因此我们不需要浪费每个人的时间。欢迎来到SO。由于问题现在好转,我除去了我的downvote和近距离投票。 – Matt

回答

0

您应该使用Get-Content查询文件内容。

foreach ($item in $items) { 
    if ((get-content $item) -match "SUCCESS") { 
     $item.name 
    } 
} 
+0

非常好,谢谢。获得我想要的内容。我如何以列表格式制作它?它只是混杂了所有的数据,并为每台机器写入描述。 –

+0

这取决于你想在你的列表中做什么。您可以将'$ item.name'更改为一个查询,它将选择'$ item'(这是一个包含“SUCCESS”行的日志文件)或'(get-content $ item)'的某些属性的更好的属性,它是一个字符串数组(所以如果你想要一个标题,只需输出'(get-content $ item)[0]' - 它将输出有问题的文件的第一行,那么你希望接收什么格式? – Vesper

+0

一个头部列表: 成功的机器: -machines –

0

-contains不幸得到了几个人的名字误导。它用于查找数组中的匹配元素。而$items是一个数组,它不包含您期望的内容。既然你也在寻找每个字符串结果的机器名称我想建议Select-String这就像grep如果你熟悉unix的话。

Get-ChildItem "C:\temp" -filter "*.log" | Select-String "SUCCESS" | Select-Object Path,Line 

有一个你可能不需要的过滤器。如果目录仅包含有问题的文件,请将其删除。这会告诉你这样的事情。

Path    Line    
----    ----    
C:\temp\logfile.log computer = success 

匹配的文件名以及匹配的完整行。