Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- $date = Get-Date -format "yyyy-MM-dd"
- $HomeD = @()
- $size = $NULL
- $sum = $NULL
- $MaxThreads = "10"
- $SleepTimer = "500"
- $MaxWaitAtEnd = "3600"
- $ScriptFile = "C:\Temp\script lab\New\getHomeDirSize.ps1"
- $i = 0
- $deptArray = @("OU=Department1,OU=Company,OU=example,DC=example,DC=com",
- "OU=Department2,OU=Company,DC=example,DC=com",
- "OU=Department3,OU=Company,DC=example,DC=com",
- "OU=Department4,OU=Company,DC=example,DC=com",
- "OU=Department5,OU=Company,DC=example,DC=com",
- "OU=Department6,OU=Company,DC=example,DC=com",
- "OU=Department7,OU=Company,DC=example,DC=com",
- "OU=Department8,OU=Company,DC=example,DC=com",
- "OU=Department9,OU=Company,DC=example,DC=com",
- "OU=Department10,OU=Company,DC=example,DC=com",
- "OU=Department11,OU=Company,DC=example,DC=com",
- "OU=Department12,OU=Company,DC=example,DC=com")
- foreach($dept in $deptArray){
- $Users = get-aduser -filter * -searchbase $dept -properties HomeDirectory,SamAccountName,GivenName,Surname | where-object homeDirectory -ne $null
- ForEach ($User in $Users){
- # Check to see if there are too many open threads
- # If there are too many threads then wait here until some close
- While ($(Get-Job -state running).count -ge $MaxThreads){
- Write-Progress -Activity "Getting directory size" -Status "Waiting for threads to close" -CurrentOperation "$i threads created - $($(Get-Job -state running).count) threads open" -PercentComplete ($i / $Users.count * 100)
- Start-Sleep -Milliseconds $SleepTimer
- }
- #"Starting job - $User"
- $i++
- Start-Job -FilePath $ScriptFile -ArgumentList $User | Out-Null
- Write-Progress -Activity "Getting directory size" -Status "Starting Threads" -CurrentOperation "$i threads created - $($(Get-Job -state running).count) threads open" -PercentComplete ($i / $Users.count * 100)
- }
- $Complete = Get-date
- While ($(Get-Job -State Running).count -gt 0){
- $UsersStillRunning = ""
- ForEach ($System in $(Get-Job -state running)){$UsersStillRunning += ", $($System.name)"}
- $UsersStillRunning = $UsersStillRunning.Substring(2)
- Write-Progress -Activity "Getting directory size" -Status "$($(Get-Job -State Running).count) threads remaining" -CurrentOperation "$UsersStillRunning" -PercentComplete ($(Get-Job -State Completed).count / $(Get-Job).count * 100)
- If ($(New-TimeSpan $Complete $(Get-Date)).totalseconds -ge $MaxWaitAtEnd){"Killing all jobs still running . . .";Get-Job -State Running | Remove-Job -Force}
- Start-Sleep -Milliseconds $SleepTimer
- }
- "Reading all jobs"
- $Jobs = Get-Job
- ForEach($Job in $Jobs){
- $data = Receive-Job $Job -Keep
- $obj = New-Object System.Object
- $obj | add-member -type NoteProperty -name User -value $Data.name
- $obj | add-member -type NoteProperty -name HomeDirectory -value $Data.homeDir
- $obj | add-member -type NoteProperty -name HomeDirectorySize -value $Data.homeDirSize
- $HomeD += $obj
- $sum = $sum+$data.HomeDirSize
- if ($User -eq $Jobs[-1]) {
- $sum = $sum / 1KB
- $obj = New-Object System.Object
- $obj | add-member -type NoteProperty -name User -value "Total"
- $obj | add-member -type NoteProperty -name HomeDirectorySize -value $sum
- $HomeD += $obj
- }
- }
- $csvFileName = $NULL
- $dept = $dept.trimend(',OU=Company,DC=example,DC=com')
- $dept = $dept.trimstart('OU=')
- $csvFileName = $dept+"_"+$date
- $HomeD | export-csv c:\temp\$csvFileName.csv -notypeinformation -encoding unicode
- }
Advertisement
Add Comment
Please, Sign In to add comment