У меня Windows Server 2003 R1 со 150 пользователями, использующими некоторые папки на диске, ограниченные квотами. Я прошу пользователей удалить старые файлы, но бывает, что они не знают, какие файлы являются их собственными, поэтому они могут удалить их. Как я могу просмотреть список с принадлежащими пользователю файлами в папке или на диске? Существует ли средство администрирования Windows, которое я могу использовать из Windows 7 или 8 или чего-то еще (linux?) ПК для этого?
2 ответа
Простой способ отображения файлов и владельцев учетных записей - использовать параметр -q команды dir в командной строке. Более избирательное отображение может быть сделано через:
dir /q | find "Administrator"
Чтобы отобразить каждое имя папки, за которым следуют все файлы (если они есть), принадлежащие учетной записи администратора, передайте команду следующим образом:
dir /q /s | findstr "Administrator Directory"
Другое решение - через проводник Windows: щелкните правой кнопкой мыши столбец и выберите « Owner .
После отображения столбца Владелец можно отсортировать файлы по владельцу. Выбор файлов покажет общий размер выбранных файлов в нижней панели.
Можно также отобразить только файлы, принадлежащие пользователю, введя в поле поиска (вверху справа) владельца запроса owner:<user-name> , например, owner:administrator .
Файлы в квоте определяются тем, кто владеет файлом. Использование квоты представляет собой сумму всех файлов, принадлежащих пользователю "домен \ имя пользователя". Имея это в виду, лучший способ узнать, кто использует пространство, кто имеет что в их квоте и т.д., - это перечислить все файлы с указанием их размера, владельца и даты последнего использования.
Получив эту информацию и экспортировав в CSV, вы можете сгруппировать файлы в Excel, чтобы увидеть, что слишком велико, что слишком не используется, и у кого на миллион файлов больше, чем нужно.
Когда мне пришлось выполнить аналогичную задачу, я использовал следующий фрагмент VBS. Этот фрагмент скрипта запросит у вас базовую папку и восстановит все, что под ней. По завершении CSV создается в той же папке, в которой находится сам скрипт:
on error resume next
' Flags for browse dialog
Const BIF_returnonlyfsdirs   = &H0001
Const BIF_dontgobelowdomain  = &H0002
Const BIF_statustext         = &H0004
Const BIF_returnfsancestors  = &H0008
Const BIF_editbox            = &H0010
Const BIF_validate           = &H0020
Const BIF_browseforcomputer  = &H1000
Const BIF_browseforprinter   = &H2000
Const BIF_browseincludefiles = &H4000
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objDlg = WScript.CreateObject("Shell.Application")
Set objShell = CreateObject("WScript.Shell")
Set objNetwork = CreateObject("WScript.Network") 
'Get the Source Folder
' Use the BrowseForFolder method.
Set objStartFolder = objDlg.BrowseForFolder (&H0, _
    "Please select the FOLDER to report on.", BIF_editbox + BIF_returnonlyfsdirs)
' Here we use TypeName to detect the result.
If InStr(1, TypeName(objStartFolder), "Folder") > 0 Then
    sourceFolder = objStartFolder.ParentFolder.ParseName(objStartFolder.Title).Path
Else
    MsgBox "An error has occured: Unable to read destination folder"
End if
'Ask to open the report now or just close
strMbox = MsgBox("Are youn sure you want to run the report of: " & sourceFolder & chr(13) & chr(10) & chr(13) & chr(10) & "If you continue this may take an exteneded period of time, a message will be displayed when complete, continue?",4,"Are you sure?")
if strMbox = 6 Then
    currentScriptPath = Replace(WScript.ScriptFullName, WScript.ScriptName, "") 
    reportFile = currentScriptPath & "File_Properties_Report.csv"
    'OpenTextFile(destination, forwriting, createnew, open as Unicode) 
    Set objReportFile = objFSO.OpenTextFile(reportFile, ForWriting, True, True)
    'Add headers
    objReportFile.Write("Path, Size(kb), Type, Created, Last Accessed, Last Modified, Owner"  & chr(13) & chr(10))
    'Run though file report process
    ReportFiles sourceFolder
    'Close the file 
    objReportFile.Close
    'Compete
    strMbox = MsgBox("Report Complete")
End if
Function ReportFiles(currentFolder)
   Dim objFolder, objFile, fileCollection, folderCollection, subFolder
   Set objFolder = objFSO.GetFolder(currentFolder)
   Set fileCollection = objFolder.Files
   For Each objFile In fileCollection
        'Get File Properties
        strFilePath = objFile.Path
        strFileName = objFile.Name
        strFileSize = objFile.Size / 1024
        strFileType = objFile.Type
        strFileDateCreated = objFile.DateCreated
        strFileDateLastAccessed = objFile.DateLastAccessed
        strFileDateLastModified = objFile.DateLastModified
        'Get File owner
        strFileOwnerDomain = ""
        strFileOwner = ""
        strComputer = "."
            Set objWMIService = GetObject("winmgmts:" _
            & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
        if strFileType <> "Shortcut" or InStr(1,strFileName, "AlbumArt",1) = 0 or InStr(1,strFileName, "£",1) Then
            Set colItems = objWMIService.ExecQuery ("ASSOCIATORS OF {Win32_LogicalFileSecuritySetting=""" & Replace(strFilePath, "\", "\\") & """}" & " WHERE AssocClass=Win32_LogicalFileOwner ResultRole=Owner")
            For Each objItem in colItems
                strFileOwnerDomain =  objItem.ReferencedDomainName
                strFileOwner = objItem.AccountName
            Next
        End If
        objReportFile.Write(chr(34) & strFilePath & chr(34) & ", " _
                            &  Round(strFileSize,2) & ", " _
                            & chr(34) & strFileType & chr(34) & "," _
                            & strFileDateCreated & "," _
                            & strFileDateLastAccessed & "," _
                            & strFileDateLastModified & "," _
                            & chr(34) & strFileOwnerDomain & "\" & strFileOwner & chr(34) & "," _
                            & chr(13) & chr(10))    
    Next
    'Loop for each sub folder
    Set folderCollection = objFolder.SubFolders
    For Each subFolder In folderCollection
       ReportFiles subFolder.Path
   Next
End Function
Если вы хотите помочь своим пользователям, я бы запустил эту ночь и затем поговорил бы с пользователем на следующий день, чтобы выяснить, что они могут уменьшить / удалить.
Если вы хотите, чтобы информация только для определенного пользователя, вы всегда можете сказать VBS писать только на совпадение, подобное:
strTargetUser = "domain\person"
if strFileOwnerDomain & "\" & strFileOwner = strTargetUser then
objReportFile.Write(chr(34) & strFilePath & chr(34) & ", " _
                            &  Round(strFileSize,2) & ", " _
                            & chr(34) & strFileType & chr(34) & "," _
                            & strFileDateCreated & "," _
                            & strFileDateLastAccessed & "," _
                            & strFileDateLastModified & "," _
                            & chr(34) & strFileOwnerDomain & "\" & strFileOwner & chr(34) & "," _
                            & chr(13) & chr(10))  
end if
