Getting top users by storage usage

This topic contains 3 replies, has 2 voices, and was last updated by Profile photo of Olaf Soyk Olaf Soyk 3 weeks ago.

  • Author
    Posts
  • #74428
    Profile photo of r1sh
    r1sh
    Participant

    Hello!

    I've got Fileserver on Windows 2012, i have a script that get info:

    1. Top-30 largest files
    2. Top-30 newest files

    I need to get top-20 users that use more space on file storage then others.

    Any ideas how to do it?

  • #74431
    Profile photo of Olaf Soyk
    Olaf Soyk
    Participant

    You could extend your script to show the top-20 users as well. 😉

    It's not a free script shop here. We cannot write scripts for you or deliver ready to use solutions. If you have a specific problem with a particular piece of code you wrote you can post this here and the errors you might have and we can try to help you with this.

    • #74434
      Profile photo of r1sh
      r1sh
      Participant

      Yeap, you;re right, here is my scripts:

      $date=Get-Date -format yyyy-MM-dd
      $src="C:\shares\"
      $dst="C:\Shares\"
      $table = @{Expression={$_.Owner};Label="Process Name";width=25}, `
      @{Expression={$_.SizeMB};Label="Process ID";width=15}, `
      @{Expression={$_.MainWindowTitle};Label="Window Title";width=40}
      If (Test-Path '$dst') {New-Item $dst -type directory}
      $a=0
      $b=0
      gci -r $src -ea 0 |  Select-Object FullName ,@{n='Owner';e={(Get-Acl $_.fullname).Owner}}, CreationTime, Length | sort Owner -desc  | foreach {
      if ( $_.Owner -eq $a ) {$b=$b+$_.Length 
      }
      else {
       write-host $a , $b
       $a=$_.Owner
       $b=0
       }
      }
      

      I get list of users, sort it by owner and then on every string i take owner and compare it with previous Owner. If it's the same, I summarize size. Else I write-host results.

      It works ok, is it logically correct?

      How can I add variables instaed of Write-Host to Table and export it to cvs?

    • #74441
      Profile photo of Olaf Soyk
      Olaf Soyk
      Participant

      OK ... sorry when I don't take your script and debug it. I think it's more helpful when I show how I would try to accomplish what you asked for and you adapt it to your special needs.

      $SharesRoot = 'C:\shares\Sever Minerals\7.Marketing'
      
      $SizeReport = Get-ChildItem -Path $SharesRoot -Directory |
          ForEach-Object {
              [PSCustomObject]@{
                  FolderName = $_.Name
                  SizeInGB = [MATH]::Round((Get-ChildItem -Path $_.FullName -File -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Property length -Sum).Sum /1MB, 2)
                  Owner = (Get-Acl $_.fullname).Owner
              }
          }
      $SizeReport | Sort-Object -Property SizeInGB | Select-Object -First 20

      I hope it will be enough inspiration for you. 😉

You must be logged in to reply to this topic.