none
Подскажите скрипт поиска файлов и создание отчета RRS feed

  • Вопрос

  • Требуется скрипт который при загрузке компа ищет в определенных папках файлы с расширением .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