使用powershell验证文件中的文本块

使用powershell验证文件中的文本块,powershell,Powershell,我有一个满是Cisco配置的文件夹。我很难找到一种方法来验证配置中的命令字符串 我对单行命令没有任何问题,目前正在使用以下命令,100%成功: Get-childitem -path $Path -recurse |foreach-object{if (-not (select-string -inputobject $_ -Pattern "banner login")){$_}} | select name | Out-file $OutPath\OutputName.txt 我想验证以下

我有一个满是Cisco配置的文件夹。我很难找到一种方法来验证配置中的命令字符串

我对单行命令没有任何问题,目前正在使用以下命令,100%成功:

Get-childitem -path $Path -recurse |foreach-object{if (-not (select-string -inputobject $_ -Pattern "banner login")){$_}} | select name | Out-file $OutPath\OutputName.txt
我想验证以下命令:

    access-list 69 remark Name
    access-list 69 permit x.x.x.x
    access-list 69 permit x.x.x.x
    access-list 69 permit x.x.x.x
这4条线路在所有配置中都是相同的。我试过了

    Get-childitem -path $Path -recurse |foreach-object{if (-not (select-string -inputobject $_ -Pattern "access-list 69 remark Name", "access-class xx in", "access-list 69 permit x.x.x.x", "access-list 69 permit x.x.x.x", "access-list 69 permit x.x.x.x")){$_}} | select name | Out-file $OutPath\OutputText.txt

…但这只会分别检查这些命令中的每一个,并将所有配置文件报告为符合要求。我正试着按照那个确切的顺序验证那个特定的块。谢谢您的时间。

使用与类似的
-match

在长代码行之外声明搜索字符串:

$str = @"
access-list 69 remark Name
access-list 69 permit x.x.x.x
access-list 69 permit x.x.x.x
access-list 69 permit x.x.x.x
"@
除了格式,唯一的更改是将
选择字符串
更改为
-匹配

Get-childitem -path $Path -recurse | foreach-object {
   If (-not (([IO.File]::ReadAllText($_.FullName)) -match ".*$str.*")) {
      $_
   }
} | Select Name | Out-file $OutPath\OutputText.txt

这将保持秩序并处理空白/换行:

$CfgBlock = @(
    'access-list 69 remark Name',
    'access-class xx in',
    'access-list 69 permit x.x.x.x',
    'access-list 69 permit x.x.x.x',
    'access-list 69 permit x.x.x.x'
) 

$CfgRegex = '\s*' + (($CfgBlock -split '\s+' | ForEach-Object {[regex]::Escape($_)}) -join '\s+') + '\s*'

Get-ChildItem -Path $Path -Recurse | Where-Object {
    (Get-Content -Path $_.FullName -Raw) -notmatch $CfgRegex
} | Select-Object -Property Name | Out-file $OutPath\OutputText.txt

需要小心。它们不会导致问题,但在
$CfgBlock
中有正则表达式控制字符。如果op在其他地方使用这种逻辑,他可能会遇到一个惊喜,就像一个魔咒!非常感谢你,beatcracker@马特,谢谢,错过了。现在应该修好了。需要小心。它们不会导致问题,但在
$str
中有正则表达式控制字符。如果op在其他地方使用这种逻辑,他可能会大吃一惊