Cranking through this Get-ChildItem-based script, everything going well, very simple. Output looks good, except one subfolder reports empty and I know it’s not. Figured out it was caused by a recurse parameter. I played around a bit, the issue didn’t happen when the folder name didn’t contain the dreaded square-brackets. I dug deeper and found this post, which makes me sorta give up on me figuring this out by myself.
https://powershell.org/forums/topic/bulk-network-folder-deletion/
How can I re-write this GCI script to handle the case where it finds a folder name with any windows-legal folder name character? (walk-thru below)
$ConvertDir = 'F:\Transients\Complete\__needs convert\' [string[]]$VideoTypes = @( '.mp4', '.mkv', '.m4v', '.avi', '.wmv', '.mpg', '.mpeg' ) [string[]]$ImageTypes = @( '.bmp', '.jpg', '.jpeg', '.png', '.tif', '.tiff', '.gif', '.pdf', '.fpx' ) $Results = $null $Results = New-Object system.Data.DataTable $Results.Columns.Add("Folder") | Out-Null $Results.Columns.Add("Video Count") | Out-Null $Results.Columns.Add("Total Size (GB)") | Out-Null $Results.Columns.Add("Image Count") | Out-Null $Results.Columns.Add("File Count") | Out-Null gci -Path $ConvertDir -Directory | foreach -Process { $Files = gci -LiteralPath $_.FullName -Recurse -File $Images = $Files | Where {$_.Extension -in $ImageTypes} $Videos = $Files | Where {$_.Extension -in $VideoTypes} $Results.rows.add( $_.Name, $Videos.Count, [math]::Round((($Files | measure length -sum | select -expand Sum)/1GB),2), $Images.Count, $Files.Count ) | Out-Null } $prop1 = @{Expression='Video Count'; Descending=$true } $prop2 = @{Expression='Total Size (GB)'; Descending=$true } $Results | sort $prop1, $prop2 |ft -AutoSize
Basically, I’m searching for video files under the given path and my goal is to have an overview so I can determine which subfolder to clean up on any given day I might have time to dedicate to this task.
The first variable would become a parameter one day, but for now this script is single use, so the path is hard coded.
Then I define commonly-used media file extensions for use in a filter.
Then I define my table properties.
The the meat/potatoes: I use a foreach loop with literalpath parameters and pipelines (which I believe is my area of issue) to pull info for all recursive files and store them in variables for use in my display table.
The result with the square brackets in the SPACEBALLS folder name:
` PS D:\ps> D:\PS\audit to convert folder\Get-BiggestPendingConvertGroup.ps1 Folder Video Count Total Size (GB) Image Count File Count ------ ----------- --------------- ----------- ---------- _no audio or video 3 4.16 1 4 _studder 1 5.71 1 2 _subtitles 1 0.68 0 2 _sideways 1 0.03 0 1 _will not play 0 0 0 0 _funky ff-rw 0 0 0 0 Spaceballs (1987) [1080p] 0 0 0 0
The result with the square brackets removed from the SPACEBALLS folder name:
PS F:\> D:\PS\audit to convert folder\Get-BiggestPendingConvertGroup.ps1 Folder Video Count Total Size (GB) Image Count File Count ------ ----------- --------------- ----------- ---------- _no audio or video 3 4.16 1 4 _studder 1 5.71 1 2 Spaceballs (1987) 1080p 1 1.5 1 3 _subtitles 1 0.68 0 2 _sideways 1 0.03 0 1 _will not play 0 0 0 0 _funky ff-rw 0 0 0 0
Also fun fact, this is the only post on this entire site with the word SPACEBALLS.