Como encontrar todos os arquivos de cota de um usuário em um servidor Windows 2003?

3

Eu tenho um servidor Windows 2003 R1 com 150 usuários usando algumas pastas em um disco limitado por cotas. Eu estou pedindo aos usuários para excluir arquivos antigos, mas acontece que eles não sabem quais são os seus próprios arquivos para que possam excluí-los. Como posso ver uma lista com os arquivos de usuário por usuário em uma pasta ou disco? Existe uma ferramenta administrativa do Windows que eu posso usar a partir de um PC Windows 7 ou 8 ou qualquer outro (linux?) Para conseguir isso?

    
por Radolino 11.03.2014 / 10:58

2 respostas

1

Uma maneira simples de exibir arquivos e possuir contas é usar o parâmetro -q do dir comando em um prompt de comando. Uma exibição mais seletiva pode ser feita via:

dir /q | find "Administrator"

exibir cada nome de pasta seguido por todos os arquivos (se houver) de propriedade da conta de administrador, canalizar o comando da seguinte maneira:

dir /q /s | findstr "Administrator Directory"

Outra solução é através do Windows Explorer: Clique com o botão direito do mouse em uma coluna e escolha exibir Owner .

Quando a coluna Proprietário for exibida, pode-se classificar os arquivos pelo proprietário. A seleção de arquivos exibirá o tamanho total dos arquivos selecionados no painel inferior.

Também é possível exibir apenas arquivos de propriedade de um usuário, inserindo a caixa Pesquisar. (superior direita) a consulta owner:<user-name> , por exemplo owner:administrator .

    
por 27.06.2014 / 13:38
0

Os arquivos em uma cota são determinados por quem é o proprietário do arquivo. O uso da cota é uma soma de todos os arquivos pertencentes ao usuário "domínio \ nome do usuário". Com isso em mente, a melhor maneira de ver quem está abusando do espaço, quem tem o que está em sua cota, etc., é enumerar todos os arquivos com seu tamanho, proprietário e data da última utilização.

Ao obter essas informações e exportá-las para o CSV, você pode agrupar os arquivos no Excel para ver o que é muito grande, o que é muito usado e quem tem um milhão de arquivos a mais do que deveria.

Quando tive que realizar uma tarefa semelhante, usei a seguinte parte do VBS. Esta parte do script solicitará uma pasta base e reciclará tudo sob ela. Na conclusão, um arquivo CSV é criado na mesma pasta em que o script está:

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

Se você estiver querendo ajudar seus usuários, eu os executaria durante a noite e falaria com um usuário no dia seguinte para determinar o que eles podem reduzir / remover.

Se você deseja apenas informações para um usuário específico, pode sempre dizer ao VBS para escrever apenas em uma correspondência semelhante a:

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
    
por 27.06.2014 / 13:24