在搜索日志文件时遇到一些问题。我有一个基本脚本,用于搜索日志文件中的特定文本。问题是,我试图使用可由用户在命令行调整的变量,但我不能让它们被识别。脚本应该将结果输出回屏幕。
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
答案 0 :(得分:1)
在没有通配符的情况下使用-like
运算符相当于-eq
。由于您的行不会同时完全等于192.168.1.7
和21
,因此它永远不会返回。因此,如果您想使用-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