1 • download alternative [System.IO] class from :
https://www.codeproject.com/Articles/1383832/System-IO-Directory-Alternative-using-WinAPI
2 • extract "System.IO.DirectoryAlternative.dll" file to script path directory
3 • usage :
$assembly = $(gci -Path "$PWD\System.IO.DirectoryAlternative.dll").FullName
# assembly - load
[void][System.Reflection.Assembly]::LoadFile($assembly)
# directories list
$target_path = "c:\windows"
$directories = [System.IO.DirectoryAlternative]::EnumerateDirectories($target_path ,"*",[System.IO.SearchOption]::AllDirectories)
# files list
$files = [System.IO.DirectoryAlternative]::EnumerateFiles("$target_path","*.log",[System.IO.SearchOption]::AllDirectories)
# get more properties
$files_ps = @{ Property = @( "BaseName","Name","FullName","Length" ) }
$filesnfo = $files | %{ [System.IO.FileInfo]$_ | select @files_ps }