Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # .\file_name.ps1 -excludeZone 1 15 'c'
- # 0 for false, 1 for True - Alot of downloaded files have it.
- # using '' to pass the drive letter alone
- param (
- [bool]$excludeZone = $false,
- [int]$fbfeq = [int]$args[1],
- [string]$base = [string]$args[2]
- )
- # Specify the drive or directory to search
- $drive = $base+":\\"
- $outputFile = "D:\\ADS_Report.txt"
- $errorFile = "D:\\ADS_Errors.txt"
- $counter = 0
- # Initialize a queue with the base directory
- # Manually force to work from the starting point & work backwards, not building the directory list first, saving time.
- $queue = New-Object System.Collections.Queue
- $queue.Enqueue($drive)
- while ($queue.Count -gt 0) {
- # Dequeue current directory
- $directory = $queue.Dequeue()
- try {
- $items = Get-ChildItem -Path $directory -File -ErrorAction Stop
- foreach ($item in $items) {
- $counter++
- if ($counter % $fbfeq -eq 0) { Write-Output ("Processed {0} files..." -f $counter) }
- # Check if the item has an alternative data stream
- $streams = Get-Item -Path $item.FullName -Stream * -ErrorAction Stop
- # Excludes expected & default streams
- $streamsWithoutZoneIdentifier = $streams | Where-Object { $_.Stream -ne ':' -and $_.Stream -ne ':$DATA' }
- # Excludes Zone.Idenifier, if argument was true.
- if ($excludeZone) { $streamsWithoutZoneIdentifier = $streamsWithoutZoneIdentifier | Where-Object { $_.Stream -ne 'Zone.Identifier' } }
- # 0 is used, as the stream count has the ones excluded from the count already removed from this one.
- if ($streamsWithoutZoneIdentifier.Count -gt 0) {
- # Outputs All streams for the file, using the non filtered stream
- $streams | ForEach-Object { Add-Content -Path $outputFile -Value ("{0} - {1}" -f $item.FullName, $_.Stream) }
- }
- }
- # Get all subdirectories in the current directory (non-recursively)
- $subdirectories = Get-ChildItem -Path $directory -Directory -ErrorAction Stop
- # Enqueue the subdirectories
- foreach ($subdirectory in $subdirectories) { $queue.Enqueue($subdirectory.FullName) }
- }
- catch {
- # Write the error to the error file
- Add-Content -Path $errorFile -Value ("Error processing '{0}': {1}" -f $directory, $_.Exception.Message)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement