This is intended to be used as the supplemental script (2_CompareFolderResults.ps1) to be used in conjunction with the 1_Clean-NoIntroRoms.ps1 and 3_CheckXML.ps1 scripts. This script allows you to compare the files/roms in 2 directories to show the differences in files of each folder by using the compare-object cmdlet. It is intended to compare the different results in 1_Clean-NoIntroRoms.ps1 when you change the filters for a system.
2_CompareFolderResults.ps1
See supplemental scripts:
- 1_Clean-NoIntroRoms.ps1 – Clean No-Intro 2018 ROMs by eliminating duplicates and keeping 1 x ROM per Game by using filters for preference
- 3_CheckXML.ps1 – Find missing scraped data in RetroPie by examining the gamelist.xml file for each game system on you RetroPie
Global Variable Definitions:
- All documentation is now centrally contained in the readme.txt included in the download. Please refer to that document for definitions on the variables as well as their default values.
#2_CompareFolderResults.ps1 $global:scriptName = $PSCommandPath $global:scriptVersion = "v6.0" $global:romCleanDirectory1 = "C:\Games\RetroPie\roms\" $global:romCleanDirectory2 = "C:\Games\RetroPie\roms2\" $global:runNoIntroRoms = $true $global:runCustomRoms = $false $global:logFile = (Split-Path -Path $PSCommandPath -Parent) + "\logs\" + (Split-Path -Path $PSCommandPath.Replace(".ps1",".log") -Leaf) $global:logOverwrite = $true $global:romNoIntroHashTable = [ordered]@{ #RetroPieDirName = No-IntroDirName "atari2600" = "Atari - 2600" "atari5200" = "Atari - 5200" "atari7800" = "Atari - 7800 [Headered]" "atarilynx" = "Atari - Lynx [Headered]" "atarijaguar" = "Atari - Jaguar" "atarist" = "Atari - ST" "coleco" = "Coleco - ColecoVision" "fds" = "Nintendo - Family Computer Disk System [headered]" "gamegear" = "Sega - Game Gear" "gb" = "Nintendo - Game Boy" "gba" = "Nintendo - Game Boy Advance" "gbc" = "Nintendo - Game Boy Color" "mastersystem" = "Sega - Master System - Mark III" "megadrive" = "Sega - Mega Drive - Genesis" "msx" = "Microsoft - MSX" "n64" = "Nintendo - Nintendo 64" "nes" = "Nintendo - Nintendo Entertainment System [headered]" "ngp" = "SNK - Neo Geo Pocket" "ngpc" = "SNK - Neo Geo Pocket Color" "pcengine" = "NEC - PC Engine - TurboGrafx 16" "sega32x" = "Sega - 32X" "sg-1000" = "Sega - SG-1000" "snes" = "Nintendo - Super Nintendo Entertainment System" "vectrex" = "GCE - Vectrex" "virtualboy" = "Nintendo - Virtual Boy" "wonderswan" = "Bandai - WonderSwan" "wonderswancolor" = "Bandai - WonderSwan Color" } $global:romCustomHashTable = [ordered]@{ #RetroPieDirName = CustomDirName "amstradcpc" = "Amstrad - CPC" "apple2" = "Apple_2_TOSEC_2012_04_23" "atari800" = "Atari_8_bit_TOSEC_2012_04_23" "c64" = "c64" "coco" = "coco" "dragon32" = "Dragon_Data_Dragon_TOSEC_2012_04_23" "intellivision" = "Mattel_Intellivision _TOSEC-v2014-01-18_CM" "neogeo" = "neo-geo-mvs-romset" "trs-80" = "Tandy Radio Shack TRS-80 Color Computer - Games" "zmachine" = "Infocom_Z-Machine_TOSEC_2012_04_23" "zxspectrum" = "zx-spectrum-tosec-set-v-2020-02-18-lady-eklipse" } #Output Color Variables $global:colorMain = "Green" $global:colorSub1 = "Green" $global:colorSub2 = "DarkGreen" $global:colorSub3 = "DarkRed" $global:colorOk = "Green" $global:colorWarn = "Yellow" $global:colorError = "Red" Function Main() { #Powershell 4 or greater is required If (!($PSVersionTable.PSVersion.Major -ge 4) -OR ($PSVersionTable.PSVersion -eq $null)) { Write-Host -ForegroundColor $global:colorError "Powershell v4 or greater is required, quitting script!" Exit } #Create Log File If ($global:logOverwrite -eq $true) { Write-Out -NoNewLine -LogFile $global:logFile -Overwrite } Else { Write-Out -NoNewLine -LogFile $global:logFile } $StartScript = (Get-Date) Write-Out -ForegroundColor $global:colorMain -Text "****************************************************************" -LogFile $global:logFile Write-Out -ForegroundColor $global:colorMain -Text "INITIALIZE" -LogFile $global:logFile Write-Out -ForegroundColor $global:colorMain -Text "****************************************************************" -LogFile $global:logFile Write-Out -ForegroundColor $global:colorMain -Text "* Script Name : $global:scriptName" -LogFile $global:logFile Write-Out -ForegroundColor $global:colorMain -Text "* Version: : $global:scriptVersion" -LogFile $global:logFile Write-Out -ForegroundColor $global:colorMain -Text "* ROM Dir1 : $($global:romCleanDirectory1)" -LogFile $global:logFile Write-Out -ForegroundColor $global:colorMain -Text "* ROM Dir2 : $($global:romCleanDirectory2)" -LogFile $global:logFile Write-Out -ForegroundColor $global:colorMain -Text "* Compare No-Intro ROMs : $($global:runNoIntroRoms)" -LogFile $global:logFile Write-Out -ForegroundColor $global:colorMain -Text "* Compare Custom ROMs : $($global:runCustomRoms)" -LogFile $global:logFile Write-Out -ForegroundColor $global:colorMain -Text "* Log File : $($global:logFile)" -LogFile $global:logFile Write-Out -ForegroundColor $global:colorMain -Text "* Log Overwrite : $($global:logOverwrite)" -LogFile $global:logFile Write-Out -ForegroundColor $global:colorMain -Text "* Start Time : $($StartScript)" -LogFile $global:logFile Write-Out -ForegroundColor $global:colorMain -Text "****************************************************************" -LogFile $global:logFile Write-Out -ForegroundColor $global:colorSub2 -Text "Validating Global Variables" -LogFile $global:logFile Write-Out -ForegroundColor $global:colorSub2 -Text "================================================================" -LogFile $global:logFile If (!(Validate-Container -Name '$global:romCleanDirectory1' -Path ([ref]$global:romCleanDirectory1) -Log $global:logFile -EndsWithBackslash)) { Write-Out -ForegroundColor $global:colorError -Text "EXIT SCRIPT!!!" -LogFile $global:logFile; EXIT } If (!(Validate-Container -Name '$global:romCleanDirectory2' -Path ([ref]$global:romCleanDirectory2) -Log $global:logFile -EndsWithBackslash)) { Write-Out -ForegroundColor $global:colorError -Text "EXIT SCRIPT!!!" -LogFile $global:logFile; EXIT } $StartNoIntro = (Get-Date) $DiffNoIntro = 0 Write-Out -PreLine 1 -ForegroundColor $global:colorMain -Text "****************************************************************" -LogFile $global:logFile Write-Out -ForegroundColor $global:colorMain -Text "PROCESS: NO-INTRO ROMS" -LogFile $global:logFile Write-Out -ForegroundColor $global:colorMain -Text "****************************************************************" -LogFile $global:logFile $ArgumentHash = @{ Path1 = $global:romCleanDirectory1 Path2 = $global:romCleanDirectory2 HashTable = $global:romNoIntroHashTable Log = $global:logFile } If ($global:runNoIntroRoms) { If ($global:romNoIntroHashTable.Count -eq 0) { Write-Out -ForegroundColor $global:colorWarn -Text "Warning: Nothing is in romNoIntroHashTable (All sytems are probably commented out in global hashtable)" -LogFile $global:logFile } Else { $DiffNoIntro = Compare-RomFolders @ArgumentHash } } Else { Write-Out -ForegroundColor $global:colorWarn -Text "Skip - Global Variable runNoIntroRoms set to False" -LogFile $global:logFile } $EndNoIntro = (Get-Date) $StartCustom = (Get-Date) $DiffCustom = 0 Write-Out -PreLine 3 -ForegroundColor $global:colorMain -Text "****************************************************************" -LogFile $global:logFile Write-Out -ForegroundColor $global:colorMain -Text "PROCESS: CUSTOM ROMS" -LogFile $global:logFile Write-Out -ForegroundColor $global:colorMain -Text "****************************************************************" -LogFile $global:logFile $ArgumentHash = @{ Path1 = $global:romCleanDirectory1 Path2 = $global:romCleanDirectory2 HashTable = $global:romCustomHashTable Log = $global:logFile } If ($global:runCustomRoms) { If ($global:romCustomHashTable.Count -eq 0) { Write-Out -ForegroundColor $global:colorWarn -Text "Warning: Nothing is in romCustomHashTable (All sytems are probably commented out in global hashtable)" -LogFile $global:logFile } Else { $DiffCustom = Compare-RomFolders @ArgumentHash } } Else { Write-Out -ForegroundColor $global:colorWarn -Text "Skip - Global Variable runCustomRoms set to False" -LogFile $global:logFile } $EndCustom = (Get-Date) #Results $EndScript = (Get-Date) Write-Out -PreLine 3 -ForegroundColor $global:colorMain -Text "****************************************************************" -LogFile $global:logFile Write-Out -ForegroundColor $global:colorMain -Text "END RESULTS" -LogFile $global:logFile Write-Out -ForegroundColor $global:colorMain -Text "****************************************************************" -LogFile $global:logFile Write-Out -ForegroundColor $global:colorMain -Text "* No-Intro Differences Found : $($DiffNoIntro)" -LogFile $global:logFile Write-Out -ForegroundColor $global:colorMain -Text "* No-Intro Elapsed Time : $([math]::Round(($EndNoIntro-$StartNoIntro).totalseconds, 2)) seconds" -LogFile $global:logFile Write-Out -ForegroundColor $global:colorMain -Text "* Custom Differences Found : $($DiffCustom)" -LogFile $global:logFile Write-Out -ForegroundColor $global:colorMain -Text "* Custom Elapsed Time : $([math]::Round(($EndCustom-$StartCustom).totalseconds, 2)) seconds" -LogFile $global:logFile Write-Out -ForegroundColor $global:colorMain -Text "* Script Start Time : $($StartScript)" -LogFile $global:logFile Write-Out -ForegroundColor $global:colorMain -Text "* Script End Time : $($EndScript)" -LogFile $global:logFile Write-Out -ForegroundColor $global:colorMain -Text "* Script Elapsed Time : $([math]::Round(($EndScript-$StartScript).totalseconds, 2)) seconds" -LogFile $global:logFile Write-Out -ForegroundColor $global:colorMain -Text "****************************************************************" -LogFile $global:logFile } Function Compare-RomFolders { Param ( [Parameter(Mandatory=$true)] [string]$Path1, [Parameter(Mandatory=$true)] [string]$Path2, [Parameter(Mandatory=$true)] [Alias("HashTable")] [System.Collections.Specialized.OrderedDictionary]$RomHashTable, [Parameter(Mandatory=$true)] [Alias("Log")] [string[]]$LogFiles ) $diffCount = 0 ForEach ($key in $RomHashTable.keys) { Write-Out -PreLine 1 -Text "PROCCESSING ($($key)): $($Path1 | Split-Path -Leaf) :: $($Path2 | Split-Path -Leaf)" -ForegroundColor $global:colorSub1 -LogFile $LogFiles Write-Out -Text "================================================================" -ForegroundColor $global:colorSub1 -LogFile $LogFiles If ((Test-Path -LiteralPath "$($Path1)$($key)" -PathType Container) -AND (Test-Path -LiteralPath "$($Path2)$($key)" -PathType Container)) { $fso = Get-ChildItem -Recurse -File -Path "$($Path1)$($key)" $fso1 = Get-ChildItem -Recurse -File -Path "$($Path2)$($key)" If ($fso.Count -gt 0 -AND $fso1.Count -gt 0) { $results = Compare-Object -ReferenceObject $fso -DifferenceObject $fso1 $diffFound = $false ForEach ($r in $results) { If ($r.SideIndicator -eq "<=") { $diffFound = $true $diffCount++ Write-Out -Text "$($r.SideIndicator) $($r.InputObject)" -ForegroundColor $global:colorSub2 -LogFile $LogFiles } ElseIf ($r.SideIndicator -eq "=>") { $diffFound = $true $diffCount++ Write-Out -Text "$($r.SideIndicator) $($r.InputObject)" -ForegroundColor $global:colorSub3 -LogFile $LogFiles } Else { #Not Different } } If ($diffFound -eq $false) { Write-Out -Text "No Differences Found" -ForegroundColor $global:colorSub2 -LogFile $LogFiles } } Else { Write-Out -Text "ROM Folder(s) Do Not Have ROMs" -ForegroundColor $global:colorError -LogFile $LogFiles } } Else { Write-Out -Text "ROM Folder(s) Do Not Exist" -ForegroundColor $global:colorError -LogFile $LogFiles } } Return $diffCount } Function Validate-Container { Param ( [Parameter(Mandatory=$true)] [string]$Name, [Parameter(Mandatory=$true)] [ref]$Path, [Parameter(Mandatory=$false)] [switch]$IsValid, [Parameter(Mandatory=$false)] [switch]$EndsWithBackslash, [Parameter(Mandatory=$true)] [Alias("Log")] [string[]]$LogFiles ) Write-Out -ForegroundColor $global:colorSub2 -Text "$($Name) " -NoNewLine -LogFile $LogFiles If (([URI]$Path.Value).IsUnc) { #Path is UNC If ($IsValid) { #Confirm It is Valid (Must have folder in path not just server name) If (Test-Path -LiteralPath $Path.Value -IsValid) { Write-Out -ForegroundColor $global:colorSub2 -Text "Path (UNC) Valid: '$($Path.Value)'" -LogFile $LogFiles } Else { Write-Out -ForegroundColor $global:colorError -Text "Path (UNC) NOT Valid: '$($Path.Value)'" -LogFile $LogFiles Return $false } } Else { #Confirm It Exists (Must have folder in path not just server name) If (Test-Path -LiteralPath $Path.Value) { Write-Out -ForegroundColor $global:colorSub2 -Text "Path (UNC) Exist: '$($Path.Value)'" -LogFile $LogFiles } Else { Write-Out -ForegroundColor $global:colorError -Text "Path (UNC) NOT Exist: '$($Path.Value)'" -LogFile $LogFiles Return $false } } } Else { #Path is Local If ($IsValid) { #Confirm It is Valid If (Test-Path -LiteralPath $Path.Value -IsValid) { Write-Out -ForegroundColor $global:colorSub2 -Text "Path (Local) Valid: '$($Path.Value)'" -LogFile $LogFiles } Else { Write-Out -ForegroundColor $global:colorError -Text "Path (Local) NOT Valid: '$($Path.Value)'" -LogFile $LogFiles Return $false } } Else { #Confirm It is a Container If (Test-Path -LiteralPath $Path.Value -PathType Container) { Write-Out -ForegroundColor $global:colorSub2 -Text "Path (Local) Exist: '$($Path.Value)'" -LogFile $LogFiles } Else { Write-Out -ForegroundColor $global:colorError -Text "Path (Local) NOT Exist: '$($Path.Value)'" -LogFile $LogFiles Return $false } } } If ($EndsWithBackslash) { If (!$Path.Value.EndsWith('\')) { $Path.Value = $Path.Value + "\" Write-Out -ForegroundColor $global:colorWarn -Text "Path Not End with '\', append it: $($Path.Value)" -LogFile $LogFiles } } Return $true } Function Write-Out { <# .SYNOPSIS Write output to console and/or log file. Supports multiple foreground and background colors on a single line and advanced options to insert lines, spaces, or tabs before or after the text as well as timestamps. .DESCRIPTION Uses Write-Host to output color text to the console, and supports using multiple foreground and background colors on a single line. Uses Set-Content and Add-Content to output to a file. It works by accepting strings as an array and then you can assign the foreground or background colors by passing them as arrays for the matching text. It also accepts Default which allows you skip specifying a color and use the default. This function requires Powershell 4.0 to support the alias attribute in the function. .PARAMETER Text Optional. Array of strings to write to console/log. If you do not need to use multiple colors on a single line you can pass a single string instead of an array of strings. Otherwise, if you need to multiple colors on a single line pass an array of strings and associated colors using -ForegroundColor, -BackgroundColor, -ForegroundColorDefault, or -BackgroundColorDefault. .PARAMETER ForegroundColor Optional. Array of foreground Colors to write to console. Default means the ForegroundColorDefault value is used. Valid Colors: Default, Black, DarkBlue, DarkGreen, DarkCyan, DarkRed, DarkMagenta, DarkYellow, Gray, DarkGray, Blue, Green, Cyan, Red, Magenta, Yellow, White .PARAMETER ForegroundColorDefault Optional. Default foreground color to write to console. Default is set to white. Valid Colors: Black, DarkBlue, DarkGreen, DarkCyan, DarkRed, DarkMagenta, DarkYellow, Gray, DarkGray, Blue, Green, Cyan, Red, Magenta, Yellow, White .PARAMETER BackgroundColor Optional. Array of background colors to write to console. Default means the BackgroundColorDefault value is used. Valid Colors: Default, Black, DarkBlue, DarkGreen, DarkCyan, DarkRed, DarkMagenta, DarkYellow, Gray, DarkGray, Blue, Green, Cyan, Red, Magenta, Yellow, White .PARAMETER BackgroundColorDefault Optional. Default background color to write to console. Default is none. Valid Colors: Default, Black, DarkBlue, DarkGreen, DarkCyan, DarkRed, DarkMagenta, DarkYellow, Gray, DarkGray, Blue, Green, Cyan, Red, Magenta, Yellow, White .PARAMETER PreLine Optional. Add blank lines before your text. Default is 0. .PARAMETER PreSpace Optional. Add spaces before your text. Default is 0. .PARAMETER PreTab Optional. Add Tabs before your text. Default is 0. .PARAMETER TimeStampFormat Optional. Format used for time stamps. Default is 'yyyy-MM-dd HH:mm:ss' .PARAMETER TimeStamp Optional. Adds time stamp in square brackets before your text. .PARAMETER ClearHost Optional. Clear the console before your text. .PARAMETER PostLine Optional. Add blank lines after your text. Default is 0. .PARAMETER PostSpace Optional. Add spaces after your text. Default is 0. .PARAMETER PostTab Optional. Add tabs after your text. Default is 0. .PARAMETER NoNewLine Optional. Do not add a new line after your text and optional post text options. Default is to add a new line. .PARAMETER LogFile Optional. Array of Absolute or relative path of the log file(s). You can still provide a single log file or multiple separate by commas. .PARAMETER LogOnly Optional. Write to LogFile only, do Not output to console. .PARAMETER Overwrite Optional. Ovewrite the log file. Default is to append to the log file. .INPUTS Parameters above .OUTPUTS None .NOTES Author: Brian Steinmeyer URL: https://sigkillit.com/ Created: 5/23/2023 Version 1.5 - Removed Unnecessary loop in 1.4 for log files since Test-Path, New-Item, Set-Content, and Add-Content all support -Path as string array Version 1.4 - Changed LogFile from a String to String Array so you can log the same line to multiple files or provide a single value so it' backwards compatible. Version 1.3 - Added LogOnly Option for only writing text to a log file Version 1.2 - Set Text, ForegroundColor, and BackgroundColor to default value of @() to fix errors checking counts in some circumstances - Fixed an issue where ForegroundColorDefault and BackgroundColorDefault were not working properly in some circumstances - Added Requires -Version 4.0 Version 1.1 - Completely rewrote the "Main Text" section - Added "Default" as a color option, which allows you to use the default values for foreground/background - Useful when you want to specify a backgroundcolor in certain parts of a line like the middle - Ex: Write-Out -Text "How to ","highlight ","the middle text" -BackgroundColor Default,Yellow,Default Version: 1.0 - Initial Creation inspired by PSWriteColor (https://github.com/EvotecIT/PSWriteColor) - Improved upon by switching Foreground and Background Colors to default values if colors are not specifid for all strings. Will also ignore extra colors if more colors are specified than strings specified. .EXAMPLE Write-Out -Text "Start with Red Text ","Then Switch to Blue Text ","Now Magenta" -ForegroundColor Red,Blue,Magenta .EXAMPLE Write-Out -Text "White on Black ","Black on White ","Dark Cyan on Cyan ","Yellow on Green ","Default Color" -ForegroundColor White,Black,DarkCyan,Yellow -BackgroundColor Black,White,Cyan,Green .EXAMPLE Write-Out -Text "Make this"," entire line"," the same color by setting defaults" -ForegroundColorDefault Yellow -BackgroundColorDefault Magenta .EXAMPLE Write-Out -Text "Add a blank line and two tabs ","before ","my text" -ForegroundColor Green,Cyan,White -PreLine 1 -PreTab 2 .EXAMPLE Write-Out -Text "Add two blank ","lines ","after my text" -ForegroundColor White,Green,White -PostLine 2 .EXAMPLE Write-Out -Text "Add 3 spaces before my text" -ForegroundColor Gray -Prespace 3 .EXAMPLE Write-Out -Text "White text and a tab after" -ForegroundColor White -NoNewLine -PostTab 1 Write-Out -Text "Black text on Yellow ","and then back to white" -ForegroundColor Black,White -BackgroundColor Yellow .EXAMPLE Write-Out -Text "An easy way to ","highlight ","text in the middle" -BackgroundColor Default,Yellow .EXAMPLE Write-Out -Text "You can even add a ","time stamp ","before your output" -ForegroundColor White,Green,White -TimeStamp -PreLine 3 .EXAMPLE Write-Out -Text "You can change the ","time stamp format" -ForegroundColor White,Yellow -TimeStamp -TimeStampFormat "dd-MM-yyy HH:mm" -PreLine 1 -PostLine 1 .EXAMPLE Write-Out -Text "An"," Error"," occurred let's write overwrite/create a new log file" -ForegroundColor White,Red,White -TimeStamp -LogFile "script.log" -Overwrite .EXAMPLE Write-Out -Text "Now you can ","Append ","this line to your log file" -ForegroundColor Cyan,Magenta -TimeStamp -LogFile "script.log" .EXAMPLE Write-Out -Text "You can write this line to two log files now" -LogFile "script.log","second.txt" #> [CmdletBinding()] Param ( [Parameter(Mandatory=$false)] [AllowEmptyString()] [alias ('T')] [String[]] $Text = @(), [Parameter(Mandatory=$false)] [ValidateSet("Default","Black","DarkBlue","DarkGreen","DarkCyan","DarkRed","DarkMagenta","DarkYellow","Gray","DarkGray","Blue","Green","Cyan","Red","Magenta","Yellow","White")] [alias ('FGC', 'FC')] [string[]] $ForegroundColor = @(), [Parameter(Mandatory=$false)] [ValidateSet("Default","Black","DarkBlue","DarkGreen","DarkCyan","DarkRed","DarkMagenta","DarkYellow","Gray","DarkGray","Blue","Green","Cyan","Red","Magenta","Yellow","White")] [alias ('FGCD', 'FCD')] [string] $ForegroundColorDefault = [ConsoleColor]::White, [Parameter(Mandatory=$false)] [ValidateSet("Default","Black","DarkBlue","DarkGreen","DarkCyan","DarkRed","DarkMagenta","DarkYellow","Gray","DarkGray","Blue","Green","Cyan","Red","Magenta","Yellow","White")] [alias ('BGC', 'BC')] [String[]] $BackgroundColor = @(), [Parameter(Mandatory=$false)] [ValidateSet("Default","Black","DarkBlue","DarkGreen","DarkCyan","DarkRed","DarkMagenta","DarkYellow","Gray","DarkGray","Blue","Green","Cyan","Red","Magenta","Yellow","White")] [alias ('BGCD', 'BCD')] [string] $BackgroundColorDefault = "Default", [Parameter(Mandatory=$false)] [int] $PreLine = 0, [Parameter(Mandatory=$false)] [int] $PreSpace = 0, [Parameter(Mandatory=$false)] [int] $PreTab = 0, [Parameter(Mandatory=$false)] [Alias('TSF', 'TS')] [string] $TimeStampFormat = 'yyyy-MM-dd HH:mm:ss', [Parameter(Mandatory=$false)] [switch] $TimeStamp, [Parameter(Mandatory=$false)] [switch] $ClearHost, [Parameter(Mandatory=$false)] [int] $PostLine = 0, [Parameter(Mandatory=$false)] [int] $PostSpace = 0, [Parameter(Mandatory=$false)] [int] $PostTab = 0, [Parameter(Mandatory=$false)] [switch] $NoNewLine = $false, [Parameter(Mandatory=$false)] [alias ('Log', 'L')] [string[]] $LogFile = @(), [Parameter(Mandatory=$false)] [switch] $LogOnly = $false, [Parameter(Mandatory=$false)] [switch] $Overwrite = $false ) Begin { #Nothing to Do Here } Process { #Optional - Do Not Write to ConsoleColor If (!($LogOnly)) { #Optional - Prefix Text If ($ClearHost) { Clear-Host } If ($PreLine -gt 0) { For ($i = 0; $i -lt $PreLine; $i++) { Write-Host -Object "`n" -NoNewline } } # Add empty line(s) before Main text If ($PreSpace -gt 0) { For ($i = 0; $i -lt $PreSpace; $i++) { Write-Host -Object " " -NoNewline } } # Add Tab(s) before Main text If ($PreTab -gt 0) { For ($i = 0; $i -lt $PreTab; $i++) { Write-Host -Object "`t" -NoNewline } } # Add Space(s) before Main text If ($TimeStamp) { Write-Host -Object "[$([datetime]::Now.ToString($TimeStampFormat))]" -NoNewline } # Add Timestamp before Main Text #MAIN TEXT If (($Text.Count -gt 0) -AND ($ForegroundColor.Count -eq 0) -AND ($BackgroundColor.Count -eq 0)) { #Text Only Specified For ($i = 0; $i -lt $Text.Count; $i++) { If ($BackgroundColorDefault -eq "Default") { Write-Host $Text[$i] -ForegroundColor $ForegroundColorDefault -NoNewline } Else { Write-Host $Text[$i] -ForegroundColor $ForegroundColorDefault -BackgroundColor $BackgroundColorDefault -NoNewline } } } ElseIf (($Text.Count -gt 0) -AND ($ForegroundColor.Count -gt 0) -AND ($BackgroundColor.Count -eq 0)) { #Text and ForegroundColor Specified For ($i = 0; $i -lt $Text.Count; $i++) { If ($ForegroundColor.Count -le $i) { $ForegroundColor += $ForegroundColorDefault } #ForegroundColor Not Specified Set to Default If ($ForegroundColor[$i] -eq "Default") { $ForegroundColor[$i] = $ForegroundColorDefault } If ($BackgroundColorDefault -eq "Default") { Write-Host $Text[$i] -ForegroundColor $ForegroundColor[$i] -NoNewline } Else { Write-Host $Text[$i] -ForegroundColor $ForegroundColor[$i] -BackgroundColor $BackgroundColorDefault -NoNewline } } } ElseIf (($Text.Count -gt 0) -AND ($ForegroundColor.Count -eq 0) -AND ($BackgroundColor.Count -gt 0)) { #Text and BackgroundColor Specified For ($i = 0; $i -lt $Text.Count; $i++) { If ($BackgroundColor.Count -le $i) { $BackgroundColor += $BackgroundColorDefault } #BackgroundColor Not Specified Set to Default If ($BackgroundColor[$i] -eq "Default") { If ($BackgroundColorDefault -eq "Default") { Write-Host $Text[$i] -ForegroundColor $ForegroundColorDefault -NoNewline } Else { Write-Host $Text[$i] -ForegroundColor $ForegroundColorDefault -BackgroundColor $BackgroundColorDefault -NoNewline } } Else { Write-Host $Text[$i] -ForegroundColor $ForegroundColorDefault -BackgroundColor $BackgroundColor[$i] -NoNewline } } } ElseIf (($Text.Count -gt 0) -AND ($ForegroundColor.Count -gt 0) -AND ($BackgroundColor.Count -gt 0)) { #Text, ForegroundColor, and BackgroundColor Specified (FAILS NOT WRITING DEFAULT) For ($i = 0; $i -lt $Text.Count; $i++) { If ($ForegroundColor.Count -le $i) { $ForegroundColor += $ForegroundColorDefault } #ForegroundColor Not Specified Set to Default If ($BackgroundColor.Count -le $i) { $BackgroundColor += $BackgroundColorDefault } #BackgroundColor Not Specified Set to Default If ($ForegroundColor[$i] -eq "Default") { $ForegroundColor[$i] = $ForegroundColorDefault } If ($BackgroundColor[$i] -eq "Default") { If ($BackgroundColorDefault -eq "Default") { Write-Host $Text[$i] -ForegroundColor $ForegroundColor[$i] -NoNewline } Else { Write-Host $Text[$i] -ForegroundColor $ForegroundColor[$i] -BackgroundColor $BackgroundColorDefault -NoNewline } } Else { Write-Host $Text[$i] -ForegroundColor $ForegroundColor[$i] -BackgroundColor $BackgroundColor[$i] -NoNewline } } } Else { #No Text, ForegroundColor, or BackgroundColor Specified ($Text.Count -eq 0) -AND ($ForegroundColor.Count -eq 0) -AND ($BackgroundColor.Count -eq 0) } #Post Text If ($PostSpace -gt 0) { for ($i = 0; $i -lt $PostSpace; $i++) { Write-Host -Object " " -NoNewline } } # Add Tab(s) after Main text If ($PostTab -gt 0) { for ($i = 0; $i -lt $PostTab; $i++) { Write-Host -Object "`t" -NoNewline } } # Add Space(s) after Main text If ($PostLine -gt 0) { for ($i = 0; $i -lt $PostLine; $i++) { Write-Host -Object "`n" -NoNewline } } # Add empty line(s) after Main text If ($NoNewLine) { Write-Host -NoNewline } else { Write-Host } # Add New Line after Main Text Unless NoNewLine is Supplied } #Log File $TextToWrite = "" #Build Text to Write to Log File If ($PreLine -gt 0) { For ($i = 0; $i -lt $PreLine; $i++) { $TextToWrite += "`n" } } # Add empty line(s) before Main text If ($PreSpace -gt 0) { For ($i = 0; $i -lt $PreSpace; $i++) { $TextToWrite += " " } } # Add Tab(s) before Main text If ($PreTab -gt 0) { For ($i = 0; $i -lt $PreTab; $i++) { $TextToWrite += "`t" } } # Add Space(s) before Main text If ($TimeStamp) { $TextToWrite += "[$([datetime]::Now.ToString($TimeStampFormat))]" } # Add Timestamp before Main Text If ($Text.Count -gt 0) { For ($i = 0; $i -lt $Text.Count; $i++) { $TextToWrite += $Text[$i] } } #Add Main Text If ($PostSpace -gt 0) { for ($i = 0; $i -lt $PostSpace; $i++) { $TextToWrite += " " } } # Add Tab(s) after Main text If ($PostTab -gt 0) { for ($i = 0; $i -lt $PostTab; $i++) { $TextToWrite += "`t" } } # Add Space(s) after Main text If ($PostLine -gt 0) { for ($i = 0; $i -lt $PostLine; $i++) { $TextToWrite += "`n" } } # Add empty line(s) after Main text If ($LogFile.Count -eq 0) { #No LogFile Specified - Skip } ElseIf ($LogFile.Count -gt 0) { #LogFile Specified - Loop Array If(!(Test-Path -Path $LogFile)) { #Create Log File If Does Not Exist If ($NoNewLine) { $nf = New-Item -Path $LogFile -type file -force -Value $TextToWrite } Else { $nf = New-Item -Path $LogFile -type file -force -Value $TextToWrite`r`n } } Else { #Log File Exists If($Overwrite) { #Overwrite Log File If ($NoNewLine) { Set-Content -Path $LogFile -Value $TextToWrite -NoNewline } Else { Set-Content -Path $LogFile -Value $TextToWrite } } Else { #Append Log File Try { If ($NoNewLine) { Add-Content -Path $LogFile -Value $TextToWrite -ErrorAction Stop -NoNewline } Else { Add-Content -Path $LogFile -Value $TextToWrite -ErrorAction Stop } } Catch { Start-Sleep -s 3 If ($NoNewLine) { Add-Content -Path $LogFile -Value $TextToWrite -NoNewline } Else { Add-Content -Path $LogFile -Value $TextToWrite } } } } } } End { #Nothing to Do Here } } Main
2 pings
[…] 2_CompareFolderResults.ps1 to compare ROM results by modifying filters […]
[…] ← Previous Next → […]