From 4348f052c3dc3cfcfe15940fc4561e47a081f8ed Mon Sep 17 00:00:00 2001 From: Chris Titus Date: Mon, 17 Jun 2024 20:16:40 -0700 Subject: [PATCH 01/12] Update Invoke-WinUtilNumLock.ps1 (#2104) --- functions/private/Invoke-WinUtilNumLock.ps1 | 1 + 1 file changed, 1 insertion(+) diff --git a/functions/private/Invoke-WinUtilNumLock.ps1 b/functions/private/Invoke-WinUtilNumLock.ps1 index 64fe4110..97b36a94 100644 --- a/functions/private/Invoke-WinUtilNumLock.ps1 +++ b/functions/private/Invoke-WinUtilNumLock.ps1 @@ -15,6 +15,7 @@ function Invoke-WinUtilNumLock { Write-Host "Disabling Numlock on startup" $value = 0 } + New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS $Path = "HKU:\.Default\Control Panel\Keyboard" Set-ItemProperty -Path $Path -Name InitialKeyboardIndicators -Value $value } From 9be030a4e24fd15ae226bd056141dcfa3295f011 Mon Sep 17 00:00:00 2001 From: ChrisTitusTech Date: Tue, 18 Jun 2024 03:17:06 +0000 Subject: [PATCH 02/12] Compile Winutil --- winutil.ps1 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/winutil.ps1 b/winutil.ps1 index 40b79198..3c80f14d 100644 --- a/winutil.ps1 +++ b/winutil.ps1 @@ -8,7 +8,7 @@ Author : Chris Titus @christitustech Runspace Author: @DeveloperDurp GitHub : https://github.com/ChrisTitusTech - Version : 24.06.11 + Version : 24.06.18 #> param ( [switch]$Debug, @@ -45,7 +45,7 @@ Add-Type -AssemblyName System.Windows.Forms # Variable to sync between runspaces $sync = [Hashtable]::Synchronized(@{}) $sync.PSScriptRoot = $PSScriptRoot -$sync.version = "24.06.11" +$sync.version = "24.06.18" $sync.configs = @{} $sync.ProcessRunning = $false @@ -1985,6 +1985,7 @@ function Invoke-WinUtilNumLock { Write-Host "Disabling Numlock on startup" $value = 0 } + New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS $Path = "HKU:\.Default\Control Panel\Keyboard" Set-ItemProperty -Path $Path -Name InitialKeyboardIndicators -Value $value } From 7c58eb0e785387949ba2a1eaead7052d011a6f8f Mon Sep 17 00:00:00 2001 From: "Mr.k" Date: Thu, 20 Jun 2024 21:29:50 +0300 Subject: [PATCH 03/12] Add 'JoyToKey' and 'Wise Program Uninstaller' Apps into 'applications.json' File (#2069) * Add 'Wise Program Uninstaller' App into 'applications.json' File * Add 'JoyToKey' App into 'applications.json' File --- config/applications.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/config/applications.json b/config/applications.json index e8375bbb..50afb523 100644 --- a/config/applications.json +++ b/config/applications.json @@ -1831,6 +1831,14 @@ "link": "https://www.revouninstaller.com/", "winget": "RevoUninstaller.RevoUninstaller" }, + "WPFInstallWiseProgramUninstaller": { + "category": "Utilities", + "choco": "na", + "content": "Wise Program Uninstaller (WiseCleaner)", + "description": "Wise Program Uninstaller is the perfect solution for uninstalling Windows programs, allowing you to uninstall applications quickly and completely using its simple and user-friendly interface.", + "link": "https://www.wisecleaner.com/wise-program-uninstaller.html", + "winget": "WiseCleaner.WiseProgramUninstaller" + }, "WPFInstallrevolt": { "category": "Communications", "choco": "na", @@ -2791,6 +2799,14 @@ "link": "https://github.com/7gxycn08/ForceAutoHDR", "winget": "ForceAutoHDR.7gxycn08" }, + "WPFInstallJoyToKey": { + "category": "Utilities", + "choco": "joytokey", + "content": "JoyToKey", + "description": "enables PC game controllers to emulate the keyboard and mouse input", + "link": "https://joytokey.net/en/", + "winget": "JTKsoftware.JoyToKey" + }, "WPFInstallnditools": { "category": "Multimedia Tools", "choco": "na", From c942287172a6d153986cdd2701b2d72442769ca0 Mon Sep 17 00:00:00 2001 From: ChrisTitusTech Date: Thu, 20 Jun 2024 18:30:22 +0000 Subject: [PATCH 04/12] Compile Winutil --- winutil.ps1 | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/winutil.ps1 b/winutil.ps1 index 3c80f14d..c6264be4 100644 --- a/winutil.ps1 +++ b/winutil.ps1 @@ -8,7 +8,7 @@ Author : Chris Titus @christitustech Runspace Author: @DeveloperDurp GitHub : https://github.com/ChrisTitusTech - Version : 24.06.18 + Version : 24.06.20 #> param ( [switch]$Debug, @@ -45,7 +45,7 @@ Add-Type -AssemblyName System.Windows.Forms # Variable to sync between runspaces $sync = [Hashtable]::Synchronized(@{}) $sync.PSScriptRoot = $PSScriptRoot -$sync.version = "24.06.18" +$sync.version = "24.06.20" $sync.configs = @{} $sync.ProcessRunning = $false @@ -7171,6 +7171,14 @@ $sync.configs.applications = '{ "link": "https://www.revouninstaller.com/", "winget": "RevoUninstaller.RevoUninstaller" }, + "WPFInstallWiseProgramUninstaller": { + "category": "Utilities", + "choco": "na", + "content": "Wise Program Uninstaller (WiseCleaner)", + "description": "Wise Program Uninstaller is the perfect solution for uninstalling Windows programs, allowing you to uninstall applications quickly and completely using its simple and user-friendly interface.", + "link": "https://www.wisecleaner.com/wise-program-uninstaller.html", + "winget": "WiseCleaner.WiseProgramUninstaller" + }, "WPFInstallrevolt": { "category": "Communications", "choco": "na", @@ -8131,6 +8139,14 @@ $sync.configs.applications = '{ "link": "https://github.com/7gxycn08/ForceAutoHDR", "winget": "ForceAutoHDR.7gxycn08" }, + "WPFInstallJoyToKey": { + "category": "Utilities", + "choco": "joytokey", + "content": "JoyToKey", + "description": "enables PC game controllers to emulate the keyboard and mouse input", + "link": "https://joytokey.net/en/", + "winget": "JTKsoftware.JoyToKey" + }, "WPFInstallnditools": { "category": "Multimedia Tools", "choco": "na", @@ -14184,20 +14200,23 @@ $inputXML = ' + + + - - - + + + @@ -14387,6 +14406,9 @@ $inputXML = ' + + + From 4fcd3f5b2f3d8f9c6ee55b3f9d1027c000c1f072 Mon Sep 17 00:00:00 2001 From: "Mr.k" Date: Thu, 20 Jun 2024 21:31:47 +0300 Subject: [PATCH 05/12] Add 'croc' App to 'applications.json' File (#2070) --- config/applications.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/config/applications.json b/config/applications.json index 50afb523..ffa68f80 100644 --- a/config/applications.json +++ b/config/applications.json @@ -2743,6 +2743,14 @@ "link": "https://github.com/magic-wormhole/magic-wormhole", "winget": "magic-wormhole.magic-wormhole" }, + "WPFInstallcroc": { + "category": "Utilities", + "choco": "croc", + "content": "croc", + "description": "Easily and securely send things from one computer to another.", + "link": "https://github.com/schollz/croc", + "winget": "schollz.croc" + }, "WPFInstallqgis": { "category": "Multimedia Tools", "choco": "qgis", From 8ace1a32bf004bbafb090eb0d6e5cab1f437bc88 Mon Sep 17 00:00:00 2001 From: ChrisTitusTech Date: Thu, 20 Jun 2024 18:32:13 +0000 Subject: [PATCH 06/12] Compile Winutil --- winutil.ps1 | 47 +++++++++++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/winutil.ps1 b/winutil.ps1 index c6264be4..ec4c1175 100644 --- a/winutil.ps1 +++ b/winutil.ps1 @@ -8083,6 +8083,14 @@ $sync.configs.applications = '{ "link": "https://github.com/magic-wormhole/magic-wormhole", "winget": "magic-wormhole.magic-wormhole" }, + "WPFInstallcroc": { + "category": "Utilities", + "choco": "croc", + "content": "croc", + "description": "Easily and securely send things from one computer to another.", + "link": "https://github.com/schollz/croc", + "winget": "schollz.croc" + }, "WPFInstallqgis": { "category": "Multimedia Tools", "choco": "qgis", @@ -13560,15 +13568,15 @@ $inputXML = ' + + + - - - @@ -13772,17 +13780,17 @@ $inputXML = ' - - - - - + + + + + @@ -13994,11 +14002,6 @@ $inputXML = ' - - - - - + + + @@ -14110,6 +14118,9 @@ $inputXML = ' + + + @@ -14208,11 +14219,6 @@ $inputXML = ' - - - - - @@ -14222,6 +14228,11 @@ $inputXML = ' + + + + + From b6902c116ad857565b6ffdf9e36b7f9b0b81074a Mon Sep 17 00:00:00 2001 From: "Mr.k" Date: Thu, 20 Jun 2024 21:35:14 +0300 Subject: [PATCH 07/12] Add 'TeraCopy' and 'Ambie White Noise' Apps into 'applications.json' File (#2071) * Add 'Ambie White Noise' App into 'applications.json' File * Add 'TeraCopy' App into 'applications.json' File --- config/applications.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/config/applications.json b/config/applications.json index ffa68f80..0ab64a6e 100644 --- a/config/applications.json +++ b/config/applications.json @@ -2511,6 +2511,14 @@ "link": "https://toys.wisecleaner.com/", "winget": "WiseCleaner.WiseToys" }, + "WPFInstallTeraCopy": { + "category": "Utilities", + "choco": "TeraCopy", + "content": "TeraCopy", + "description": "Copy your files faster and more securely", + "link": "https://codesector.com/teracopy", + "winget": "CodeSector.TeraCopy" + }, "WPFInstallwizfile": { "category": "Utilities", "choco": "na", @@ -2735,6 +2743,14 @@ "link": "https://github.com/AutoDarkMode/Windows-Auto-Night-Mode", "winget": "Armin2208.WindowsAutoNightMode" }, + "WPFInstallAmbieWhiteNoise": { + "category": "Utilities", + "choco": "na", + "content": "Ambie White Noise", + "description": "Ambie is the ultimate app to help you focus, study, or relax. We use white noise and nature sounds combined with an innovative focus timer to keep you concentrated on doing your best work.", + "link": "https://ambieapp.com/", + "winget": "9P07XNM5CHP0" + }, "WPFInstallmagicwormhole": { "category": "Utilities", "choco": "magic-wormhole", From 1e906696f5d3b06122bf75c298b1c74a11e168f6 Mon Sep 17 00:00:00 2001 From: ChrisTitusTech Date: Thu, 20 Jun 2024 18:35:38 +0000 Subject: [PATCH 08/12] Compile Winutil --- winutil.ps1 | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/winutil.ps1 b/winutil.ps1 index ec4c1175..5c119f62 100644 --- a/winutil.ps1 +++ b/winutil.ps1 @@ -7851,6 +7851,14 @@ $sync.configs.applications = '{ "link": "https://toys.wisecleaner.com/", "winget": "WiseCleaner.WiseToys" }, + "WPFInstallTeraCopy": { + "category": "Utilities", + "choco": "TeraCopy", + "content": "TeraCopy", + "description": "Copy your files faster and more securely", + "link": "https://codesector.com/teracopy", + "winget": "CodeSector.TeraCopy" + }, "WPFInstallwizfile": { "category": "Utilities", "choco": "na", @@ -8075,6 +8083,14 @@ $sync.configs.applications = '{ "link": "https://github.com/AutoDarkMode/Windows-Auto-Night-Mode", "winget": "Armin2208.WindowsAutoNightMode" }, + "WPFInstallAmbieWhiteNoise": { + "category": "Utilities", + "choco": "na", + "content": "Ambie White Noise", + "description": "Ambie is the ultimate app to help you focus, study, or relax. We use white noise and nature sounds combined with an innovative focus timer to keep you concentrated on doing your best work.", + "link": "https://ambieapp.com/", + "winget": "9P07XNM5CHP0" + }, "WPFInstallmagicwormhole": { "category": "Utilities", "choco": "magic-wormhole", @@ -14070,6 +14086,9 @@ $inputXML = ' + + + @@ -14225,15 +14244,15 @@ $inputXML = ' - - - + + + @@ -14369,6 +14388,9 @@ $inputXML = ' + + + From 360cc15b4b79f915f68ad9ce166f03f27d41f13a Mon Sep 17 00:00:00 2001 From: Chris Titus Date: Thu, 20 Jun 2024 13:46:24 -0700 Subject: [PATCH 09/12] remove winutil tracking --- winutil.ps1 | 15362 -------------------------------------------------- 1 file changed, 15362 deletions(-) delete mode 100644 winutil.ps1 diff --git a/winutil.ps1 b/winutil.ps1 deleted file mode 100644 index 5c119f62..00000000 --- a/winutil.ps1 +++ /dev/null @@ -1,15362 +0,0 @@ -################################################################################################################ -### ### -### WARNING: This file is automatically generated DO NOT modify this file directly as it will be overwritten ### -### ### -################################################################################################################ -<# -.NOTES - Author : Chris Titus @christitustech - Runspace Author: @DeveloperDurp - GitHub : https://github.com/ChrisTitusTech - Version : 24.06.20 -#> -param ( - [switch]$Debug, - [string]$Config, - [switch]$Run -) - -# Set DebugPreference based on the -Debug switch -if ($Debug) { - $DebugPreference = "Continue" -} - -if ($Config) { - $PARAM_CONFIG = $Config -} - -$PARAM_RUN = $false -# Handle the -Run switch -if ($Run) { - Write-Host "Running config file tasks..." - $PARAM_RUN = $true -} - -if (!(Test-Path -Path $ENV:TEMP)) { - New-Item -ItemType Directory -Force -Path $ENV:TEMP -} - -Start-Transcript $ENV:TEMP\Winutil.log -Append - -# Load DLLs -Add-Type -AssemblyName PresentationFramework -Add-Type -AssemblyName System.Windows.Forms - -# Variable to sync between runspaces -$sync = [Hashtable]::Synchronized(@{}) -$sync.PSScriptRoot = $PSScriptRoot -$sync.version = "24.06.20" -$sync.configs = @{} -$sync.ProcessRunning = $false - -# If script isn't running as admin, show error message and quit -If (([Security.Principal.WindowsIdentity]::GetCurrent()).Owner.Value -ne "S-1-5-32-544") -{ - Write-Host "===========================================" -Foregroundcolor Red - Write-Host "-- Scripts must be run as Administrator ---" -Foregroundcolor Red - Write-Host "-- Right-Click Start -> Terminal(Admin) ---" -Foregroundcolor Red - Write-Host "===========================================" -Foregroundcolor Red - break -} - -# Set PowerShell window title -$Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Admin)" -clear-host -function ConvertTo-Icon { - <# - - .DESCRIPTION - This function will convert PNG to ICO file - - .EXAMPLE - ConvertTo-Icon -bitmapPath "$env:TEMP\cttlogo.png" -iconPath $iconPath - #> - param( [Parameter(Mandatory=$true)] - $bitmapPath, - $iconPath = "$env:temp\newicon.ico" - ) - - Add-Type -AssemblyName System.Drawing - - if (Test-Path $bitmapPath) { - $b = [System.Drawing.Bitmap]::FromFile($bitmapPath) - $icon = [System.Drawing.Icon]::FromHandle($b.GetHicon()) - $file = New-Object System.IO.FileStream($iconPath, 'OpenOrCreate') - $icon.Save($file) - $file.Close() - $icon.Dispose() - #explorer "/SELECT,$iconpath" - } - else { Write-Warning "$BitmapPath does not exist" } -} -function Copy-Files { - <# - - .DESCRIPTION - This function will make all modifications to the registry - - .EXAMPLE - - Set-WinUtilRegistry -Name "PublishUserActivities" -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Type "DWord" -Value "0" - - #> - param ( - [string] $Path, - [string] $Destination, - [switch] $Recurse = $false, - [switch] $Force = $false - ) - - try { - - $files = Get-ChildItem -Path $path -Recurse:$recurse - Write-Host "Copy $($files.Count)(s) from $path to $destination" - - foreach($file in $files) - { - $status = "Copy files {0} on {1}: {2}" -f $counter, $files.Count, $file.Name - Write-Progress -Activity "Copy Windows files" -Status $status -PercentComplete ($counter++/$files.count*100) - $restpath = $file.FullName -Replace $path, '' - - if($file.PSIsContainer -eq $true) - { - Write-Debug "Creating $($destination + $restpath)" - New-Item ($destination+$restpath) -Force:$force -Type Directory -ErrorAction SilentlyContinue - } - else - { - Write-Debug "Copy from $($file.FullName) to $($destination+$restpath)" - Copy-Item $file.FullName ($destination+$restpath) -ErrorAction SilentlyContinue -Force:$force - Set-ItemProperty -Path ($destination+$restpath) -Name IsReadOnly -Value $false - } - } - Write-Progress -Activity "Copy Windows files" -Status "Ready" -Completed - } - Catch{ - Write-Warning "Unable to Copy all the files due to unhandled exception" - Write-Warning $psitem.Exception.StackTrace - } -} -function Get-LocalizedYesNo { - <# - .SYNOPSIS - This function runs choice.exe and captures its output to extract yes no in a localized Windows - - .DESCRIPTION - The function retrieves the output of the command 'cmd /c "choice nul"' and converts the default output for Yes and No - in the localized format, such as "Yes=, No=". - - .EXAMPLE - $yesNoArray = Get-LocalizedYesNo - Write-Host "Yes=$($yesNoArray[0]), No=$($yesNoArray[1])" - #> - - # Run choice and capture its options as output - # The output shows the options for Yes and No as "[Y,N]?" in the (partitially) localized format. - # eg. English: [Y,N]? - # Dutch: [Y,N]? - # German: [J,N]? - # French: [O,N]? - # Spanish: [S,N]? - # Italian: [S,N]? - # Russian: [Y,N]? - - $line = cmd /c "choice nul" - $charactersArray = @() - $regexPattern = '([a-zA-Z])' - $charactersArray = [regex]::Matches($line, $regexPattern) | ForEach-Object { $_.Groups[1].Value } - - Write-Debug "According to takeown.exe local Yes is $charactersArray[0]" - # Return the array of characters - return $charactersArray - } - - -function Get-LocalizedYesNoTakeown { - <# - .SYNOPSIS - This function runs takeown.exe and captures its output to extract yes no in a localized Windows - - .DESCRIPTION - The function retrieves lines from the output of takeown.exe until there are at least 2 characters - captured in a specific format, such as "Yes=, No=". - - .EXAMPLE - $yesNoArray = Get-LocalizedYesNo - Write-Host "Yes=$($yesNoArray[0]), No=$($yesNoArray[1])" - #> - - # Run takeown.exe and capture its output - $takeownOutput = & takeown.exe /? | Out-String - - # Parse the output and retrieve lines until there are at least 2 characters in the array - $found = $false - $charactersArray = @() - foreach ($line in $takeownOutput -split "`r`n") - { - # skip everything before /D flag help - if ($found) - { - # now that /D is found start looking for a single character in double quotes - # in help text there is another string in double quotes but it is not a single character - $regexPattern = '"([a-zA-Z])"' - - $charactersArray = [regex]::Matches($line, $regexPattern) | ForEach-Object { $_.Groups[1].Value } - - # if ($charactersArray.Count -gt 0) { - # Write-Output "Extracted symbols: $($matches -join ', ')" - # } else { - # Write-Output "No matches found." - # } - - if ($charactersArray.Count -ge 2) - { - break - } - } - elseif ($line -match "/D ") - { - $found = $true - } - } - - Write-Debug "According to takeown.exe local Yes is $charactersArray[0]" - # Return the array of characters - return $charactersArray - } -function Get-Oscdimg { - <# - - .DESCRIPTION - This function will download oscdimg file from github Release folders and put it into env:temp folder - - .EXAMPLE - Get-Oscdimg - #> - param( [Parameter(Mandatory=$true)] - [string]$oscdimgPath - ) - $oscdimgPath = "$env:TEMP\oscdimg.exe" - $downloadUrl = "https://github.com/ChrisTitusTech/winutil/raw/main/releases/oscdimg.exe" - Invoke-RestMethod -Uri $downloadUrl -OutFile $oscdimgPath - $hashResult = Get-FileHash -Path $oscdimgPath -Algorithm SHA256 - $sha256Hash = $hashResult.Hash - - Write-Host "[INFO] oscdimg.exe SHA-256 Hash: $sha256Hash" - - $expectedHash = "AB9E161049D293B544961BFDF2D61244ADE79376D6423DF4F60BF9B147D3C78D" # Replace with the actual expected hash - if ($sha256Hash -eq $expectedHash) { - Write-Host "Hashes match. File is verified." - } else { - Write-Host "Hashes do not match. File may be corrupted or tampered with." - } -} -function Get-TabXaml { - <# - .SYNOPSIS - Generates XAML for a tab in the WinUtil GUI - This function is used to generate the XAML for the applications tab in the WinUtil GUI - It takes the tabname and the number of columns to display the applications in as input and returns the XAML for the tab as output - .PARAMETER tabname - The name of the tab to generate XAML for - .PARAMETER columncount - The number of columns to display the applications in - .OUTPUTS - The XAML for the tab - .EXAMPLE - Get-TabXaml "applications" 3 - #> - - - param( [Parameter(Mandatory=$true)] - $tabname, - $columncount = 0 - ) - $organizedData = @{} - # Iterate through JSON data and organize by panel and category - foreach ($appName in $sync.configs.$tabname.PSObject.Properties.Name) { - $appInfo = $sync.configs.$tabname.$appName - - # Create an object for the application - $appObject = [PSCustomObject]@{ - Name = $appName - Category = $appInfo.Category - Content = $appInfo.Content - Choco = $appInfo.choco - Winget = $appInfo.winget - Panel = if ($columncount -gt 0 ) { "0" } else {$appInfo.panel} - Link = $appInfo.link - Description = $appInfo.description - # Type is (Checkbox,Toggle,Button,Combobox ) (Default is Checkbox) - Type = $appInfo.type - ComboItems = $appInfo.ComboItems - # Checked is the property to set startup checked status of checkbox (Default is false) - Checked = $appInfo.Checked - } - - if (-not $organizedData.ContainsKey($appObject.panel)) { - $organizedData[$appObject.panel] = @{} - } - - if (-not $organizedData[$appObject.panel].ContainsKey($appObject.Category)) { - $organizedData[$appObject.panel][$appObject.Category] = @{} - } - - # Store application data in a sub-array under the category - # Add Order property to keep the original order of tweaks and features - $organizedData[$appObject.panel][$appInfo.Category]["$($appInfo.order)$appName"] = $appObject - } - $panelcount=0 - $paneltotal = $organizedData.Keys.Count - if ($columncount -gt 0) { - $appcount = $sync.configs.$tabname.PSObject.Properties.Name.count + $organizedData["0"].Keys.count - $maxcount = [Math]::Round( $appcount / $columncount + 0.5) - $paneltotal = $columncount - } - # add ColumnDefinitions to evenly draw colums - $blockXml="`n"+("`n"*($paneltotal))+"`n" - # Iterate through organizedData by panel, category, and application - $count = 0 - foreach ($panel in ($organizedData.Keys | Sort-Object)) { - $blockXml += "`n`n" - $panelcount++ - foreach ($category in ($organizedData[$panel].Keys | Sort-Object)) { - $count++ - if ($columncount -gt 0) { - $panelcount2 = [Int](($count)/$maxcount-0.5) - if ($panelcount -eq $panelcount2 ) { - $blockXml +="`n`n`n" - $blockXml += "`n`n" - $panelcount++ - } - } - - # Dot-source the Get-WPFObjectName function - . .\functions\private\Get-WPFObjectName - - $categorycontent = $($category -replace '^.__', '') - $categoryname = Get-WPFObjectName -type "Label" -name $categorycontent - $blockXml += "`n`n" - $blockXml += "`n`n" - $panelcount++ - } - } - $appInfo = $organizedData[$panel][$category][$appName] - if ("Toggle" -eq $appInfo.Type) { - $blockXml += "`n`n" - } elseif ("Combobox" -eq $appInfo.Type) { - $blockXml += "`n" - # If it is a digit, type is button and button length is digits - } elseif ($appInfo.Type -match "^[\d\.]+$") { - $blockXml += " - - - - - - - Choose Windows SKU - - Choose Windows features you want to remove from the ISO - - - - - - - - - - - - + + + + + + + Choose Windows SKU + + Choose Windows features you want to remove from the ISO + + + + + + + + + + + +