使用变量在文件中搜索字符串

时间:2017-05-04 17:18:42

标签: powershell logfile

在搜索日志文件时遇到一些问题。我有一个基本脚本,用于搜索日志文件中的特定文本。问题是,我试图使用可由用户在命令行调整的变量,但我不能让它们被识别。脚本应该将结果输出回屏幕。

param (
[string]$file ,
[string]$Ip ,
[string]$port
)
Get-Content -Path C:\$file | Where-Object {$_ -like $Ip -and $_ -like $port}

执行脚本的命令行示例:

PS C:\> .\LogSearch.ps1 logfile04.txt 192.168.1.7 21

在这种情况下,logfile04.txt是文件,端口是21,IP地址是192.168.1.7

此时运行脚本时,我什么也没有返回,但文件中有该行。

4|Oct 19 2015|18:28:39|106023|75.76.77.80|50077|192.168.1.7|21|Deny tcp src

1 个答案:

答案 0 :(得分:1)

在没有通配符的情况下使用-like运算符相当于-eq。由于您的行不会同时完全等于192.168.1.721,因此它永远不会返回。因此,如果您想使用-like,则需要使用通配符包围匹配字符串。

Get-Content -Path C:\$file | Where-Object {$_ -like "*$Ip*" -and $_ -like "*$port*"}

或者,-match运算符使用正则表达式。所以你不需要通配符。

Get-Content -Path C:\$file | Where-Object {$_ -match $Ip -and $_ -match $port}

这是good guide on the different uses of these comparison operators