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

Search For String In File Using Variables

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

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

-like 运算符在没有通配符的情况下使用时等同于 -eq。由于您的行不会同时完全等于 192.168.1.721,因此它永远不会 return。因此,如果您想使用 -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