functions/Get-ChildDirs.ps1
function Get-ChildDirs { <# .SYNOPSIS Private function. Used by Find-GitRepo. .DESCRIPTION Gets child directories of a path. Allows recursion and control of recursion into junction points. .PARAMETER Path The parent path to inspect. .PARAMETER Recurse Controls recursion into child directories. .PARAMETER RecurseJunctions Controls recursion into junction points. .INPUTS [System.IO.DirectoryInfo] Accepts directory objects. .OUTPUTS [System.IO.DirectoryInfo] Returns directory objects. .NOTES Author : nmbell .LINK about_powdrgit .LINK https://github.com/nmbell/powdrgit/blob/main/help/about_powdrgit.md #> # Use cmdlet binding [CmdletBinding()] # Declare output type [OutputType([System.IO.DirectoryInfo])] # Declare parameters Param ( [Parameter( Mandatory = $false , Position = 0 , ValueFromPipeline = $true , ValueFromPipelineByPropertyName = $true )] [Alias('FullName')] [String[]] $Path = $PWD.Path , [Parameter( Mandatory = $false , Position = 1 , ValueFromPipeline = $false , ValueFromPipelineByPropertyName = $true )] [String] $Filter , [Switch] $Recurse , [Switch] $RecurseJunction ) BEGIN { # Common BEGIN: Set-StrictMode -Version 3.0 $start = Get-Date $thisFunctionName = $MyInvocation.MyCommand Write-Debug "[$thisFunctionName]Started: $($start.ToString('yyyy-MM-dd HH:mm:ss.fff'))" # Function BEGIN: } PROCESS { ForEach ($dir in Get-ChildItem -LiteralPath $Path -Directory -ErrorAction Ignore) { # Return the current item If (!$Filter -or ($Filter -and $dir.Name -like $Filter)) { $dir } # Recurse if necessary $recursable = $false $recursable = $recursable -or (($Recurse -or $RecurseJunction) -and !($dir.Attributes.HasFlag([System.IO.FileAttributes]::ReparsePoint))) $recursable = $recursable -or ($RecurseJunction -and $dir.Attributes.HasFlag([System.IO.FileAttributes]::ReparsePoint)) If ($recursable) { Get-ChildDirs -Path $dir.FullName -Filter $Filter -Recurse:$Recurse -RecurseJunction:$RecurseJunction } } } END { # Function END: # Common END: $end = Get-Date $duration = New-TimeSpan -Start $start -End $end Write-Debug "[$thisFunctionName]Stopped: $($end.ToString('yyyy-MM-dd HH:mm:ss.fff')) ($($duration.ToString('d\d\ hh\:mm\:ss\.fff')))" } } |