我对PowerShell有些陌生,所以如果有任何帮助,我将不胜感激。我正在尝试将PS脚本组合在一起,以便在将文件从一个网络传输到另一个网络之前搜索敏感字。喜欢‘分类’和多个其他的词,我可以添加到一个文本文件中的词库,但每次更新代码
现在,我被迫使用PS 2、windows 7和server 2008
Select-String -Path e:\transfer_folder\*.* -pattern Classified,restricted然后,我可以获得单词列表上任何匹配的输出,这样我就可以找到它们。我正试图通过我喜欢的脏字搜索来加快我对数百页文档的搜索速度,这样我就不会把不应该放到错误的网络上。
发布于 2019-06-13 12:18:23
你的想法很正确。powershell中的-Pattern tack通常可以调用来处理正则表达式。如果您从未使用过正则表达式,请查看此beginner's guide to using regex pattern matching。您可能需要的是一组变量,您可以使用这些变量动态地挑选出那些敏感的关键字。
简短而简单的答案是,您希望使用管道来分隔pattern的选项,并将其作为字符串传递。
Select-String -Path e:\transfer_folder\*.* -pattern "Classified|Restricted"
此外,您可能希望考虑在文件级执行此操作,而不是像这样将所有内容导入到willynilly中。我会选择这样的东西:
$files = @(Get-ChildItem -Path E:\transfer_folder\ -Filter "*.txt|*.etc").FullName
( @符号表示以数组形式获得输出。.FullName意味着您只从该命令生成的对象中选择FullName字段。)
然后,您可以单独处理每个文件,如下所示:
Foreach ($file in $files) {
Write-Host "Processing $file"
echo (Select-String -Path $file -Pattern $pattern)
}我喜欢powershell的原因之一是执行这些类型的匹配操作相对容易。如果深入研究Regex,您会注意到可以将"OR“表示为"|”。因此,您有两个逻辑上的选择:
$pattern = "Classified|Forbidden|Death|Danger"
脚本就是不需要做一次以上的事情,对吧?所以你可能想把它封装在一个函数或者其他什么东西里。或者您可能想要从文本文件中获取单词?你可以这样:(可能需要一些调整)
function Get-ForbiddenWords ([string[]]$words, [string]$folder) {
ForEach ($word in $words) {
$pattern += "$word|"
}
#remove trailing pipe
$pattern -replace ".$"
$files = @(Get-ChildItem -Path $folder -Filter "*.txt|*.etc").FullName
Foreach ($file in $files) {
Write-Host "Processing $file"
echo (Select-String -Path $file -Pattern $pattern)
}
}现在,您可以将其放入您的powershell配置文件中,并使用以下命令调用它
Get-ForbiddenWords -words secret dangerous whatever -folder E:\transfer_folder\
https://stackoverflow.com/questions/56568388
复制相似问题