|
|
Скрипт поиска файлов по расширению
Всем доброго дня.
Встала задача найти на локальных дисках сервера все файлы *.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
|
Для определения даты создания файла используйте свойство 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
|
Совсем было забыл, что значение свойства CreationDate нужно предварительно преобразовать:
Код:
strTemp = objItem.CreationDate
objFile.WriteLine(Mid(strTemp, 7, 2) & "-" & Mid(strTemp, 5, 2) & "-" & Left(strTemp, 4) & " " & objItem.Name)
|
Пробуйте:
читать дальше »
Код:
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
|
Этот скрипт выводит сообщение для пользователя с кнопкой Ок все работает и вывод какой хотелось, как это все в файл запихать и выбор по дискам D:\ H:\ G:\ ?
|
Цитата:
Цитата Rusya89
как это все в файл запихать »
|
Код:
cscript.exe //nologo "Путь\Мой скрипт.vbs">"Путь\Файл.txt"
Цитата:
Цитата Rusya89
и выбор по дискам D:\ H:\ G:\ ? »
|
Этого не было в начальном техзадании. Было сказано:
Цитата:
Цитата Rusya89
Встала задача найти на локальных дисках сервера все файлы *.avi, *.mp3 и т.д. … »
|
Откуда уверенность, что такие диски — «D:\ H:\ G:\» — наличествуют? А если каких-то нет? И что значит — «выбор по дискам»?
|
Цитата:
Цитата Iska
Откуда уверенность, что такие диски — «D:\ H:\ G:\» — наличествуют? А если каких-то нет? И что значит — «выбор по дискам»? »
|
В смысле есть диски на которых открыт общий доступ и надо смотреть конкретно по ним кто куда сколько во сколько накопировал.
|
Приведите здесь результаты исполнения (раздельно):
Код:
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:10.
© OSzone.net 2001-