使用变量在文件中搜索字符串
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.7
和 21
,因此它永远不会 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
搜索日志文件时遇到一些问题。我有一个基本脚本,用于在日志文件中搜索特定文本。问题是,我正在尝试使用可以由用户在命令行中调整的变量,但我无法识别它们。脚本应该将结果输出回屏幕。
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.7
和 21
,因此它永远不会 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