0

我正在寻找一个 PowerShell 脚本,它将在服务器上的所有共享中搜索通配符*_HELP_instructions*. 它将搜索的文件示例是12_HELP_INSTRUCTIONS.txt22_HELP_INSTRUCTIONS.html

到目前为止,我有下面的脚本将搜索 C:\ 的内容,但我需要一个可以设置为搜索服务器共享的脚本。

$FilesToSearch = Get-ChildItem "C:\*" -Recurse -ErrorAction SilentlyContinue |
                 where {$_.Name -like "*_HELP_instructions*"}

if ($FilesToSearch -ne $null) {
    Write-Host "System Infected!" 
    exit 2015
} else {
    Write-Host "System Not Infected!" 
    exit 0
}
4

3 回答 3

0

您可以使用 aForEach Loop来遍历您需要搜索的所有路径。

$paths = Get-Content C:\Temp\Pathlist.txt

Foreach($path in $paths){
   $Filestosearch = Get-ChildItem $path -Recurse -ErrorAction SiltenlyContinue| where {$_.Name -like "*_HELP_instructions*"}
   If($FilesToSearch -ne $null) {
      Write-Host "System Infected!" 
   $Filestosearch | Export-Csv c:\Temp\Result.csv -NoTypeInformation -Append
   } else {
      Write-Host "System Not Infected!" 
      }
}

这将遍历文件$path中的每个C:\Temp\PathList.txt。(例如C:\*\\ServerName\MyShare\*

然后将输出推到C:\Temp\Result.csv. 如果系统被感染。

这将需要一段时间才能运行,具体取决于您在 txt 文件中放置的路径数。但它会实现你所追求的!

希望这可以帮助!

于 2016-12-13T12:30:13.063 回答
0

用于Get-WmiObject枚举服务器上的共享文件夹:

$exclude = 'Remote Admin', 'Remote IPC', 'Default share'
$shared  = Get-WmiObject Win32_Share |
           Where-Object { $exclude -notcontains $_.Description } |
           Select-Object -Expand Path

Where-Object子句将管理共享排除在扫描之外(否则您可以简单地扫描所有本地驱动器)。

然后Get-ChildItem使用生成的路径列表调用:

$FilesToSearch = Get-ChildItem $shared -Filter '*_HELP_instructions*' -Recurse -ErrorAction SilentlyContinue
于 2016-12-13T14:21:30.833 回答
0

非常感谢你们的反馈。考虑到您的所有评论,最终代码如下:

$exclude = 'Remote Admin', 'Remote IPC', 'Default share'
$shared  = Get-WmiObject Win32_Share |
       Where-Object { $exclude -notcontains $_.Description } |
       Select-Object -Expand Path

$FilesToSearch = Get-ChildItem $shared -Filter '*_HELP_instructions*' -Recurse -ErrorAction SilentlyContinue

If($FilesToSearch -ne $null) 

{
Write-Host "System Infected!" 
exit 2015
}

else 

{
Write-Host "System Clear!" 
exit 0
}
于 2016-12-13T16:26:42.410 回答