I downloaded the Get-DirStats.ps1 script from technet and it is working great except for one small aspect. The output is truncated and makes it useless for me. Here is an example of the output I am getting.
Path Files Size
C:\users 1 174
C:\users\All Users 1340 428744744
C:\users\Default 61 2681636
C:\users\Defaul… 0 0
C:\users\defaul… 0 0
C:\users\Public 12 6659
C:\users\User 12426 …909267
I have looked through the code for about an hour but being a novice I am not seeing where it is limiting those tables. I don’t care how long they are, I want the full output. Here is the code.
Get-DirStats.ps1
Written by Bill Stewart (bstewart@iname.com)
Outputs file system directory statistics.
#requires -version 2
[CmdletBinding(DefaultParameterSetName=“Path”)]
param(
[parameter(Position=0,Mandatory=$false,ParameterSetName=“Path”,ValueFromPipeline=$true)]
$Path=(get-location).Path,
[parameter(Position=0,Mandatory=$true,ParameterSetName=“LiteralPath”)]
[String] $LiteralPath,
[Switch] $Only,
[Switch] $Every,
[Switch] $FormatNumbers,
[Switch] $Total
)
begin {
$ParamSetName = $PSCmdlet.ParameterSetName
if ( $ParamSetName -eq “Path” ) {
$PipelineInput = ( -not $PSBoundParameters.ContainsKey(“Path”) ) -and ( -not $Path )
}
elseif ( $ParamSetName -eq “LiteralPath” ) {
$PipelineInput = $false
}
Script-level variables used with -Total.
[UInt64] $script:totalcount = 0
[UInt64] $script:totalbytes = 0
Returns a [System.IO.DirectoryInfo] object if it exists.
function Get-Directory {
param( $item )
if ( $ParamSetName -eq “Path” ) {
if ( Test-Path -Path $item -PathType Container ) {
$item = Get-Item -Path $item -Force
}
}
elseif ( $ParamSetName -eq “LiteralPath” ) {
if ( Test-Path -LiteralPath $item -PathType Container ) {
$item = Get-Item -LiteralPath $item -Force
}
}
if ( $item -and ($item -is [System.IO.DirectoryInfo]) ) {
return $item
}
}
Filter that outputs the custom object with formatted numbers.
function Format-Output {
process {
$_ | Select-Object Path,
@{Name=“Files”; Expression={“{0:N0}” -f $_.Files}},
@{Name=“Size”; Expression={“{0:N0}” -f $_.Size}}
}
}
Outputs directory statistics for the specified directory. With -recurse,
the function includes files in all subdirectories of the specified
directory. With -format, numbers in the output objects are formatted with
the Format-Output filter.
function Get-DirectoryStats {
param( $directory, $recurse, $format )
Write-Progress -Activity “Get-DirStats.ps1” -Status “Reading ‘$($directory.FullName)’”
$files = $directory | Get-ChildItem -Force -Recurse:$recurse | Where-Object { -not $_.PSIsContainer }
if ( $files ) {
Write-Progress -Activity “Get-DirStats.ps1” -Status “Calculating ‘$($directory.FullName)’”
$output = $files | Measure-Object -Sum -Property Length | Select-Object `
@{Name=“Path”; Expression={$directory.FullName}},
@{Name=“Files”; Expression={$.Count; $script:totalcount += $.Count}},
@{Name=“Size”; Expression={$.Sum; $script:totalbytes += $.Sum}}
}
else {
$output = “” | Select-Object `
@{Name=“Path”; Expression={$directory.FullName}},
@{Name=“Files”; Expression={0}},
@{Name=“Size”; Expression={0}}
}
if ( -not $format ) { $output } else { $output | Format-Output }
}
}
process {
Get the item to process, no matter whether the input comes from the
pipeline or not.
if ( $PipelineInput ) {
$item = $_
}
else {
if ( $ParamSetName -eq “Path” ) {
$item = $Path
}
elseif ( $ParamSetName -eq “LiteralPath” ) {
$item = $LiteralPath
}
}
Write an error if the item is not a directory in the file system.
$directory = Get-Directory -item $item
if ( -not $directory ) {
Write-Error -Message “Path ‘$item’ is not a directory in the file system.” -Category InvalidType
return
}
Get the statistics for the first-level directory.
Get-DirectoryStats -directory $directory -recurse:$false -format:$FormatNumbers
-Only means no further processing past the first-level directory.
if ( $Only ) { return }
Get the subdirectories of the first-level directory and get the statistics
for each of them.
$directory | Get-ChildItem -Force -Recurse:$Every |
Where-Object { $_.PSIsContainer } | ForEach-Object {
Get-DirectoryStats -directory $_ -recurse:(-not $Every) -format:$FormatNumbers
}
}
end {
If -Total specified, output summary object.
if ( $Total ) {
$output = “” | Select-Object `
@{Name=“Path”; Expression={“”}},
@{Name=“Files”; Expression={$script:totalcount}},
@{Name=“Size”; Expression={$script:totalbytes}}
if ( -not $FormatNumbers ) { $output } else { $output | Format-Output }
}
}