FileSystemSearch.psm1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
#region Variables # Helper variable for BFS Search $Queue = New-Object System.Collections.ArrayList #endregion #region New-FileSystemSearch Function New-FileSystemSearch { <# .SYNOPSIS Gets all directories under a path .DESCRIPTION The New-FileSystemSearch will get all the directories under a path using Breadth-Search-First or Depth-Search-First algorithms. .PARAMETER Path The path to search under. .PARAMETER Method The method to use. Available options are "BFS" and "DFS". If not specified, DFS will be used. .EXAMPLE New-FileSystemSearch -Path d:\tmp -Method DFS This will list all directories under D:\tmp using DFS #> Param ( [Parameter(Mandatory=$true, Position=0)] [string]$Path, [Parameter(Mandatory=$false, Position=1)] [ValidateSet(“DFS”,”BFS”)] [string]$Method = "DFS" ) # Test if path exists if( -Not (Test-Path $Path)) { Write-Error "Could not find path $Path!" return } # Get the full path $p = (Resolve-Path $Path).Path # Select the method if($Method -eq "BFS") { $Queue.Clear() _BFS $p } if($Method -eq "DFS") { _DFS $p } } #endregion #region Helper Functions # DFS Search function Function _DFS { Param ( [string]$Path ) # Test if path exists if( -Not (Test-Path $Path)) { Write-Error "Could not find path $Path!" return } # Get the full path $p = (Resolve-Path $Path).Path Write-Output $p $directories = Get-ChildItem -Path $p -Directory -Force foreach($d in $directories) { _DFS $d.fullname } } # BFS Search function Function _BFS { Param ( [string]$Path ) # Test if path exists if( -Not (Test-Path $Path)) { Write-Error "Could not find path $Path!" return } # Get the full path $p = (Resolve-Path $Path).Path $Queue.Add($p) | Out-Null while($Queue.Count -gt 0) { $directories = Get-ChildItem -Path $Queue[0] -Directory -Force foreach($d in $directories) { $Queue.Add($d.FullName) | Out-Null } Write-Output $Queue[0] $Queue.RemoveAt(0) } } #endregion #region Exports Export-ModuleMember -Function New-FileSystemSearch #endregion |