Лучший отвечающий
Подскажите скрипт поиска файлов и создание отчета

Вопрос
-
Требуется скрипт который при загрузке компа ищет в определенных папках файлы с расширением .exe, при их обнаружении создается фаил с отчетом, где бы указывалось имя файла и путь к нему. Желательно выкладку файла осуществить по сети. При отсутсвии найденных файлов, желательно отсутствие файла с отчетом. Желательно, чтобы этот поиск не видел пользователь.23 июня 2010 г. 13:32
Ответы
-
@echo off
setlocal
chcp 1251 1>nul
set searchPATH="C:\Folder\Folder","C:\Some Forder","D:\Еще Одна Папка"
for %%i in (%searchPATH%) do 1>>report.txt dir /b /s /a "%%~i\*.exe"- Помечено в качестве ответа Samodelkin 25 июня 2010 г. 5:26
24 июня 2010 г. 1:43 -
> Вот почему-то в профиле пользователя ищет в подпапках, а на диске C и D
Просто в "set searchPath" в значении убери замыкающие слеши:
set searchPATH="C:","%USERPROFILE%","D:"
или убери слешь в "%%~i\*.exe", т.е: "%%~i*.exe"
- Помечено в качестве ответа Samodelkin 25 июня 2010 г. 5:26
24 июня 2010 г. 18:26
Все ответы
-
@echo off
setlocal
chcp 1251 1>nul
set searchPATH="C:\Folder\Folder","C:\Some Forder","D:\Еще Одна Папка"
for %%i in (%searchPATH%) do 1>>report.txt dir /b /s /a "%%~i\*.exe"- Помечено в качестве ответа Samodelkin 25 июня 2010 г. 5:26
24 июня 2010 г. 1:43 -
Все супер, спасибо, единственное как сделать, чтобы искал не только в этой папке, но и подпапках, если они имеются в этой папке.24 июня 2010 г. 6:28
-
Скрипт Powershell
function Find-Object () { param( $Computer, $Path = @() ) $info = @() foreach ( $Path_n in $Path) { $ObjectPath = $null $ObjectPath = Get-ChildItem "\\$computer\$Path_n" -Recurse -ErrorAction SilentlyContinue | ? {$_name -like "*.exe"} if ($ObjectPath) { $info += $ObjectPath | % { $_ | Select-Object @{e={$_.Name};n='Name File'}, @{e={$_.FullName};n='Path File'}} } } return $Info }
ИспользоватьFind-Object -Computer "Имя компьютера" -Path "С$\Folder_1","С$\Folder_2",..,"С$\Folder_n"
- Изменено Angel-Keeper 24 июня 2010 г. 7:39
- Предложено в качестве ответа Angel-Keeper 24 июня 2010 г. 7:40
24 июня 2010 г. 6:56 -
Можно и так $computer, но мне проще, чтобы при включении компа проводилось сканирование, чем просто в опрделенное время долбился на каждый комп, а то же могут быть проблемы с этим доступом, к примеру отключен диск через $
set searchPATH="C:\","%USERPROFILE%\","D:\"
Вот почему-то в профиле пользователя ищет в подпапках, а на диске C и D нет...
24 июня 2010 г. 7:16 -
> Вот почему-то в профиле пользователя ищет в подпапках, а на диске C и D
Просто в "set searchPath" в значении убери замыкающие слеши:
set searchPATH="C:","%USERPROFILE%","D:"
или убери слешь в "%%~i\*.exe", т.е: "%%~i*.exe"
- Помечено в качестве ответа Samodelkin 25 июня 2010 г. 5:26
24 июня 2010 г. 18:26 -
Вариант 1:
Скрипт PowerShell:
param( [String[]]$Path, $Object = "*.exe", $LogName = "Find-Object-Log.txt" ) foreach ($Path_n in $Path) { $ObjectPath = $null $ObjectPath = Get-ChildItem -Path $Path_n -Recurse -ErrorAction SilentlyContinue | ? {$_.name -like $Object} if ($ObjectPath) { $info = @() $info += $ObjectPath | % { $_ | Select-Object @{e={$_.Name};n='File Name'}, @{e={$_.FullName};n='File Path'}} $Info | Export-Csv -Path "$Path_n\$LogName" -Encoding Unicode -Delimiter ":" -NoTypeInformation -Force } }
Сохраняете в файле Find-ObjectLocalComputer.ps1
Этот файл копируете на диск "C: " компьютера.
Создаете файл Find-Object.cmd , который содержит строку:
start powershell -Nologo -Noninteractive -WindowStyle Hidden -Command "&{C:\Find-ObjectLocalComputer.ps1 -Path "c:\Folder_1","c:\Folder_2",..,"c:\Folder_n" }"
Закидываете файл Find-Object.cmd в автозагрузку.
Если в папке или её под папках были найдены файлы с расширением "*.exe" , то создастся лог в папке, которую указали для сканирования. Если нет таких файлов, то лог не будет создан.
Вариант 2:
Скрипт PowerShell:
function Find-ObjectLocalComputer () { param( [String[]]$Path, $Object = "*.exe", $LogName = "Find-Object-Log.txt" ) foreach ($Path_n in $Path) { $ObjectPath = $null $ObjectPath = Get-ChildItem -Path $Path_n -Recurse -ErrorAction SilentlyContinue | ? {$_.name -like $Object} if ($ObjectPath) { $info = @() $info += $ObjectPath | % { $_ | Select-Object @{e={$_.Name};n='File Name'}, @{e={$_.FullName};n='File Path'}} $Info | Export-Csv -Path "$Path_n\$LogName" -Encoding Unicode -Delimiter ":" -NoTypeInformation -Force } } }
Сохраняете в файле Microsoft.PowerShell_profile.ps1
Этот файл расположен по пути "C:\Documents and Settings\Имя учетки\Мои документы\WindowsPowerShell". Если папки "WindowsPowerShell" и файла по выше указанному пути нет, создайте папку и файл.
Создаете файл Find-Object.cmd , который содержит строку:
start powershell -Nologo -Noninteractive -WindowStyle Hidden -Command "&{Find-ObjectLocalComputer -Path "c:\Folder_1","c:\Folder_2",..,"c:\Folder_n" }"
Закидываете файл Find-Object.cmd в автозагрузку.
Если в папке или её под папках были найдены файлы с расширением "*.exe" , то создастся лог в папке, которую указали для сканирования. Если нет таких файлов, то лог не будет создан.
- Предложено в качестве ответа Angel-Keeper 25 июня 2010 г. 2:35
25 июня 2010 г. 2:22 -
Спасибо, но мне вариант от 01MDM ближе, распространил через групповые политики и все )) Но все равно и вам спасибо, может кому пригодится.25 июня 2010 г. 5:25
-
так это тоже можно ч\з GP.25 июня 2010 г. 5:57