Chapters/interlude-changing-your-approach.md/HomeFolderTools.psm1
function Get-FolderSize { [CmdletBinding()] Param( [Parameter(Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [string[]]$Path ) BEGIN {} PROCESS { ForEach ($folder in $path) { Write-Verbose "Checking $folder" if (Test-Path -Path $folder) { Write-Verbose " + Path exists" $params = @{'Path'=$folder 'Recurse'=$true 'File'=$true} $measure = Get-ChildItem @params | Measure-Object -Property Length -Sum [pscustomobject]@{'Path'=$folder 'Files'=$measure.count 'Bytes'=$measure.sum} } else { Write-Verbose " - Path does not exist" [pscustomobject]@{'Path'=$folder 'Files'=0 'Bytes'=0} } #if folder exists } #foreach } #PROCESS END {} } #function function Get-UserHomeFolderInfo { [CmdletBinding()] Param( [Parameter(Mandatory=$True)] [string]$HomeRootPath ) BEGIN {} PROCESS { Write-Verbose "Enumerating $HomeRootPath" $params = @{'Path'=$HomeRootPath 'Directory'=$True} ForEach ($folder in (Get-ChildItem @params)) { Write-Verbose "Checking $($folder.name)" $params = @{'Identity'=$folder.name 'ErrorAction'='SilentlyContinue'} $user = Get-ADUser @params if ($user) { Write-Verbose " + User exists" $result = Get-FolderSize -Path $folder.fullname [pscustomobject]@{'User'=$folder.name 'Path'=$folder.fullname 'Files'=$result.files 'Bytes'=$result.bytes 'Status'='OK'} } else { Write-Verbose " - User does not exist" [pscustomobject]@{'User'=$folder.name 'Path'=$folder.fullname 'Files'=0 'Bytes'=0 'Status'="Orphan"} } #if user exists } #foreach } #PROCESS END {} } |