在所有服务器共享中搜索通配符文件名
Search all Server Shares for a wildcard filename
我正在寻找一个 PowerShell 脚本,它会在服务器上的所有共享中搜索 *_HELP_instructions*
的通配符。它将搜索的文件示例为 12_HELP_INSTRUCTIONS.txt
或 22_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
}
您可以使用 ForEach 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!"
}
}
这将遍历 C:\Temp\PathList.txt
文件中的每个 $path
。 (例如 C:\*
或 \ServerName\MyShare\*
)
然后将输出推送到C:\Temp\Result.csv
。如果系统被感染。
这将需要一段时间 运行,具体取决于您在 txt 文件中放置的路径数量。但它会实现你所追求的!
希望对您有所帮助!
使用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
非常感谢大家的反馈。考虑到您的所有意见,最终代码如下:
$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
}
我正在寻找一个 PowerShell 脚本,它会在服务器上的所有共享中搜索 *_HELP_instructions*
的通配符。它将搜索的文件示例为 12_HELP_INSTRUCTIONS.txt
或 22_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
}
您可以使用 ForEach 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!"
}
}
这将遍历 C:\Temp\PathList.txt
文件中的每个 $path
。 (例如 C:\*
或 \ServerName\MyShare\*
)
然后将输出推送到C:\Temp\Result.csv
。如果系统被感染。
这将需要一段时间 运行,具体取决于您在 txt 文件中放置的路径数量。但它会实现你所追求的!
希望对您有所帮助!
使用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
非常感谢大家的反馈。考虑到您的所有意见,最终代码如下:
$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
}