Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Скрипт поиска файлов по расширению

Ответить
Настройки темы
VBS/WSH/JS - Скрипт поиска файлов по расширению

Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


Всем доброго дня.

Встала задача найти на локальных дисках сервера все файлы *.avi, *.mp3 и т.д. с полным путем к файлу а так же время его создания и username пользователя кто записал данный файл.
Вид примерно такой

16-08-2012 usename D:\Share\music.mp3

На форуме нашел что то подобное и хочу взять за основу, но в данном примере скрипт ищет на всех локальных дисках и выводит только путь к файлу и имя компьютера.

Код: Выделить весь код
strFile = "C:\FileList.txt"

Set objWMI = GetObject("winmgmts:\\.\root\cimv2")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objWSS = CreateObject("WScript.Shell")

Set colItem = objWMI.ExecQuery("SELECT DeviceID From Win32_LogicalDisk Where DriveType=3")
For Each objItem In colItem
  strDRV=strDRV &"Drive='"& objItem.DeviceID &"' OR "
Next

strSELECT="SELECT Name From CIM_DataFile Where ("& Left(strDRV,Len(strDRV)-4) &") AND ("& _
  "Extension='AVI' OR " & _
  "Extension='MP3' OR " & _
  "Extension='WMA' OR " & _
  "Extension='MPG' OR " & _
  "Extension='MP4')"

Set colItem = objWMI.ExecQuery(strSELECT)
Set objFile = objFSO.OpenTextFile(strFile,2,vbTrue)

objFile.WriteLine objWSS.ExpandEnvironmentStrings("%ComputerName%"& vbCRLF)
For Each objItem In colItem
  objFile.WriteLine(objItem.Name)
Next

objFile.Close

Отправлено: 15:33, 16-08-2012

 

Старожил


Сообщения: 210
Благодарности: 76

Профиль | Отправить PM | Цитировать


Для определения даты создания файла используйте свойство CreationDate:
Код: Выделить весь код
objFile.WriteLine(objItem.CreationDate & " " &  objItem.Name)
Если "username пользователя" - это имя владельца объекта, то вот пример функции для определения владельца:
Код: Выделить весь код
Function Get_Owner_FSO(strPath)
Dim objWMI, objSecSettings, objSD, objFS
Dim strPathWMI, strResult, strTemp
strPathWMI = Replace(strPath, "\", "\\", 1, -1, vbTextCompare)
On Error Resume Next
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objWMI = GetObject("winmgmts:\\.\root\CIMV2")
If Err.Number = 0 Then
    Set objFS = CreateObject("Scripting.FileSystemObject")
    strTemp = objFS.GetDrive(Left(strPath, 2)).FileSystem
    Set objFS = Nothing
    If Err.Number = 0 Then
        If StrComp(strTemp, "NTFS", vbTextCompare) = 0 Then
            Set objSecSettings = objWMI.Get("Win32_LogicalFileSecuritySetting.Path='" & strPathWMI & "'")
            If Err.Number = 0 Then
                If objSecSettings.GetSecurityDescriptor(objSD) = 0 Then
                    strResult = objSD.Owner.Domain & "\" & objSD.Owner.Name
                Else
                    strResult = "Не удалось прочитать дескриптор безопасности объекта."
                End If
                Set objSD = Nothing
            Else
                strResult = "Ошибка " & Err.Number & " при обращении к объекту." & vbNewLine & Err.Description
                Err.Clear
            End If
            Set objSecSettings = Nothing
        Else
            strResult = "Файловая система " & UCase(strTemp) & " не поддерживается."
        End If
    Else
        strResult = "Ошибка " & Err.Number & " при определении типа файловой системы." & vbNewLine & Err.Description
        Err.Clear
    End If
Else
    strResult = "Ошибка " & Err.Number & " при подключении к WMI-пространству." & vbNewLine & Err.Description
    Err.Clear
End If
Set objWMI = Nothing
On Error GoTo 0
Get_Owner_FSO = strResult
End Function
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:50, 16-08-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 210
Благодарности: 76

Профиль | Отправить PM | Цитировать


Совсем было забыл, что значение свойства CreationDate нужно предварительно преобразовать:
Код: Выделить весь код
strTemp = objItem.CreationDate
objFile.WriteLine(Mid(strTemp, 7, 2) & "-" & Mid(strTemp, 5, 2) & "-" & Left(strTemp, 4) & " " &  objItem.Name)

Отправлено: 17:10, 16-08-2012 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Пробуйте:
читать дальше »
Код: Выделить весь код
Option Explicit

Dim strComputer

Dim objSWbemDateTime
Dim objSWbemLocator
Dim objSWbemServicesEx
Dim objSWbemObjectEx_Win32_LogicalDisk
Dim objSWbemObjectEx_Win32_SID
Dim objSWbemObjectEx_CIM_DataFile

Dim strDrivesCondition
Dim strExtensionsCondition
Dim strExtension


strComputer = "."

Set objSWbemDateTime = WScript.CreateObject("WbemScripting.SWbemDateTime")

Set objSWbemLocator    = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")

' Drives condition
strDrivesCondition = ""

For Each objSWbemObjectEx_Win32_LogicalDisk In objSWbemServicesEx.ExecQuery("SELECT Name FROM Win32_LogicalDisk WHERE DriveType=3")
	strDrivesCondition = strDrivesCondition & "Drive = '" & objSWbemObjectEx_Win32_LogicalDisk.Name & "' OR "
Next

strDrivesCondition = Left(strDrivesCondition, Len(strDrivesCondition) - Len(" OR "))

' Extensions condition
strExtensionsCondition = ""

For Each strExtension In Array("avi", "MP3", "WMA", "MPG", "MP4")
	strExtensionsCondition = strExtensionsCondition & "Extension = '" & strExtension & "' OR "
Next

strExtensionsCondition = Left(strExtensionsCondition, Len(strExtensionsCondition) - Len(" OR "))


For Each objSWbemObjectEx_CIM_DataFile In objSWbemServicesEx.ExecQuery( _
	"SELECT CSName, Name, CreationDate From CIM_DataFile WHERE (" & strDrivesCondition & ") AND (" & strExtensionsCondition & ")")
	
	objSWbemDateTime.Value = objSWbemObjectEx_CIM_DataFile.CreationDate
	
	For Each objSWbemObjectEx_Win32_SID In objSWbemServicesEx.Get("Win32_LogicalFileSecuritySetting='" & objSWbemObjectEx_CIM_DataFile.Name & "'").Associators_("Win32_LogicalFileOwner", "", "Owner")
		WScript.Echo objSWbemObjectEx_CIM_DataFile.CSName, vbTab, objSWbemObjectEx_Win32_SID.ReferencedDomainName & "\" & objSWbemObjectEx_Win32_SID.AccountName, vbTab, objSWbemDateTime.GetVarDate, objSWbemObjectEx_CIM_DataFile.Name
	Next
Next

Set objSWbemServicesEx            = Nothing
Set objSWbemLocator               = Nothing

Set objSWbemDateTime              = Nothing

WScript.Quit 0

Последний раз редактировалось Iska, 16-08-2012 в 17:48.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:41, 16-08-2012 | #4


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


Этот скрипт выводит сообщение для пользователя с кнопкой Ок все работает и вывод какой хотелось, как это все в файл запихать и выбор по дискам D:\ H:\ G:\ ?

Отправлено: 10:48, 17-08-2012 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Rusya89:
как это все в файл запихать »
Код: Выделить весь код
cscript.exe //nologo "Путь\Мой скрипт.vbs">"Путь\Файл.txt"
Цитата Rusya89:
и выбор по дискам D:\ H:\ G:\ ? »
Этого не было в начальном техзадании. Было сказано:
Цитата Rusya89:
Встала задача найти на локальных дисках сервера все файлы *.avi, *.mp3 и т.д. …»


Откуда уверенность, что такие диски — «D:\ H:\ G:\» — наличествуют? А если каких-то нет? И что значит — «выбор по дискам»?

Отправлено: 15:11, 17-08-2012 | #6


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
Откуда уверенность, что такие диски — «D:\ H:\ G:\» — наличествуют? А если каких-то нет? И что значит — «выбор по дискам»? »
В смысле есть диски на которых открыт общий доступ и надо смотреть конкретно по ним кто куда сколько во сколько накопировал.

Отправлено: 16:13, 17-08-2012 | #7


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Приведите здесь результаты исполнения (раздельно):
Код: Выделить весь код
strComputer = "server"

For Each elem In GetObject("WinNT://" & strComputer & "/LanmanServer,FileService")
	WScript.Echo elem.Name, vbTab, elem.Path
Next
и:
Код: Выделить весь код
strComputer = "server"

For Each elem In GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2").InstancesOf("Win32_Share")
	WScript.Echo elem.Name, vbTab, elem.Type, vbTab, elem.Caption
Next
и укажите, какие ресурсы, из перечисленных, будут участвовать в поиске. Попробуем их отобрать.

Отправлено: 21:02, 17-08-2012 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Скрипт поиска файлов по расширению

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Сортировка файлов по расширению cyber_ua Скриптовые языки администрирования Windows 9 07-10-2012 23:16
Скрипт поиска и копирования файлов в папку. Как реализовать? Pozia AutoIt 5 31-03-2012 18:47
VBS/WSH/JS - Нужен VBS скрипт для поиска файлов по маске и копирование его в определенное место exekill Скриптовые языки администрирования Windows 0 17-03-2012 10:46
VBS/WSH/JS - Помогите улучшить скрипт для поиска и удаления файлов UpDaTe Скриптовые языки администрирования Windows 4 23-03-2011 04:33
Фильтр по расширению файлов для Win 2003 L13 Microsoft Windows NT/2000/2003 2 07-06-2006 10:46




 
Переход