繁体   English   中英

正则表达式带来所有行。 我想制作 PS 脚本来查找文件服务器中的所有密码模式

[英]Regex brings all lines. I want to make PS script to find all password pattern in File server

我正在尝试制作用于搜索所有文档和 txt 文件以查找密码模式的 powershell 脚本。 实际上我的代码工作正常。 我的正则表达式是捕获密码,但它带来了所有行。

正则表达式模式

""" . (?=.{8,20})(?=. [az])(?=. [AZ])(?=. [0-9])(?=. [!^#+$ %&{()=}? -|¨@.,:;,]).* """

样品样品2

我的正则表达式带来了所有 Line。 如何解决此错误。

PS 代码

$Path = "c:\users\XXXXXXX"
$output_file = ‘C:\Users\XXXXXXXX\Desktop\Result.txt’
$ALLWORDS =Get-ChildItem $Path  -Recurse -ErrorAction SilentlyContinue

foreach ($WORDS in $ALLWORDS) { #
$Word = New-Object -ComObject Word.Application
$Word.Visible = $false
$regex = ‘\b.*(?=.{8,20})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!^#+$%&{()=}?*\-|¨@.,:;,]).*\b’
$Doc = $Word.Documents.Open($WORDS.FullName, $false, $true)
$paras = $doc.Paragraphs
echo $paras.count
             
                    foreach($para in $paras){
                  if( $para.range.text -match $regex)  { 
                  $1=$matches.Values,$Words.Name | Out-File $output_file -Append
                  Write-Host $matches.Values, $words.Name 
                    }
                    }
                     
    $Doc.Close()
    $Word.Quit()
    $Word = $null
    }

您可以使用

(?<!\S)(?=[^a-z\s]*[a-z])(?=[^A-Z\s]*[A-Z])(?=[^0-9\s]*[0-9])(?=\S*[!^#+$%&{()=}?*|¨@.,:;,-])\S{8,20}(?!\S)

请参阅正则表达式演示 请注意,您需要在 PowerShell 中使用-cmatch运算符而不是-match ,否则它将不区分大小写。

详情

  • (?<!\S) - 左边不允许有空格
  • (?=[^az\s]*[az]) - 在除空格和小写 ASCII 字母之外的任何零个或多个字符之后,必须有一个小写 ASCII 字母
  • (?=[^AZ\s]*[AZ]) - 在除空格和大写 ASCII 字母之外的任何零个或多个字符之后,必须有一个大写 ASCII 字母
  • (?=[^0-9\s]*[0-9]) - 在除空格和 ASCII 数字之外的任何零个或多个字符之后,必须有一个 ASCII 数字
  • (?=\S*[!^#+$%&{()=}?*|¨@.,:;,-]) - 在任何零个或多个非空格之后,必须有一个来自[!^#+$%&{()=}?*|¨@.,:;,-]设置(将\S*替换为[^\s!^#+$%&{()=}?*|¨@.,:;,-]*为了获得更好的性能,我只是想让这里的模式更短)
  • \S{8,20} - 八到二十个非空白字符
  • (?!\S) - 右侧空白边界。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM