Private/Integrity.ps1
|
using namespace System using namespace System.IO using namespace System.Security.Cryptography using namespace System.Collections.Immutable #### # Write-DirectoryHashes function Get-IndexableFile { #### Recursive file enumeration with directory-level exclusion. Mirrors the PowerNixx ETL Index pattern: #### **exclusion occurs at the directory traversal decision point, never post-enumeration**. #### Directories whose `Name` is in `Exclude` are not descended into. Files in surviving directories #### are yielded only if their `Name` matches at least one wildcard in `Include`. #### #### **Parameters** #### - `[DirectoryInfo]`: __Directory__ #### - *Root to walk.* #### - `[string[]]`: __Include__ #### - *Wildcard patterns matched against each file's `Name`.* #### - `[string[]]`: __Exclude__ #### - *Directory names refused at traversal time.* #### #### **Returns** #### - `[FileInfo]` *(stream)* #### - *One per matching file, yielded as the walk proceeds.* [CmdletBinding()] [OutputType([System.IO.FileInfo])] param( [Parameter(Mandatory)][System.IO.DirectoryInfo]$Directory, [Parameter(Mandatory)][string[]]$Include, [Parameter(Mandatory)][string[]]$Exclude ) foreach ($subDir in $Directory.EnumerateDirectories()) { if ($subDir.Name -in $Exclude) { continue } Get-IndexableFile -Directory $subDir -Include $Include -Exclude $Exclude } foreach ($file in $Directory.EnumerateFiles()) { foreach ($pattern in $Include) { if ($file.Name -like $pattern) { $file break } } } } |