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

Ответить
Аватара пользователя
Rusya89

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

Сообщение Rusya89 »

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



Встала задача найти на локальных дисках сервера все файлы *.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
Аватара пользователя
DmitriiV

Re: VBS/WSH/JS - Скрипт поиска файлов по расширению

Сообщение DmitriiV »

Для определения даты создания файла используйте свойство CreationDate:



Код:

Код: Выделить всё

objFile.WriteLine(objItem.CreationDate & " " &  objItem.Name)

Если "username пользователя"[/i] - это имя владельца объекта, то вот пример функции для определения владельца:



Код:

Код: Выделить всё

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
Аватара пользователя
DmitriiV

Re: VBS/WSH/JS - Скрипт поиска файлов по расширению

Сообщение DmitriiV »

Совсем было забыл, что значение свойства CreationDate нужно предварительно преобразовать:



Код:

Код: Выделить всё

strTemp = objItem.CreationDate
objFile.WriteLine(Mid(strTemp, 7, 2) & "-" & Mid(strTemp, 5, 2) & "-" & Left(strTemp, 4) & " " &  objItem.Name)
Аватара пользователя
Iska

Re: VBS/WSH/JS - Скрипт поиска файлов по расширению

Сообщение Iska »

Пробуйте:


читать дальше »




Код:

Код: Выделить всё

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
Аватара пользователя
Rusya89

Re: VBS/WSH/JS - Скрипт поиска файлов по расширению

Сообщение Rusya89 »

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

Re: VBS/WSH/JS - Скрипт поиска файлов по расширению

Сообщение Rusya89 »

Цитата Rusya89:



как это все в файл запихать
VBS/WSH/JS - Скрипт поиска файлов по расширению






Код:

Код: Выделить всё

cscript.exe //nologo "Путь\Мой скрипт.vbs">"Путь\Файл.txt"


Цитата Rusya89:



и выбор по дискам D:\ H:\ G:\ ?
VBS/WSH/JS - Скрипт поиска файлов по расширению




Этого не было в начальном техзадании. Было сказано:


Цитата Rusya89:



Встала задача найти на локальных дисках сервера все файлы *.avi, *.mp3 и т.д. …
VBS/WSH/JS - Скрипт поиска файлов по расширению








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

Re: VBS/WSH/JS - Скрипт поиска файлов по расширению

Сообщение Rusya89 »

Цитата Iska:



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




В смысле есть диски на которых открыт общий доступ и надо смотреть конкретно по ним кто куда сколько во сколько накопировал.
Аватара пользователя
Iska

Re: VBS/WSH/JS - Скрипт поиска файлов по расширению

Сообщение Iska »

Приведите здесь результаты исполнения (раздельно):



Код:

Код: Выделить всё

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

и укажите, какие ресурсы, из перечисленных, будут участвовать в поиске. Попробуем их отобрать.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»