The directory has 20k folders in it. In these folders there are subfolders and some files. I don't need to look into the subfolders. I need to get all the files with .EIA extension from the folders.
I know I could use Get-Item, Get-ChildItem for this but these cmdlet are too slow in the getting the data. Also, this script has to run every hour therefore, it cannot be taking superlong.
I was trying to use [System.IO.File]::GetFiles($path) but this gives an error
Method invocation failed because [System.IO.File] does not contain a method named 'GetFile'
I have also tried
$pathEia = "\\Sidney2\MfgLib\AidLibTest\*\*.EIA"
[System.IO.File]::GetFiles($pathEia)
This also throws an error:
Exception calling "GetFiles" with "1" argument(s): "The filename, directory name, or volume label
| syntax is incorrect. : '\\Sidney2\MfgLib\AidLibTest\*\*.EIA'"
I am using PowerShell Core 7.2 .Net Framework 4.8 Any help is appreciated. Thanks in advance.
Very similar to mklement0's helpful answer but using the instance methods from
DirectoryInfo.EnumerationOptionsis available starting from .NET Core 2.1. This class has the propertyIgnoreInaccessibleset to$trueby default, in prior versions an exception would cause the enumeration to Stop:This answer requires PowerShell Core 7+.
If you need to do a recursive search on the subfolders (if
RecurseSubdirectories = $true), you can consider using multi-threading withForEach-Object -Parallel.It's important to note that, using a parallel loop may or may not have an edge over an efficient linear loop (such as
foreach), as mklement0 notes in his comment: