2016-12-13 2 views
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 
} 
+0

Вы хотите запустить скрипт с определенной долей на удаленном сервере? Все акции? Локально на всех общих папках сервера? –

+0

Привет Ансгар, скрипт будет работать локально на сервере, поэтому он должен сканировать все локальные ресурсы этого конкретного сервера –

ответ

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 
+0

Ansgar, спасибо большое за это, это именно то, что я после. добавил это к моему сценарию и его обработке –

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!" 
     } 
} 

Это будет цикл через каждый $path в файле C:\Temp\PathList.txt. (например, C:\* или \\ServerName\MyShare\*)

Затем нажмите выход на C:\Temp\Result.csv. Если система заражена.

Это займет некоторое время для запуска в зависимости от того, сколько путей вы указали в txt-файле. Но он достигнет того, что вам нужно!

Надеюсь, это поможет!

+0

HI Lachie, спасибо за ваши комментарии. Я никогда не касался Powershell раньше, но приведенный выше сценарий в значительной степени касается того, как мне нужен процесс для запуска, в том смысле, что мне нужно его для сканирования имени файла, а затем сообщать, чистая или зараженная система, а затем выйти с определенным код, как описано в моем фрагменте кода. В идеале мне нужно, чтобы фрагмент сценария был близок к тому, как он в настоящее время мне нужен, он просто сканирует общие ресурсы локального сервера, а не только C: \, и выводит результат так же, как мой текущий скрипт, если это возможно? –

+0

Привет @MarkSmith, Всегда хорошо иметь другого человека, используя powershell! я отредактировал ** код **, чтобы отразить фрагмент, который вы использовали ранее. Теперь он будет выводиться на экран, если он заражен или нет. Если он заражен, сохраните эту информацию в CSV –

+0

Привет, Lachie, это выглядит более многообещающим :) один последний запрос, есть ли способ, которым скрипт может идентифицировать локальные ресурсы сервера самостоятельно, вместо того, чтобы полагаться на txt-файл с помощью акции вручную напечатаны? Это не будет проблемой, если у нас будет только несколько серверов, но мы поддерживаем множество серверов на нашей клиентской базе. –

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 
} 
Смежные вопросы