From b94dfc7e8de032087050b4718dbff66598082030 Mon Sep 17 00:00:00 2001 From: "Mr.k" Date: Mon, 29 Jul 2024 07:01:48 +0300 Subject: [PATCH] Result of 'Invoke-Preprocessing' Script --- .github/workflows/issue-slash-commands.yaml | 2 +- .github/workflows/sponsors.yml | 2 +- .github/workflows/unittests.yaml | 2 +- config/dns.json | 2 +- config/tweaks.json | 30 +- docs/KnownIssues.md | 2 +- docs/contribute.md | 2 +- docs/index.md | 2 +- edgeremoval.bat | 2 +- edgeremoval.ps1 | 2 +- functions/private/ConvertTo-Icon.ps1 | 3 +- functions/private/Copy-Files.ps1 | 8 +- functions/private/Get-LocalizedYesNo.ps1 | 2 +- functions/private/Get-TabXaml.ps1 | 2 +- .../private/Get-WinUtilInstallerProcess.ps1 | 6 +- functions/private/Get-WinUtilToggleStatus.ps1 | 91 +- functions/private/Get-WinUtilVariables.ps1 | 5 +- functions/private/Get-WinUtilWingetLatest.ps1 | 5 +- .../Get-WinUtilWingetPrerequisites.ps1 | 5 +- functions/private/Install-WinUtilChoco.ps1 | 3 +- .../private/Install-WinUtilProgramChoco.ps1 | 42 +- .../private/Install-WinUtilProgramWinget.ps1 | 6 +- functions/private/Install-WinUtilWinget.ps1 | 14 +- functions/private/Invoke-MicroWin-Helper.ps1 | 1094 ++++++++--------- .../private/Invoke-WinUtilBingSearch.ps1 | 18 +- .../private/Invoke-WinUtilCurrentSystem.ps1 | 38 +- functions/private/Invoke-WinUtilDarkMode.ps1 | 18 +- .../private/Invoke-WinUtilFeatureInstall.ps1 | 30 +- functions/private/Invoke-WinUtilGPU.ps1 | 4 +- .../private/Invoke-WinUtilHiddenFiles.ps1 | 16 +- .../Invoke-WinUtilMouseAcceleration.ps1 | 18 +- functions/private/Invoke-WinUtilNumLock.ps1 | 18 +- functions/private/Invoke-WinUtilScript.ps1 | 19 +- functions/private/Invoke-WinUtilShowExt.ps1 | 18 +- .../private/Invoke-WinUtilSnapFlyout.ps1 | 18 +- .../private/Invoke-WinUtilSnapSuggestion.ps1 | 18 +- .../private/Invoke-WinUtilSnapWindow.ps1 | 18 +- functions/private/Invoke-WinUtilSponsors.ps1 | 5 +- .../private/Invoke-WinUtilStickyKeys.ps1 | 18 +- functions/private/Invoke-WinUtilTaskView.ps1 | 16 +- .../Invoke-WinUtilTaskbarAlignment.ps1 | 16 +- .../private/Invoke-WinUtilTaskbarSearch.ps1 | 16 +- .../private/Invoke-WinUtilTaskbarWidgets.ps1 | 16 +- functions/private/Invoke-WinUtilTweaks.ps1 | 22 +- .../private/Invoke-WinUtilVerboseLogon.ps1 | 18 +- functions/private/Remove-WinUtilAPPX.ps1 | 13 +- functions/private/Set-WinUtilDNS.ps1 | 16 +- functions/private/Set-WinUtilRegistry.ps1 | 13 +- .../private/Set-WinUtilScheduledTask.ps1 | 19 +- functions/private/Set-WinUtilService.ps1 | 6 +- functions/private/Set-WinUtilTaskbarItem.ps1 | 2 +- functions/private/Set-WinUtilUiTheme.ps1 | 10 +- .../private/Test-WinUtilPackageManager.ps1 | 9 +- .../private/Update-WinUtilProgramWinget.ps1 | 2 +- functions/public/Invoke-ScratchDialog.ps1 | 3 +- functions/public/Invoke-WPFButton.ps1 | 4 +- functions/public/Invoke-WPFCloseButton.ps1 | 2 +- functions/public/Invoke-WPFControlPanel.ps1 | 4 +- functions/public/Invoke-WPFFeatureInstall.ps1 | 6 +- functions/public/Invoke-WPFFixesNetwork.ps1 | 2 +- functions/public/Invoke-WPFFixesUpdate.ps1 | 10 +- functions/public/Invoke-WPFFixesWinget.ps1 | 2 +- functions/public/Invoke-WPFGetInstalled.ps1 | 10 +- functions/public/Invoke-WPFGetIso.ps1 | 58 +- functions/public/Invoke-WPFImpex.ps1 | 15 +- functions/public/Invoke-WPFInstall.ps1 | 13 +- functions/public/Invoke-WPFInstallUpgrade.ps1 | 4 +- functions/public/Invoke-WPFMicrowin.ps1 | 726 ++++++----- functions/public/Invoke-WPFOOSU.ps1 | 5 +- functions/public/Invoke-WPFPanelDISM.ps1 | 2 +- functions/public/Invoke-WPFPresets.ps1 | 8 +- functions/public/Invoke-WPFRunspace.ps1 | 5 +- functions/public/Invoke-WPFShortcut.ps1 | 5 +- functions/public/Invoke-WPFTab.ps1 | 3 +- functions/public/Invoke-WPFToggle.ps1 | 2 +- functions/public/Invoke-WPFTweakPS7.ps1 | 4 +- .../public/Invoke-WPFUltimatePerformance.ps1 | 10 +- functions/public/Invoke-WPFUnInstall.ps1 | 15 +- functions/public/Invoke-WPFUpdatesdefault.ps1 | 2 +- functions/public/Invoke-WPFUpdatesdisable.ps1 | 2 +- .../public/Invoke-WPFUpdatessecurity.ps1 | 2 +- functions/public/Invoke-WPFtweaksbutton.ps1 | 8 +- functions/public/Invoke-WPFundoall.ps1 | 10 +- gpedit-home.ps1 | 2 +- lint/PSScriptAnalyser.ps1 | 2 +- overrides/main.html | 2 +- pester/configs.Tests.ps1 | 16 +- scripts/main.ps1 | 62 +- scripts/start.ps1 | 3 +- winget.ps1 | 12 +- 90 files changed, 1316 insertions(+), 1527 deletions(-) diff --git a/.github/workflows/issue-slash-commands.yaml b/.github/workflows/issue-slash-commands.yaml index a83b432c..ff23c3ab 100644 --- a/.github/workflows/issue-slash-commands.yaml +++ b/.github/workflows/issue-slash-commands.yaml @@ -42,4 +42,4 @@ jobs: ISSUE_NUMBER: ${{ github.event.issue.number }} run: | echo Closing the issue... - gh issue close $ISSUE_NUMBER --repo ${{ github.repository }} \ No newline at end of file + gh issue close $ISSUE_NUMBER --repo ${{ github.repository }} diff --git a/.github/workflows/sponsors.yml b/.github/workflows/sponsors.yml index 6a0e22b0..a3516e75 100644 --- a/.github/workflows/sponsors.yml +++ b/.github/workflows/sponsors.yml @@ -22,4 +22,4 @@ jobs: uses: JamesIves/github-pages-deploy-action@v4 with: branch: main - folder: '.' \ No newline at end of file + folder: '.' diff --git a/.github/workflows/unittests.yaml b/.github/workflows/unittests.yaml index 02879545..5e1f2b0f 100644 --- a/.github/workflows/unittests.yaml +++ b/.github/workflows/unittests.yaml @@ -37,4 +37,4 @@ jobs: shell: pwsh env: - TEMP: ${{ runner.temp }} \ No newline at end of file + TEMP: ${{ runner.temp }} diff --git a/config/dns.json b/config/dns.json index 8f5ca14c..6c2ffbbd 100644 --- a/config/dns.json +++ b/config/dns.json @@ -47,4 +47,4 @@ "Primary6": "2a10:50c0::bad1:ff", "Secondary6": "2a10:50c0::bad2:ff" } -} \ No newline at end of file +} diff --git a/config/tweaks.json b/config/tweaks.json index 1010071f..c16ba9a6 100644 --- a/config/tweaks.json +++ b/config/tweaks.json @@ -2277,7 +2277,7 @@ # Check if the SystemRestorePointCreationFrequency value exists $exists = Get-ItemProperty -path \"HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\SystemRestore\" -Name \"SystemRestorePointCreationFrequency\" -ErrorAction SilentlyContinue - if($null -eq $exists){ + if($null -eq $exists) { write-host 'Changing system to allow multiple restore points per day' Set-ItemProperty -Path \"HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\SystemRestore\" -Name \"SystemRestorePointCreationFrequency\" -Value \"0\" -Type DWord -Force -ErrorAction Stop | Out-Null } @@ -2511,17 +2511,16 @@ $OneDrivePath = $($env:OneDrive) Write-Host \"Removing OneDrive\" $regPath = \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OneDriveSetup.exe\" - if (Test-Path $regPath){ + if (Test-Path $regPath) { $OneDriveUninstallString = Get-ItemPropertyValue \"$regPath\" -Name \"UninstallString\" $OneDriveExe, $OneDriveArgs = $OneDriveUninstallString.Split(\" \") Start-Process -FilePath $OneDriveExe -ArgumentList \"$OneDriveArgs /silent\" -NoNewWindow -Wait - } - else{ + } else { Write-Host \"Onedrive dosn't seem to be installed anymore\" -ForegroundColor Red return } # Check if OneDrive got Uninstalled - if (-not (Test-Path $regPath)){ + if (-not (Test-Path $regPath)) { Write-Host \"Copy downloaded Files from the OneDrive Folder to Root UserProfile\" Start-Process -FilePath powershell -ArgumentList \"robocopy '$($OneDrivePath)' '$($env:USERPROFILE.TrimEnd())\\' /mov /e /xj\" -NoNewWindow -Wait @@ -2583,8 +2582,7 @@ Write-Host \"Please Note - The OneDrive folder at $OneDrivePath may still have items in it. You must manually delete it, but all the files should already be copied to the base user folder.\" Write-Host \"If there are Files missing afterwards, please Login to Onedrive.com and Download them manually\" -ForegroundColor Yellow Start-Sleep 5 - } - else{ + } else { Write-Host \"Something went Wrong during the Unistallation of OneDrive\" -ForegroundColor Red } " @@ -2784,8 +2782,7 @@ try { Invoke-WebRequest -Uri $remoteHostsUrl -OutFile $tempHostsPath Write-Output \"Downloaded the remote HOSTS file to a temporary location.\" - } - catch { + } catch { Write-Error \"Failed to download the HOSTS file. Error: $_\" } @@ -2811,8 +2808,7 @@ $combinedContent | Set-Content $localHostsPath -Encoding ASCII Write-Output \"Successfully added the AdobeNetBlock.\" } - } - catch { + } catch { Write-Error \"Error during processing: $_\" } @@ -2823,8 +2819,7 @@ try { Invoke-Expression \"ipconfig /flushdns\" Write-Output \"DNS cache flushed successfully.\" - } - catch { + } catch { Write-Error \"Failed to flush DNS cache. Error: $_\" } " @@ -2837,8 +2832,7 @@ # Load the content of the HOSTS file try { $hostsContent = Get-Content $localHostsPath -ErrorAction Stop - } - catch { + } catch { Write-Error \"Failed to load the HOSTS file. Error: $_\" return } @@ -2864,8 +2858,7 @@ try { $newContent | Set-Content $localHostsPath -Encoding ASCII Write-Output \"Successfully removed the AdobeNetBlock section from the HOSTS file.\" - } - catch { + } catch { Write-Error \"Failed to write back to the HOSTS file. Error: $_\" } @@ -2873,8 +2866,7 @@ try { Invoke-Expression \"ipconfig /flushdns\" Write-Output \"DNS cache flushed successfully.\" - } - catch { + } catch { Write-Error \"Failed to flush DNS cache. Error: $_\" } " diff --git a/docs/KnownIssues.md b/docs/KnownIssues.md index b95a0d68..0e834676 100644 --- a/docs/KnownIssues.md +++ b/docs/KnownIssues.md @@ -176,4 +176,4 @@ Get-Service -Name "XboxGipSvc" | Set-Service -StartupType Automatic 7. **ISO File Integrity:** Ensure that the ISO file you are trying to mount is uncorrupted. Try mounting a different ISO file to see if the issue persists. -* If the problem persists after trying these steps, additional troubleshooting is required. Consider seeking assistance from Microsoft support or community forums for more specific guidance based on your system configuration and the software you use to mount the ISO. \ No newline at end of file +* If the problem persists after trying these steps, additional troubleshooting is required. Consider seeking assistance from Microsoft support or community forums for more specific guidance based on your system configuration and the software you use to mount the ISO. diff --git a/docs/contribute.md b/docs/contribute.md index f76b5ab7..d7caa9ed 100644 --- a/docs/contribute.md +++ b/docs/contribute.md @@ -103,4 +103,4 @@ graph LR ### Making a PR * To make a PR on your repo under a new branch linking to the main branch, a button will show and say Preview and Create pull request. Click that button and fill in all the information that is provided on the template. Once all the information is filled in correctly, check your PR to make sure there is not a WinUtil.ps1 file attached to the PR. Once everything is good, make the PR and wait for Chris (the maintainer) to accept or deny your PR. Once it is accepted by Chris, you will be able to see your changes in the "/windev" build. * If you do not see your feature in the main "/win" build, that is fine. All new changes go into the /windev build to make sure everything is working OK before going fully public. -* Congratulations! You just submitted your first PR. Thank you so much for contributing to WinUtil. \ No newline at end of file +* Congratulations! You just submitted your first PR. Thank you so much for contributing to WinUtil. diff --git a/docs/index.md b/docs/index.md index 24e21ab1..c3c94e06 100644 --- a/docs/index.md +++ b/docs/index.md @@ -17,4 +17,4 @@ Welcome to the official documentation for WinUtil, your go-to utility for optimi !!! info - WinUtil is updated weekly as of the time of writing. Consequently, features and functionalities may evolve, and the documentation may not always reflect the most current images or information. \ No newline at end of file + WinUtil is updated weekly as of the time of writing. Consequently, features and functionalities may evolve, and the documentation may not always reflect the most current images or information. diff --git a/edgeremoval.bat b/edgeremoval.bat index ff8556c4..a14374a9 100644 --- a/edgeremoval.bat +++ b/edgeremoval.bat @@ -84,7 +84,7 @@ $edges = @(); $bho = @(); 'LocalApplicationData','ProgramFilesX86','ProgramFiles ## use dedicated C:\Scripts path to save OpenWebSearch (due to Sigma rules FUD) $DIR = "$env:SystemDrive\Scripts"; mkdir $DIR -ea 0 >'' ## export OpenWebSearch innovative redirector - used by MSEdgeRedirect as well -foreach ($b in $bho) { if (test-path $b) { try {copy $b "$DIR\ie_to_edge_stub.exe" -force -ea 0} catch{} } } +foreach ($b in $bho) { if (test-path $b) { try {copy $b "$DIR\ie_to_edge_stub.exe" -force -ea 0} catch {} } } ## 4 remove found *Edge* appx packages with unblock tricks $provisioned = get-appxprovisionedpackage -online; $appxpackage = get-appxpackage -allusers; $eol = @() diff --git a/edgeremoval.ps1 b/edgeremoval.ps1 index 5f3a7a3c..516ac225 100644 --- a/edgeremoval.ps1 +++ b/edgeremoval.ps1 @@ -250,4 +250,4 @@ function Remove-MicrosoftEdge { } # Execute the main function -Remove-MicrosoftEdge \ No newline at end of file +Remove-MicrosoftEdge diff --git a/functions/private/ConvertTo-Icon.ps1 b/functions/private/ConvertTo-Icon.ps1 index d0e7ac08..ce06327e 100644 --- a/functions/private/ConvertTo-Icon.ps1 +++ b/functions/private/ConvertTo-Icon.ps1 @@ -86,8 +86,7 @@ function ConvertTo-Icon { $icon.Save($file) $file.Close() $icon.Dispose() - } - else { + } else { throw [System.IO.FileNotFoundException] "[ConvertTo-Icon] The provided bitmap File Path is not found at '$bitmapPath'." } } diff --git a/functions/private/Copy-Files.ps1 b/functions/private/Copy-Files.ps1 index 4d30e172..33342916 100644 --- a/functions/private/Copy-Files.ps1 +++ b/functions/private/Copy-Files.ps1 @@ -10,10 +10,10 @@ function Copy-Files { #> param ( - [string] $Path, - [string] $Destination, - [switch] $Recurse = $false, - [switch] $Force = $false + [string]$Path, + [string]$Destination, + [switch]$Recurse = $false, + [switch]$Force = $false ) try { diff --git a/functions/private/Get-LocalizedYesNo.ps1 b/functions/private/Get-LocalizedYesNo.ps1 index 227bf8dd..0c8e9390 100644 --- a/functions/private/Get-LocalizedYesNo.ps1 +++ b/functions/private/Get-LocalizedYesNo.ps1 @@ -31,4 +31,4 @@ function Get-LocalizedYesNo { # Return the array of characters return $charactersArray - } \ No newline at end of file + } diff --git a/functions/private/Get-TabXaml.ps1 b/functions/private/Get-TabXaml.ps1 index 889c25c7..5eef6417 100644 --- a/functions/private/Get-TabXaml.ps1 +++ b/functions/private/Get-TabXaml.ps1 @@ -192,7 +192,7 @@ function Get-TabXaml { # else it is a checkbox default { - $checkedStatus = If ($appInfo.Checked -eq $null) {""} Else {" IsChecked=""$($appInfo.Checked)"""} + $checkedStatus = If ($appInfo.Checked -eq $null) {""} else {" IsChecked=""$($appInfo.Checked)"""} if ($appInfo.Link -eq $null) { $blockXml += $precal_indent + " Param($ToggleSwitch) - if($ToggleSwitch -eq "WPFToggleDarkMode"){ + if($ToggleSwitch -eq "WPFToggleDarkMode") { $app = (Get-ItemProperty -path 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize').AppsUseLightTheme $system = (Get-ItemProperty -path 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize').SystemUsesLightTheme - if($app -eq 0 -and $system -eq 0){ + if($app -eq 0 -and $system -eq 0) { return $true - } - else{ + } else { return $false } } - if($ToggleSwitch -eq "WPFToggleBingSearch"){ + if($ToggleSwitch -eq "WPFToggleBingSearch") { $bingsearch = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Search').BingSearchEnabled - if($bingsearch -eq 0){ + if($bingsearch -eq 0) { return $false - } - else{ + } else { return $true } } - if($ToggleSwitch -eq "WPFToggleNumLock"){ + if($ToggleSwitch -eq "WPFToggleNumLock") { $numlockvalue = (Get-ItemProperty -path 'HKCU:\Control Panel\Keyboard').InitialKeyboardIndicators - if($numlockvalue -eq 2){ + if($numlockvalue -eq 2) { return $true - } - else{ + } else { return $false } } - if($ToggleSwitch -eq "WPFToggleVerboseLogon"){ + if($ToggleSwitch -eq "WPFToggleVerboseLogon") { $VerboseStatusvalue = (Get-ItemProperty -path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System').VerboseStatus - if($VerboseStatusvalue -eq 1){ + if($VerboseStatusvalue -eq 1) { return $true - } - else{ + } else { return $false } } - if($ToggleSwitch -eq "WPFToggleShowExt"){ + if($ToggleSwitch -eq "WPFToggleShowExt") { $hideextvalue = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced').HideFileExt - if($hideextvalue -eq 0){ + if($hideextvalue -eq 0) { return $true - } - else{ + } else { return $false } } - if($ToggleSwitch -eq "WPFToggleSnapWindow"){ + if($ToggleSwitch -eq "WPFToggleSnapWindow") { $hidesnap = (Get-ItemProperty -path 'HKCU:\Control Panel\Desktop').WindowArrangementActive - if($hidesnap -eq 0){ + if($hidesnap -eq 0) { return $false - } - else{ + } else { return $true } } - if($ToggleSwitch -eq "WPFToggleSnapFlyout"){ + if($ToggleSwitch -eq "WPFToggleSnapFlyout") { $hidesnap = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced').EnableSnapAssistFlyout - if($hidesnap -eq 0){ + if($hidesnap -eq 0) { return $false - } - else{ + } else { return $true } } - if($ToggleSwitch -eq "WPFToggleSnapSuggestion"){ + if($ToggleSwitch -eq "WPFToggleSnapSuggestion") { $hidesnap = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced').SnapAssist - if($hidesnap -eq 0){ + if($hidesnap -eq 0) { return $false - } - else{ + } else { return $true } } - if($ToggleSwitch -eq "WPFToggleMouseAcceleration"){ + if($ToggleSwitch -eq "WPFToggleMouseAcceleration") { $MouseSpeed = (Get-ItemProperty -path 'HKCU:\Control Panel\Mouse').MouseSpeed $MouseThreshold1 = (Get-ItemProperty -path 'HKCU:\Control Panel\Mouse').MouseThreshold1 $MouseThreshold2 = (Get-ItemProperty -path 'HKCU:\Control Panel\Mouse').MouseThreshold2 - if($MouseSpeed -eq 1 -and $MouseThreshold1 -eq 6 -and $MouseThreshold2 -eq 10){ + if($MouseSpeed -eq 1 -and $MouseThreshold1 -eq 6 -and $MouseThreshold2 -eq 10) { return $true - } - else{ + } else { return $false } } - if($ToggleSwitch -eq "WPFToggleTaskbarSearch"){ + if($ToggleSwitch -eq "WPFToggleTaskbarSearch") { $SearchButton = (Get-ItemProperty -path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Search").SearchboxTaskbarMode - if($SearchButton -eq 0){ + if($SearchButton -eq 0) { return $false - } - else{ + } else { return $true } } if ($ToggleSwitch -eq "WPFToggleStickyKeys") { $StickyKeys = (Get-ItemProperty -path 'HKCU:\Control Panel\Accessibility\StickyKeys').Flags - if($StickyKeys -eq 58){ + if($StickyKeys -eq 58) { return $false - } - else{ + } else { return $true } } if ($ToggleSwitch -eq "WPFToggleTaskView") { $TaskView = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced').ShowTaskViewButton - if($TaskView -eq 0){ + if($TaskView -eq 0) { return $false - } - else{ + } else { return $true } } if ($ToggleSwitch -eq "WPFToggleHiddenFiles") { $HiddenFiles = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced').Hidden - if($HiddenFiles -eq 0){ + if($HiddenFiles -eq 0) { return $false - } - else{ + } else { return $true } } @@ -140,8 +127,7 @@ Function Get-WinUtilToggleStatus { $TaskbarWidgets = (Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced").TaskBarDa if($TaskbarWidgets -eq 0) { return $false - } - else{ + } else { return $true } } @@ -149,8 +135,7 @@ Function Get-WinUtilToggleStatus { $TaskbarAlignment = (Get-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced").TaskbarAl if($TaskbarAlignment -eq 0) { return $false - } - else{ + } else { return $true } } diff --git a/functions/private/Get-WinUtilVariables.ps1 b/functions/private/Get-WinUtilVariables.ps1 index 56f36eb9..17d25393 100644 --- a/functions/private/Get-WinUtilVariables.ps1 +++ b/functions/private/Get-WinUtilVariables.ps1 @@ -14,13 +14,12 @@ function Get-WinUtilVariables { $keys = ($sync.keys).where{ $_ -like "WPF*" } if ($Type) { $output = $keys | ForEach-Object { - Try { + try { $objType = $sync["$psitem"].GetType().Name if ($Type -contains $objType) { Write-Output $psitem } - } - Catch { + } catch { <#I am here so errors don't get outputted for a couple variables that don't have the .GetType() attribute#> } } diff --git a/functions/private/Get-WinUtilWingetLatest.ps1 b/functions/private/Get-WinUtilWingetLatest.ps1 index 7a860e64..6555386e 100644 --- a/functions/private/Get-WinUtilWingetLatest.ps1 +++ b/functions/private/Get-WinUtilWingetLatest.ps1 @@ -8,7 +8,7 @@ function Get-WinUtilWingetLatest { # Invoke-WebRequest is notoriously slow when the byte progress is displayed. The following lines disable the progress bar and reset them at the end of the function $PreviousProgressPreference = $ProgressPreference $ProgressPreference = "silentlyContinue" - Try{ + try { # Grabs the latest release of Winget from the Github API for the install process. $response = Invoke-RestMethod -Uri "https://api.github.com/repos/microsoft/Winget-cli/releases/latest" -Method Get -ErrorAction Stop $latestVersion = $response.tag_name #Stores version number of latest release. @@ -19,8 +19,7 @@ function Get-WinUtilWingetLatest { Invoke-WebRequest -Uri $licenseWingetUrl -OutFile $ENV:TEMP\License1.xml # The only pain is that the msixbundle for winget-cli is 246MB. In some situations this can take a bit, with slower connections. Invoke-WebRequest -Uri $assetUrl -OutFile $ENV:TEMP\Microsoft.DesktopAppInstaller.msixbundle - } - Catch{ + } catch { throw [WingetFailedInstall]::new('Failed to get latest Winget release and license') } $ProgressPreference = $PreviousProgressPreference diff --git a/functions/private/Get-WinUtilWingetPrerequisites.ps1 b/functions/private/Get-WinUtilWingetPrerequisites.ps1 index 4949d191..6c886702 100644 --- a/functions/private/Get-WinUtilWingetPrerequisites.ps1 +++ b/functions/private/Get-WinUtilWingetPrerequisites.ps1 @@ -17,13 +17,12 @@ function Get-WinUtilWingetPrerequisites { $fileUIXaml = "https://github.com/microsoft/microsoft-ui-xaml/releases/download/v${versionUIXamlPatch}/Microsoft.UI.Xaml.${versionUIXamlMinor}.x64.appx" # Write-Host "$fileUIXaml" - Try{ + try { Write-Host "Downloading Microsoft.VCLibs Dependency..." Invoke-WebRequest -Uri $fileVCLibs -OutFile $ENV:TEMP\Microsoft.VCLibs.x64.Desktop.appx Write-Host "Downloading Microsoft.UI.Xaml Dependency...`n" Invoke-WebRequest -Uri $fileUIXaml -OutFile $ENV:TEMP\Microsoft.UI.Xaml.x64.appx - } - Catch{ + } catch { throw [WingetFailedInstall]::new('Failed to install prerequsites') } } diff --git a/functions/private/Install-WinUtilChoco.ps1 b/functions/private/Install-WinUtilChoco.ps1 index 24716bb1..37655b9c 100644 --- a/functions/private/Install-WinUtilChoco.ps1 +++ b/functions/private/Install-WinUtilChoco.ps1 @@ -18,8 +18,7 @@ function Install-WinUtilChoco { Set-ExecutionPolicy Bypass -Scope Process -Force; Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) -ErrorAction Stop powershell choco feature enable -n allowGlobalConfirmation - } - Catch { + } catch { Write-Host "===========================================" -Foregroundcolor Red Write-Host "-- Chocolatey failed to install ---" -Foregroundcolor Red Write-Host "===========================================" -Foregroundcolor Red diff --git a/functions/private/Install-WinUtilProgramChoco.ps1 b/functions/private/Install-WinUtilProgramChoco.ps1 index 029398f5..b66c88b9 100644 --- a/functions/private/Install-WinUtilProgramChoco.ps1 +++ b/functions/private/Install-WinUtilProgramChoco.ps1 @@ -33,26 +33,26 @@ function Install-WinUtilProgramChoco { Write-Host "===========================================" Write-Host "-- Configuring Chocolatey pacakages ---" Write-Host "===========================================" - Foreach ($Program in $ProgramsToInstall){ + Foreach ($Program in $ProgramsToInstall) { Write-Progress -Activity "$manage Applications" -Status "$manage $($Program.choco) $($x + 1) of $count" -PercentComplete $($x/$count*100) - if($manage -eq "Installing"){ + if($manage -eq "Installing") { write-host "Starting install of $($Program.choco) with Chocolatey." - try{ + try { $tryUpgrade = $false - $installOutputFilePath = "$env:TEMP\Install-WinUtilProgramChoco.install-command.output.txt" + $installOutputFilePath = "$env:TEMP\Install-WinUtilProgramChoco.install-command.output.txt" New-Item -ItemType File -Path $installOutputFilePath - $chocoInstallStatus = $(Start-Process -FilePath "choco" -ArgumentList "install $($Program.choco) -y" -Wait -PassThru -RedirectStandardOutput $installOutputFilePath).ExitCode + $chocoInstallStatus = $(Start-Process -FilePath "choco" -ArgumentList "install $($Program.choco) -y" -Wait -PassThru -RedirectStandardOutput $installOutputFilePath).ExitCode if(($chocoInstallStatus -eq 0) -AND (Test-Path -Path $installOutputFilePath)) { $keywordsFound = Get-Content -Path $installOutputFilePath | Where-Object {$_ -match "reinstall" -OR $_ -match "already installed"} - if ($keywordsFound) { - $tryUpgrade = $true - } + if ($keywordsFound) { + $tryUpgrade = $true + } } - # TODO: Implement the Upgrade part using 'choco upgrade' command, this will make choco consistent with WinGet, as WinGet tries to Upgrade when you use the install command. - if ($tryUpgrade) { - throw "Automatic Upgrade for Choco isn't implemented yet, a feature to make it consistent with WinGet, the install command using choco simply failed because $($Program.choco) is already installed." - } - if(($chocoInstallStatus -eq 0) -AND ($tryUpgrade -eq $false)){ + # TODO: Implement the Upgrade part using 'choco upgrade' command, this will make choco consistent with WinGet, as WinGet tries to Upgrade when you use the install command. + if ($tryUpgrade) { + throw "Automatic Upgrade for Choco isn't implemented yet, a feature to make it consistent with WinGet, the install command using choco simply failed because $($Program.choco) is already installed." + } + if(($chocoInstallStatus -eq 0) -AND ($tryUpgrade -eq $false)) { Write-Host "$($Program.choco) installed successfully using Chocolatey." $X++ $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value ($x/$count) }) @@ -69,13 +69,13 @@ function Install-WinUtilProgramChoco { } } - if($manage -eq "Uninstalling"){ + if($manage -eq "Uninstalling") { write-host "Starting uninstall of $($Program.choco) with Chocolatey." - try{ - $uninstallOutputFilePath = "$env:TEMP\Install-WinUtilProgramChoco.uninstall-command.output.txt" + try { + $uninstallOutputFilePath = "$env:TEMP\Install-WinUtilProgramChoco.uninstall-command.output.txt" New-Item -ItemType File -Path $uninstallOutputFilePath - $chocoUninstallStatus = $(Start-Process -FilePath "choco" -ArgumentList "uninstall $($Program.choco) -y" -Wait -PassThru).ExitCode - if($chocoUninstallStatus -eq 0){ + $chocoUninstallStatus = $(Start-Process -FilePath "choco" -ArgumentList "uninstall $($Program.choco) -y" -Wait -PassThru).ExitCode + if($chocoUninstallStatus -eq 0) { Write-Host "$($Program.choco) uninstalled successfully using Chocolatey." $x++ $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value ($x/$count) }) @@ -90,13 +90,13 @@ function Install-WinUtilProgramChoco { $x++ $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Error" -value ($x/$count) }) } - } + } } Write-Progress -Activity "$manage Applications" -Status "Finished" -Completed # Cleanup leftovers files - if(Test-Path -Path $installOutputFilePath){ Remove-Item -Path $installOutputFilePath } - if(Test-Path -Path $uninstallOutputFilePath){ Remove-Item -Path $uninstallOutputFilePath } + if(Test-Path -Path $installOutputFilePath) { Remove-Item -Path $installOutputFilePath } + if(Test-Path -Path $uninstallOutputFilePath) { Remove-Item -Path $uninstallOutputFilePath } return; } diff --git a/functions/private/Install-WinUtilProgramWinget.ps1 b/functions/private/Install-WinUtilProgramWinget.ps1 index 81114e2f..d331547b 100644 --- a/functions/private/Install-WinUtilProgramWinget.ps1 +++ b/functions/private/Install-WinUtilProgramWinget.ps1 @@ -30,8 +30,7 @@ Function Install-WinUtilProgramWinget { Write-Host "-- Configuring winget packages ---" Write-Host "===========================================" for ($i = 0; $i -lt $count; $i++) { - $Program = $ProgramsToInstall[$i] - $failedPackages = @() + $Program = $ProgramsToInstall[$i]$failedPackages = @() Write-Progress -Activity "$manage Applications" -Status "$manage $($Program.winget) $($i + 1) of $count" -PercentComplete $((($i + 1)/$count) * 100) if($manage -eq "Installing") { # Install package via ID, if it fails try again with different scope and then with an unelevated prompt. @@ -106,8 +105,7 @@ Function Install-WinUtilProgramWinget { $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Error" }) } $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -value ($x/$count) }) - } - else { + } else { throw "[Install-WinUtilProgramWinget] Invalid Value for Parameter 'manage', Provided Value is: $manage" } } diff --git a/functions/private/Install-WinUtilWinget.ps1 b/functions/private/Install-WinUtilWinget.ps1 index 881a138f..dd561118 100644 --- a/functions/private/Install-WinUtilWinget.ps1 +++ b/functions/private/Install-WinUtilWinget.ps1 @@ -9,7 +9,7 @@ function Install-WinUtilWinget { #> $isWingetInstalled = Test-WinUtilPackageManager -winget - Try { + try { if ($isWingetInstalled -eq "installed") { Write-Host "`nWinget is already installed.`r" -ForegroundColor Green return @@ -21,7 +21,7 @@ function Install-WinUtilWinget { # Gets the computer's information - if ($null -eq $sync.ComputerInfo){ + if ($null -eq $sync.ComputerInfo) { $ComputerInfo = Get-ComputerInfo -ErrorAction Stop } else { $ComputerInfo = $sync.ComputerInfo @@ -41,8 +41,8 @@ function Install-WinUtilWinget { Get-WinUtilWingetLatest Write-Host "Installing Winget w/ Prerequsites`r" Add-AppxProvisionedPackage -Online -PackagePath $ENV:TEMP\Microsoft.DesktopAppInstaller.msixbundle -DependencyPackagePath $ENV:TEMP\Microsoft.VCLibs.x64.Desktop.appx, $ENV:TEMP\Microsoft.UI.Xaml.x64.appx -LicensePath $ENV:TEMP\License1.xml - Write-Host "Manually adding Winget Sources, from Winget CDN." - Add-AppxPackage -Path https://cdn.winget.microsoft.com/cache/source.msix #Seems some installs of Winget don't add the repo source, this should makes sure that it's installed every time. + Write-Host "Manually adding Winget Sources, from Winget CDN." + Add-AppxPackage -Path https://cdn.winget.microsoft.com/cache/source.msix #Seems some installs of Winget don't add the repo source, this should makes sure that it's installed every time. Write-Host "Winget Installed" -ForegroundColor Green Write-Host "Enabling NuGet and Module..." Install-PackageProvider -Name NuGet -Force @@ -50,17 +50,17 @@ function Install-WinUtilWinget { # Winget only needs a refresh of the environment variables to be used. Write-Output "Refreshing Environment Variables...`n" $ENV:PATH = [System.Environment]::GetEnvironmentVariable("Path", "Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path", "User") - } Catch { + } catch { Write-Host "Failure detected while installing via GitHub method. Continuing with Chocolatey method as fallback." -ForegroundColor Red # In case install fails via GitHub method. - Try { + try { # Install Choco if not already present Install-WinUtilChoco Start-Process -Verb runas -FilePath powershell.exe -ArgumentList "choco install winget-cli" Write-Host "Winget Installed" -ForegroundColor Green Write-Output "Refreshing Environment Variables...`n" $ENV:PATH = [System.Environment]::GetEnvironmentVariable("Path", "Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path", "User") - } Catch { + } catch { throw [WingetFailedInstall]::new('Failed to install!') } } diff --git a/functions/private/Invoke-MicroWin-Helper.ps1 b/functions/private/Invoke-MicroWin-Helper.ps1 index 76efe85d..d0cd1c9e 100644 --- a/functions/private/Invoke-MicroWin-Helper.ps1 +++ b/functions/private/Invoke-MicroWin-Helper.ps1 @@ -1,634 +1,624 @@ function Test-CompatibleImage() { - <# - .SYNOPSIS - Checks the version of a Windows image and determines whether or not it is compatible with a specific feature depending on a desired version + <# + .SYNOPSIS + Checks the version of a Windows image and determines whether or not it is compatible with a specific feature depending on a desired version - .PARAMETER Name - imgVersion - The version of the Windows image - desiredVersion - The version to compare the image version with - #> + .PARAMETER Name + imgVersion - The version of the Windows image + desiredVersion - The version to compare the image version with + #> - param - ( - [Parameter(Mandatory, position=0)] - [string]$imgVersion, + param + ( + [Parameter(Mandatory, position=0)] + [string]$imgVersion, - [Parameter(Mandatory, position=1)] - [Version]$desiredVersion - ) + [Parameter(Mandatory, position=1)] + [Version]$desiredVersion + ) - try { - $version = [Version]$imgVersion - return $version -ge $desiredVersion - } catch { - return $False - } + try { + $version = [Version]$imgVersion + return $version -ge $desiredVersion + } catch { + return $False + } } -function Remove-Features([switch] $dumpFeatures = $false, [switch] $keepDefender = $false) { - <# - .SYNOPSIS - Removes certain features from ISO image +function Remove-Features([switch]$dumpFeatures = $false, [switch]$keepDefender = $false) { + <# + .SYNOPSIS + Removes certain features from ISO image - .PARAMETER Name - dumpFeatures - Dumps all features found in the ISO into a file called allfeaturesdump.txt. This file can be examined and used to decide what to remove. - keepDefender - Should Defender be removed from the ISO? + .PARAMETER Name + dumpFeatures - Dumps all features found in the ISO into a file called allfeaturesdump.txt. This file can be examined and used to decide what to remove. + keepDefender - Should Defender be removed from the ISO? - .EXAMPLE - Remove-Features -keepDefender:$false - #> - try { - $featlist = (Get-WindowsOptionalFeature -Path $scratchDir).FeatureName - if ($dumpFeatures) { - $featlist > allfeaturesdump.txt - } + .EXAMPLE + Remove-Features -keepDefender:$false + #> + try { + $featlist = (Get-WindowsOptionalFeature -Path $scratchDir).FeatureName + if ($dumpFeatures) { + $featlist > allfeaturesdump.txt + } - $featlist = $featlist | Where-Object { - $_ -NotLike "*Printing*" -AND - $_ -NotLike "*TelnetClient*" -AND - $_ -NotLike "*PowerShell*" -AND - $_ -NotLike "*NetFx*" -AND - $_ -NotLike "*Media*" -AND - $_ -NotLike "*NFS*" - } + $featlist = $featlist | Where-Object { + $_ -NotLike "*Printing*" -AND + $_ -NotLike "*TelnetClient*" -AND + $_ -NotLike "*PowerShell*" -AND + $_ -NotLike "*NetFx*" -AND + $_ -NotLike "*Media*" -AND + $_ -NotLike "*NFS*" + } - if ($keepDefender) { $featlist = $featlist | Where-Object { $_ -NotLike "*Defender*" }} + if ($keepDefender) { $featlist = $featlist | Where-Object { $_ -NotLike "*Defender*" }} - foreach($feature in $featlist) { - $status = "Removing feature $feature" - Write-Progress -Activity "Removing features" -Status $status -PercentComplete ($counter++/$featlist.Count*100) - Write-Debug "Removing feature $feature" - Disable-WindowsOptionalFeature -Path "$scratchDir" -FeatureName $feature -Remove -ErrorAction SilentlyContinue -NoRestart - } - Write-Progress -Activity "Removing features" -Status "Ready" -Completed - Write-Host "You can re-enable the disabled features at any time, using either Windows Update or the SxS folder in \Sources." - } - catch { - Write-Host "Unable to get information about the features. MicroWin processing will continue, but features will not be processed" - } + foreach($feature in $featlist) { + $status = "Removing feature $feature" + Write-Progress -Activity "Removing features" -Status $status -PercentComplete ($counter++/$featlist.Count*100) + Write-Debug "Removing feature $feature" + Disable-WindowsOptionalFeature -Path "$scratchDir" -FeatureName $feature -Remove -ErrorAction SilentlyContinue -NoRestart + } + Write-Progress -Activity "Removing features" -Status "Ready" -Completed + Write-Host "You can re-enable the disabled features at any time, using either Windows Update or the SxS folder in \Sources." + } catch { + Write-Host "Unable to get information about the features. MicroWin processing will continue, but features will not be processed" + } } function Remove-Packages { - try { - $pkglist = (Get-WindowsPackage -Path "$scratchDir").PackageName + try { + $pkglist = (Get-WindowsPackage -Path "$scratchDir").PackageName - $pkglist = $pkglist | Where-Object { - $_ -NotLike "*ApplicationModel*" -AND - $_ -NotLike "*indows-Client-LanguagePack*" -AND - $_ -NotLike "*LanguageFeatures-Basic*" -AND - $_ -NotLike "*Package_for_ServicingStack*" -AND - $_ -NotLike "*.NET*" -AND - $_ -NotLike "*Store*" -AND - $_ -NotLike "*VCLibs*" -AND - $_ -NotLike "*AAD.BrokerPlugin", - $_ -NotLike "*LockApp*" -AND - $_ -NotLike "*Notepad*" -AND - $_ -NotLike "*immersivecontrolpanel*" -AND - $_ -NotLike "*ContentDeliveryManager*" -AND - $_ -NotLike "*PinningConfirMationDialog*" -AND - $_ -NotLike "*SecHealthUI*" -AND - $_ -NotLike "*SecureAssessmentBrowser*" -AND - $_ -NotLike "*PrintDialog*" -AND - $_ -NotLike "*AssignedAccessLockApp*" -AND - $_ -NotLike "*OOBENetworkConnectionFlow*" -AND - $_ -NotLike "*Apprep.ChxApp*" -AND - $_ -NotLike "*CBS*" -AND - $_ -NotLike "*OOBENetworkCaptivePortal*" -AND - $_ -NotLike "*PeopleExperienceHost*" -AND - $_ -NotLike "*ParentalControls*" -AND - $_ -NotLike "*Win32WebViewHost*" -AND - $_ -NotLike "*InputApp*" -AND - $_ -NotLike "*AccountsControl*" -AND - $_ -NotLike "*AsyncTextService*" -AND - $_ -NotLike "*CapturePicker*" -AND - $_ -NotLike "*CredDialogHost*" -AND - $_ -NotLike "*BioEnrollMent*" -AND - $_ -NotLike "*ShellExperienceHost*" -AND - $_ -NotLike "*DesktopAppInstaller*" -AND - $_ -NotLike "*WebMediaExtensions*" -AND - $_ -NotLike "*WMIC*" -AND - $_ -NotLike "*UI.XaML*" - } + $pkglist = $pkglist | Where-Object { + $_ -NotLike "*ApplicationModel*" -AND + $_ -NotLike "*indows-Client-LanguagePack*" -AND + $_ -NotLike "*LanguageFeatures-Basic*" -AND + $_ -NotLike "*Package_for_ServicingStack*" -AND + $_ -NotLike "*.NET*" -AND + $_ -NotLike "*Store*" -AND + $_ -NotLike "*VCLibs*" -AND + $_ -NotLike "*AAD.BrokerPlugin", + $_ -NotLike "*LockApp*" -AND + $_ -NotLike "*Notepad*" -AND + $_ -NotLike "*immersivecontrolpanel*" -AND + $_ -NotLike "*ContentDeliveryManager*" -AND + $_ -NotLike "*PinningConfirMationDialog*" -AND + $_ -NotLike "*SecHealthUI*" -AND + $_ -NotLike "*SecureAssessmentBrowser*" -AND + $_ -NotLike "*PrintDialog*" -AND + $_ -NotLike "*AssignedAccessLockApp*" -AND + $_ -NotLike "*OOBENetworkConnectionFlow*" -AND + $_ -NotLike "*Apprep.ChxApp*" -AND + $_ -NotLike "*CBS*" -AND + $_ -NotLike "*OOBENetworkCaptivePortal*" -AND + $_ -NotLike "*PeopleExperienceHost*" -AND + $_ -NotLike "*ParentalControls*" -AND + $_ -NotLike "*Win32WebViewHost*" -AND + $_ -NotLike "*InputApp*" -AND + $_ -NotLike "*AccountsControl*" -AND + $_ -NotLike "*AsyncTextService*" -AND + $_ -NotLike "*CapturePicker*" -AND + $_ -NotLike "*CredDialogHost*" -AND + $_ -NotLike "*BioEnrollMent*" -AND + $_ -NotLike "*ShellExperienceHost*" -AND + $_ -NotLike "*DesktopAppInstaller*" -AND + $_ -NotLike "*WebMediaExtensions*" -AND + $_ -NotLike "*WMIC*" -AND + $_ -NotLike "*UI.XaML*" + } - foreach ($pkg in $pkglist) { - try { - $status = "Removing $pkg" - Write-Progress -Activity "Removing Apps" -Status $status -PercentComplete ($counter++/$pkglist.Count*100) - Remove-WindowsPackage -Path "$scratchDir" -PackageName $pkg -NoRestart -ErrorAction SilentlyContinue - } - catch { - # This can happen if the package that is being removed is a permanent one, like FodMetadata - Write-Host "Could not remove OS package $($pkg)" - continue - } - } - Write-Progress -Activity "Removing Apps" -Status "Ready" -Completed - } - catch { - Write-Host "Unable to get information about the packages. MicroWin processing will continue, but packages will not be processed" - } + foreach ($pkg in $pkglist) { + try { + $status = "Removing $pkg" + Write-Progress -Activity "Removing Apps" -Status $status -PercentComplete ($counter++/$pkglist.Count*100) + Remove-WindowsPackage -Path "$scratchDir" -PackageName $pkg -NoRestart -ErrorAction SilentlyContinue + } catch { + # This can happen if the package that is being removed is a permanent one, like FodMetadata + Write-Host "Could not remove OS package $($pkg)" + continue + } + } + Write-Progress -Activity "Removing Apps" -Status "Ready" -Completed + } catch { + Write-Host "Unable to get information about the packages. MicroWin processing will continue, but packages will not be processed" + } } -function Remove-ProvisionedPackages([switch] $keepSecurity = $false) { - <# - .SYNOPSIS - Removes AppX packages from a Windows image during MicroWin processing +function Remove-ProvisionedPackages([switch]$keepSecurity = $false) { + <# + .SYNOPSIS + Removes AppX packages from a Windows image during MicroWin processing - .PARAMETER Name - keepSecurity - Boolean that determines whether to keep "Microsoft.SecHealthUI" (Windows Security) in the Windows image + .PARAMETER Name + keepSecurity - Boolean that determines whether to keep "Microsoft.SecHealthUI" (Windows Security) in the Windows image - .EXAMPLE - Remove-ProvisionedPackages -keepSecurity:$false - #> - $appxProvisionedPackages = Get-AppxProvisionedPackage -Path "$($scratchDir)" | Where-Object { - $_.PackageName -NotLike "*AppInstaller*" -AND - $_.PackageName -NotLike "*Store*" -and - $_.PackageName -NotLike "*dism*" -and - $_.PackageName -NotLike "*Foundation*" -and - $_.PackageName -NotLike "*FodMetadata*" -and - $_.PackageName -NotLike "*LanguageFeatures*" -and - $_.PackageName -NotLike "*Notepad*" -and - $_.PackageName -NotLike "*Printing*" -and - $_.PackageName -NotLike "*Wifi*" -and - $_.PackageName -NotLike "*Foundation*" - } + .EXAMPLE + Remove-ProvisionedPackages -keepSecurity:$false + #> + $appxProvisionedPackages = Get-AppxProvisionedPackage -Path "$($scratchDir)" | Where-Object { + $_.PackageName -NotLike "*AppInstaller*" -AND + $_.PackageName -NotLike "*Store*" -and + $_.PackageName -NotLike "*dism*" -and + $_.PackageName -NotLike "*Foundation*" -and + $_.PackageName -NotLike "*FodMetadata*" -and + $_.PackageName -NotLike "*LanguageFeatures*" -and + $_.PackageName -NotLike "*Notepad*" -and + $_.PackageName -NotLike "*Printing*" -and + $_.PackageName -NotLike "*Wifi*" -and + $_.PackageName -NotLike "*Foundation*" + } - if ($?) { - if ($keepSecurity) { $appxProvisionedPackages = $appxProvisionedPackages | Where-Object { $_.PackageName -NotLike "*SecHealthUI*" }} - $counter = 0 - foreach ($appx in $appxProvisionedPackages) { - $status = "Removing Provisioned $($appx.PackageName)" - Write-Progress -Activity "Removing Provisioned Apps" -Status $status -PercentComplete ($counter++/$appxProvisionedPackages.Count*100) - try { - Remove-AppxProvisionedPackage -Path $scratchDir -PackageName $appx.PackageName -ErrorAction SilentlyContinue - } - catch { - Write-Host "Application $($appx.PackageName) could not be removed" - continue - } - } - Write-Progress -Activity "Removing Provisioned Apps" -Status "Ready" -Completed - } - else { - Write-Host "Could not get Provisioned App information. Skipping process..." - } + if ($?) { + if ($keepSecurity) { $appxProvisionedPackages = $appxProvisionedPackages | Where-Object { $_.PackageName -NotLike "*SecHealthUI*" }} + $counter = 0 + foreach ($appx in $appxProvisionedPackages) { + $status = "Removing Provisioned $($appx.PackageName)" + Write-Progress -Activity "Removing Provisioned Apps" -Status $status -PercentComplete ($counter++/$appxProvisionedPackages.Count*100) + try { + Remove-AppxProvisionedPackage -Path $scratchDir -PackageName $appx.PackageName -ErrorAction SilentlyContinue + } catch { + Write-Host "Application $($appx.PackageName) could not be removed" + continue + } + } + Write-Progress -Activity "Removing Provisioned Apps" -Status "Ready" -Completed + } else { + Write-Host "Could not get Provisioned App information. Skipping process..." + } } -function Copy-ToUSB([string] $fileToCopy) { - foreach ($volume in Get-Volume) { - if ($volume -and $volume.FileSystemLabel -ieq "ventoy") { - $destinationPath = "$($volume.DriveLetter):\" - #Copy-Item -Path $fileToCopy -Destination $destinationPath -Force - # Get the total size of the file - $totalSize = (Get-Item $fileToCopy).length +function Copy-ToUSB([string]$fileToCopy) { + foreach ($volume in Get-Volume) { + if ($volume -and $volume.FileSystemLabel -ieq "ventoy") { + $destinationPath = "$($volume.DriveLetter):\" + #Copy-Item -Path $fileToCopy -Destination $destinationPath -Force + # Get the total size of the file + $totalSize = (Get-Item $fileToCopy).length - Copy-Item -Path $fileToCopy -Destination $destinationPath -Verbose -Force -Recurse -Container -PassThru | - ForEach-Object { - # Calculate the percentage completed - $completed = ($_.BytesTransferred / $totalSize) * 100 + Copy-Item -Path $fileToCopy -Destination $destinationPath -Verbose -Force -Recurse -Container -PassThru | + ForEach-Object { + # Calculate the percentage completed + $completed = ($_.BytesTransferred / $totalSize) * 100 - # Display the progress bar - Write-Progress -Activity "Copying File" -Status "Progress" -PercentComplete $completed -CurrentOperation ("{0:N2} MB / {1:N2} MB" -f ($_.BytesTransferred / 1MB), ($totalSize / 1MB)) - } + # Display the progress bar + Write-Progress -Activity "Copying File" -Status "Progress" -PercentComplete $completed -CurrentOperation ("{0:N2} MB / {1:N2} MB" -f ($_.BytesTransferred / 1MB), ($totalSize / 1MB)) + } - Write-Host "File copied to Ventoy drive $($volume.DriveLetter)" - return - } - } - Write-Host "Ventoy USB Key is not inserted" + Write-Host "File copied to Ventoy drive $($volume.DriveLetter)" + return + } + } + Write-Host "Ventoy USB Key is not inserted" } -function Remove-FileOrDirectory([string] $pathToDelete, [string] $mask = "", [switch] $Directory = $false) { - if(([string]::IsNullOrEmpty($pathToDelete))) { return } - if (-not (Test-Path -Path "$($pathToDelete)")) { return } +function Remove-FileOrDirectory([string]$pathToDelete, [string]$mask = "", [switch]$Directory = $false) { + if(([string]::IsNullOrEmpty($pathToDelete))) { return } + if (-not (Test-Path -Path "$($pathToDelete)")) { return } - $yesNo = Get-LocalizedYesNo - Write-Host "[INFO] In Your local takeown expects '$($yesNo[0])' as a Yes answer." + $yesNo = Get-LocalizedYesNo + Write-Host "[INFO] In Your local takeown expects '$($yesNo[0])' as a Yes answer." - # Specify the path to the directory - # $directoryPath = "$($scratchDir)\Windows\System32\LogFiles\WMI\RtBackup" - # takeown /a /r /d $yesNo[0] /f "$($directoryPath)" > $null - # icacls "$($directoryPath)" /q /c /t /reset > $null - # icacls $directoryPath /setowner "*S-1-5-32-544" - # icacls $directoryPath /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q - # Remove-Item -Path $directoryPath -Recurse -Force + # Specify the path to the directory + # $directoryPath = "$($scratchDir)\Windows\System32\LogFiles\WMI\RtBackup" + # takeown /a /r /d $yesNo[0] /f "$($directoryPath)" > $null + # icacls "$($directoryPath)" /q /c /t /reset > $null + # icacls $directoryPath /setowner "*S-1-5-32-544" + # icacls $directoryPath /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q + # Remove-Item -Path $directoryPath -Recurse -Force - # # Grant full control to BUILTIN\Administrators using icacls - # $directoryPath = "$($scratchDir)\Windows\System32\WebThreatDefSvc" - # takeown /a /r /d $yesNo[0] /f "$($directoryPath)" > $null - # icacls "$($directoryPath)" /q /c /t /reset > $null - # icacls $directoryPath /setowner "*S-1-5-32-544" - # icacls $directoryPath /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q - # Remove-Item -Path $directoryPath -Recurse -Force + # # Grant full control to BUILTIN\Administrators using icacls + # $directoryPath = "$($scratchDir)\Windows\System32\WebThreatDefSvc" + # takeown /a /r /d $yesNo[0] /f "$($directoryPath)" > $null + # icacls "$($directoryPath)" /q /c /t /reset > $null + # icacls $directoryPath /setowner "*S-1-5-32-544" + # icacls $directoryPath /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q + # Remove-Item -Path $directoryPath -Recurse -Force - $itemsToDelete = [System.Collections.ArrayList]::new() + $itemsToDelete = [System.Collections.ArrayList]::new() - if ($mask -eq "") { - Write-Debug "Adding $($pathToDelete) to array." - [void]$itemsToDelete.Add($pathToDelete) - } - else { - Write-Debug "Adding $($pathToDelete) to array and mask is $($mask)" - if ($Directory) { $itemsToDelete = Get-ChildItem $pathToDelete -Include $mask -Recurse -Directory } - else { $itemsToDelete = Get-ChildItem $pathToDelete -Include $mask -Recurse } - } + if ($mask -eq "") { + Write-Debug "Adding $($pathToDelete) to array." + [void]$itemsToDelete.Add($pathToDelete) + } else { + Write-Debug "Adding $($pathToDelete) to array and mask is $($mask)" + if ($Directory) { $itemsToDelete = Get-ChildItem $pathToDelete -Include $mask -Recurse -Directory } else { $itemsToDelete = Get-ChildItem $pathToDelete -Include $mask -Recurse } + } - foreach($itemToDelete in $itemsToDelete) { - $status = "Deleting $($itemToDelete)" - Write-Progress -Activity "Removing Items" -Status $status -PercentComplete ($counter++/$itemsToDelete.Count*100) + foreach($itemToDelete in $itemsToDelete) { + $status = "Deleting $($itemToDelete)" + Write-Progress -Activity "Removing Items" -Status $status -PercentComplete ($counter++/$itemsToDelete.Count*100) - if (Test-Path -Path "$($itemToDelete)" -PathType Container) { - $status = "Deleting directory: $($itemToDelete)" + if (Test-Path -Path "$($itemToDelete)" -PathType Container) { + $status = "Deleting directory: $($itemToDelete)" - takeown /r /d $yesNo[0] /a /f "$($itemToDelete)" - icacls "$($itemToDelete)" /q /c /t /reset - icacls $itemToDelete /setowner "*S-1-5-32-544" - icacls $itemToDelete /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q - Remove-Item -Force -Recurse "$($itemToDelete)" - } - elseif (Test-Path -Path "$($itemToDelete)" -PathType Leaf) { - $status = "Deleting file: $($itemToDelete)" + takeown /r /d $yesNo[0] /a /f "$($itemToDelete)" + icacls "$($itemToDelete)" /q /c /t /reset + icacls $itemToDelete /setowner "*S-1-5-32-544" + icacls $itemToDelete /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q + Remove-Item -Force -Recurse "$($itemToDelete)" + } + elseif (Test-Path -Path "$($itemToDelete)" -PathType Leaf) { + $status = "Deleting file: $($itemToDelete)" - takeown /a /f "$($itemToDelete)" - icacls "$($itemToDelete)" /q /c /t /reset - icacls "$($itemToDelete)" /setowner "*S-1-5-32-544" - icacls "$($itemToDelete)" /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q - Remove-Item -Force "$($itemToDelete)" - } - } - Write-Progress -Activity "Removing Items" -Status "Ready" -Completed + takeown /a /f "$($itemToDelete)" + icacls "$($itemToDelete)" /q /c /t /reset + icacls "$($itemToDelete)" /setowner "*S-1-5-32-544" + icacls "$($itemToDelete)" /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q + Remove-Item -Force "$($itemToDelete)" + } + } + Write-Progress -Activity "Removing Items" -Status "Ready" -Completed } function New-Unattend { - # later if we wont to remove even more bloat EU requires MS to remove everything from English(world) - # Below is an example how to do it we probably should create a drop down with common locals - # - # - # - # - # en-US - # - # en-US - # en-US - # en-US - # en-US - # - # + # later if we wont to remove even more bloat EU requires MS to remove everything from English(world) + # Below is an example how to do it we probably should create a drop down with common locals + # + # + # + # + # en-US + # + # en-US + # en-US + # en-US + # en-US + # + # - # - # - # - # en-US - # en-US - # en-US - # en-US - # - # - # using here string to embedd unattend - # - # 1 - # net user administrator /active:yes - # + # + # + # + # en-US + # en-US + # en-US + # en-US + # + # + # using here string to embedd unattend + # + # 1 + # net user administrator /active:yes + # - # this section doesn't work in win10/???? -# -# -# 0 -# -# -# false -# + # this section doesn't work in win10/???? +# +# +# 0 +# +# +# false +# # - $unattend = @' - - - <#REPLACEME#> - - - - - 1 - CMD /C echo LAU GG>C:\Windows\LogAuditUser.txt - StartMenu - - - - - - - - true - false - false - true - true - true - 3 - - - - 1 - cmd.exe /c echo 23>c:\windows\csup.txt - - - 2 - CMD /C echo GG>C:\Windows\LogOobeSystem.txt - - - 3 - powershell -ExecutionPolicy Bypass -File c:\windows\FirstStartup.ps1 - - - - - + $unattend = @' + + + <#REPLACEME#> + + + + + 1 + CMD /C echo LAU GG>C:\Windows\LogAuditUser.txt + StartMenu + + + + + + + + true + false + false + true + true + true + 3 + + + + 1 + cmd.exe /c echo 23>c:\windows\csup.txt + + + 2 + CMD /C echo GG>C:\Windows\LogOobeSystem.txt + + + 3 + powershell -ExecutionPolicy Bypass -File c:\windows\FirstStartup.ps1 + + + + + '@ - $specPass = @' + $specPass = @' - - 0 - - - false - - + + 0 + + + false + + '@ - if ((Test-CompatibleImage $imgVersion $([System.Version]::new(10,0,22000,1))) -eq $false) { - # Replace the placeholder text with an empty string to make it valid for Windows 10 Setup - $unattend = $unattend.Replace("<#REPLACEME#>", "").Trim() - } - else { - # Replace the placeholder text with the Specialize pass - $unattend = $unattend.Replace("<#REPLACEME#>", $specPass).Trim() - } - $unattend | Out-File -FilePath "$env:temp\unattend.xml" -Force -Encoding utf8 + if ((Test-CompatibleImage $imgVersion $([System.Version]::new(10,0,22000,1))) -eq $false) { + # Replace the placeholder text with an empty string to make it valid for Windows 10 Setup + $unattend = $unattend.Replace("<#REPLACEME#>", "").Trim() + } else { + # Replace the placeholder text with the Specialize pass + $unattend = $unattend.Replace("<#REPLACEME#>", $specPass).Trim() + } + $unattend | Out-File -FilePath "$env:temp\unattend.xml" -Force -Encoding utf8 } function New-CheckInstall { - # using here string to embedd firstrun - $checkInstall = @' - @echo off - if exist "C:\windows\cpu.txt" ( - echo C:\windows\cpu.txt exists - ) else ( - echo C:\windows\cpu.txt does not exist - ) - if exist "C:\windows\SerialNumber.txt" ( - echo C:\windows\SerialNumber.txt exists - ) else ( - echo C:\windows\SerialNumber.txt does not exist - ) - if exist "C:\unattend.xml" ( - echo C:\unattend.xml exists - ) else ( - echo C:\unattend.xml does not exist - ) - if exist "C:\Windows\Setup\Scripts\SetupComplete.cmd" ( - echo C:\Windows\Setup\Scripts\SetupComplete.cmd exists - ) else ( - echo C:\Windows\Setup\Scripts\SetupComplete.cmd does not exist - ) - if exist "C:\Windows\Panther\unattend.xml" ( - echo C:\Windows\Panther\unattend.xml exists - ) else ( - echo C:\Windows\Panther\unattend.xml does not exist - ) - if exist "C:\Windows\System32\Sysprep\unattend.xml" ( - echo C:\Windows\System32\Sysprep\unattend.xml exists - ) else ( - echo C:\Windows\System32\Sysprep\unattend.xml does not exist - ) - if exist "C:\Windows\FirstStartup.ps1" ( - echo C:\Windows\FirstStartup.ps1 exists - ) else ( - echo C:\Windows\FirstStartup.ps1 does not exist - ) - if exist "C:\Windows\winutil.ps1" ( - echo C:\Windows\winutil.ps1 exists - ) else ( - echo C:\Windows\winutil.ps1 does not exist - ) - if exist "C:\Windows\LogSpecialize.txt" ( - echo C:\Windows\LogSpecialize.txt exists - ) else ( - echo C:\Windows\LogSpecialize.txt does not exist - ) - if exist "C:\Windows\LogAuditUser.txt" ( - echo C:\Windows\LogAuditUser.txt exists - ) else ( - echo C:\Windows\LogAuditUser.txt does not exist - ) - if exist "C:\Windows\LogOobeSystem.txt" ( - echo C:\Windows\LogOobeSystem.txt exists - ) else ( - echo C:\Windows\LogOobeSystem.txt does not exist - ) - if exist "c:\windows\csup.txt" ( - echo c:\windows\csup.txt exists - ) else ( - echo c:\windows\csup.txt does not exist - ) - if exist "c:\windows\LogFirstRun.txt" ( - echo c:\windows\LogFirstRun.txt exists - ) else ( - echo c:\windows\LogFirstRun.txt does not exist - ) + # using here string to embedd firstrun + $checkInstall = @' + @echo off + if exist "C:\windows\cpu.txt" ( + echo C:\windows\cpu.txt exists + ) else ( + echo C:\windows\cpu.txt does not exist + ) + if exist "C:\windows\SerialNumber.txt" ( + echo C:\windows\SerialNumber.txt exists + ) else ( + echo C:\windows\SerialNumber.txt does not exist + ) + if exist "C:\unattend.xml" ( + echo C:\unattend.xml exists + ) else ( + echo C:\unattend.xml does not exist + ) + if exist "C:\Windows\Setup\Scripts\SetupComplete.cmd" ( + echo C:\Windows\Setup\Scripts\SetupComplete.cmd exists + ) else ( + echo C:\Windows\Setup\Scripts\SetupComplete.cmd does not exist + ) + if exist "C:\Windows\Panther\unattend.xml" ( + echo C:\Windows\Panther\unattend.xml exists + ) else ( + echo C:\Windows\Panther\unattend.xml does not exist + ) + if exist "C:\Windows\System32\Sysprep\unattend.xml" ( + echo C:\Windows\System32\Sysprep\unattend.xml exists + ) else ( + echo C:\Windows\System32\Sysprep\unattend.xml does not exist + ) + if exist "C:\Windows\FirstStartup.ps1" ( + echo C:\Windows\FirstStartup.ps1 exists + ) else ( + echo C:\Windows\FirstStartup.ps1 does not exist + ) + if exist "C:\Windows\winutil.ps1" ( + echo C:\Windows\winutil.ps1 exists + ) else ( + echo C:\Windows\winutil.ps1 does not exist + ) + if exist "C:\Windows\LogSpecialize.txt" ( + echo C:\Windows\LogSpecialize.txt exists + ) else ( + echo C:\Windows\LogSpecialize.txt does not exist + ) + if exist "C:\Windows\LogAuditUser.txt" ( + echo C:\Windows\LogAuditUser.txt exists + ) else ( + echo C:\Windows\LogAuditUser.txt does not exist + ) + if exist "C:\Windows\LogOobeSystem.txt" ( + echo C:\Windows\LogOobeSystem.txt exists + ) else ( + echo C:\Windows\LogOobeSystem.txt does not exist + ) + if exist "c:\windows\csup.txt" ( + echo c:\windows\csup.txt exists + ) else ( + echo c:\windows\csup.txt does not exist + ) + if exist "c:\windows\LogFirstRun.txt" ( + echo c:\windows\LogFirstRun.txt exists + ) else ( + echo c:\windows\LogFirstRun.txt does not exist + ) '@ - $checkInstall | Out-File -FilePath "$env:temp\checkinstall.cmd" -Force -Encoding Ascii + $checkInstall | Out-File -FilePath "$env:temp\checkinstall.cmd" -Force -Encoding Ascii } function New-FirstRun { - # using here string to embedd firstrun - $firstRun = @' - # Set the global error action preference to continue - $ErrorActionPreference = "Continue" - function Remove-RegistryValue { - param ( - [Parameter(Mandatory = $true)] - [string]$RegistryPath, + # using here string to embedd firstrun + $firstRun = @' + # Set the global error action preference to continue + $ErrorActionPreference = "Continue" + function Remove-RegistryValue { + param ( + [Parameter(Mandatory = $true)] + [string]$RegistryPath, - [Parameter(Mandatory = $true)] - [string]$ValueName - ) + [Parameter(Mandatory = $true)] + [string]$ValueName + ) - # Check if the registry path exists - if (Test-Path -Path $RegistryPath) { - $registryValue = Get-ItemProperty -Path $RegistryPath -Name $ValueName -ErrorAction SilentlyContinue + # Check if the registry path exists + if (Test-Path -Path $RegistryPath) { + $registryValue = Get-ItemProperty -Path $RegistryPath -Name $ValueName -ErrorAction SilentlyContinue - # Check if the registry value exists - if ($registryValue) { - # Remove the registry value - Remove-ItemProperty -Path $RegistryPath -Name $ValueName -Force - Write-Host "Registry value '$ValueName' removed from '$RegistryPath'." - } - else { - Write-Host "Registry value '$ValueName' not found in '$RegistryPath'." - } - } - else { - Write-Host "Registry path '$RegistryPath' not found." - } - } + # Check if the registry value exists + if ($registryValue) { + # Remove the registry value + Remove-ItemProperty -Path $RegistryPath -Name $ValueName -Force + Write-Host "Registry value '$ValueName' removed from '$RegistryPath'." + } else { + Write-Host "Registry value '$ValueName' not found in '$RegistryPath'." + } + } else { + Write-Host "Registry path '$RegistryPath' not found." + } + } - function Stop-UnnecessaryServices { - $servicesToExclude = @( - "AudioSrv", - "AudioEndpointBuilder", - "BFE", - "BITS", - "BrokerInfrastructure", - "CDPSvc", - "CDPUserSvc_dc2a4", - "CoreMessagingRegistrar", - "CryptSvc", - "DPS", - "DcomLaunch", - "Dhcp", - "DispBrokerDesktopSvc", - "Dnscache", - "DoSvc", - "DusmSvc", - "EventLog", - "EventSystem", - "FontCache", - "LSM", - "LanmanServer", - "LanmanWorkstation", - "MapsBroker", - "MpsSvc", - "OneSyncSvc_dc2a4", - "Power", - "ProfSvc", - "RpcEptMapper", - "RpcSs", - "SCardSvr", - "SENS", - "SamSs", - "Schedule", - "SgrmBroker", - "ShellHWDetection", - "Spooler", - "SysMain", - "SystemEventsBroker", - "TextInputManagementService", - "Themes", - "TrkWks", - "UserManager", - "VGAuthService", - "VMTools", - "WSearch", - "Wcmsvc", - "WinDefend", - "Winmgmt", - "WlanSvc", - "WpnService", - "WpnUserService_dc2a4", - "cbdhsvc_dc2a4", - "edgeupdate", - "gpsvc", - "iphlpsvc", - "mpssvc", - "nsi", - "sppsvc", - "tiledatamodelsvc", - "vm3dservice", - "webthreatdefusersvc_dc2a4", - "wscsvc" + function Stop-UnnecessaryServices { + $servicesToExclude = @( + "AudioSrv", + "AudioEndpointBuilder", + "BFE", + "BITS", + "BrokerInfrastructure", + "CDPSvc", + "CDPUserSvc_dc2a4", + "CoreMessagingRegistrar", + "CryptSvc", + "DPS", + "DcomLaunch", + "Dhcp", + "DispBrokerDesktopSvc", + "Dnscache", + "DoSvc", + "DusmSvc", + "EventLog", + "EventSystem", + "FontCache", + "LSM", + "LanmanServer", + "LanmanWorkstation", + "MapsBroker", + "MpsSvc", + "OneSyncSvc_dc2a4", + "Power", + "ProfSvc", + "RpcEptMapper", + "RpcSs", + "SCardSvr", + "SENS", + "SamSs", + "Schedule", + "SgrmBroker", + "ShellHWDetection", + "Spooler", + "SysMain", + "SystemEventsBroker", + "TextInputManagementService", + "Themes", + "TrkWks", + "UserManager", + "VGAuthService", + "VMTools", + "WSearch", + "Wcmsvc", + "WinDefend", + "Winmgmt", + "WlanSvc", + "WpnService", + "WpnUserService_dc2a4", + "cbdhsvc_dc2a4", + "edgeupdate", + "gpsvc", + "iphlpsvc", + "mpssvc", + "nsi", + "sppsvc", + "tiledatamodelsvc", + "vm3dservice", + "webthreatdefusersvc_dc2a4", + "wscsvc" ) - $runningServices = Get-Service | Where-Object { $servicesToExclude -notcontains $_.Name } - foreach($service in $runningServices) { - Stop-Service -Name $service.Name -PassThru - Set-Service $service.Name -StartupType Manual - "Stopping service $($service.Name)" | Out-File -FilePath c:\windows\LogFirstRun.txt -Append -NoClobber - } - } + $runningServices = Get-Service | Where-Object { $servicesToExclude -notcontains $_.Name } + foreach($service in $runningServices) { + Stop-Service -Name $service.Name -PassThru + Set-Service $service.Name -StartupType Manual + "Stopping service $($service.Name)" | Out-File -FilePath c:\windows\LogFirstRun.txt -Append -NoClobber + } + } - "FirstStartup has worked" | Out-File -FilePath c:\windows\LogFirstRun.txt -Append -NoClobber + "FirstStartup has worked" | Out-File -FilePath c:\windows\LogFirstRun.txt -Append -NoClobber - $Theme = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize" - Set-ItemProperty -Path $Theme -Name AppsUseLightTheme -Value 1 - Set-ItemProperty -Path $Theme -Name SystemUsesLightTheme -Value 1 + $Theme = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize" + Set-ItemProperty -Path $Theme -Name AppsUseLightTheme -Value 1 + Set-ItemProperty -Path $Theme -Name SystemUsesLightTheme -Value 1 - # figure this out later how to set updates to security only - #Import-Module -Name PSWindowsUpdate; - #Stop-Service -Name wuauserv - #Set-WUSettings -MicrosoftUpdateEnabled -AutoUpdateOption 'Never' - #Start-Service -Name wuauserv + # figure this out later how to set updates to security only + #Import-Module -Name PSWindowsUpdate; + #Stop-Service -Name wuauserv + #Set-WUSettings -MicrosoftUpdateEnabled -AutoUpdateOption 'Never' + #Start-Service -Name wuauserv - Stop-UnnecessaryServices + Stop-UnnecessaryServices - $taskbarPath = "$env:AppData\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar" - # Delete all files on the Taskbar - Get-ChildItem -Path $taskbarPath -File | Remove-Item -Force - Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "FavoritesRemovedChanges" - Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "FavoritesChanges" - Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "Favorites" + $taskbarPath = "$env:AppData\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar" + # Delete all files on the Taskbar + Get-ChildItem -Path $taskbarPath -File | Remove-Item -Force + Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "FavoritesRemovedChanges" + Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "FavoritesChanges" + Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "Favorites" - # Stop-Process -Name explorer -Force + # Stop-Process -Name explorer -Force - $process = Get-Process -Name "explorer" - Stop-Process -InputObject $process - # Wait for the process to exit - Wait-Process -InputObject $process - Start-Sleep -Seconds 3 + $process = Get-Process -Name "explorer" + Stop-Process -InputObject $process + # Wait for the process to exit + Wait-Process -InputObject $process + Start-Sleep -Seconds 3 - # Delete Edge Icon from the desktop - $edgeShortcutFiles = Get-ChildItem -Path $desktopPath -Filter "*Edge*.lnk" - # Check if Edge shortcuts exist on the desktop - if ($edgeShortcutFiles) { - foreach ($shortcutFile in $edgeShortcutFiles) { - # Remove each Edge shortcut - Remove-Item -Path $shortcutFile.FullName -Force - Write-Host "Edge shortcut '$($shortcutFile.Name)' removed from the desktop." - } - } - Remove-Item -Path "$env:USERPROFILE\Desktop\*.lnk" - Remove-Item -Path "C:\Users\Default\Desktop\*.lnk" + # Delete Edge Icon from the desktop + $edgeShortcutFiles = Get-ChildItem -Path $desktopPath -Filter "*Edge*.lnk" + # Check if Edge shortcuts exist on the desktop + if ($edgeShortcutFiles) { + foreach ($shortcutFile in $edgeShortcutFiles) { + # Remove each Edge shortcut + Remove-Item -Path $shortcutFile.FullName -Force + Write-Host "Edge shortcut '$($shortcutFile.Name)' removed from the desktop." + } + } + Remove-Item -Path "$env:USERPROFILE\Desktop\*.lnk" + Remove-Item -Path "C:\Users\Default\Desktop\*.lnk" - # ************************************************ - # Create WinUtil shortcut on the desktop - # - $desktopPath = "$($env:USERPROFILE)\Desktop" - # Specify the target PowerShell command - $command = "powershell.exe -NoProfile -ExecutionPolicy Bypass -Command 'irm https://christitus.com/win | iex'" - # Specify the path for the shortcut - $shortcutPath = Join-Path $desktopPath 'winutil.lnk' - # Create a shell object - $shell = New-Object -ComObject WScript.Shell + # ************************************************ + # Create WinUtil shortcut on the desktop + # + $desktopPath = "$($env:USERPROFILE)\Desktop" + # Specify the target PowerShell command + $command = "powershell.exe -NoProfile -ExecutionPolicy Bypass -Command 'irm https://christitus.com/win | iex'" + # Specify the path for the shortcut + $shortcutPath = Join-Path $desktopPath 'winutil.lnk' + # Create a shell object + $shell = New-Object -ComObject WScript.Shell - # Create a shortcut object - $shortcut = $shell.CreateShortcut($shortcutPath) + # Create a shortcut object + $shortcut = $shell.CreateShortcut($shortcutPath) - if (Test-Path -Path "c:\Windows\cttlogo.png") { - $shortcut.IconLocation = "c:\Windows\cttlogo.png" - } + if (Test-Path -Path "c:\Windows\cttlogo.png") { + $shortcut.IconLocation = "c:\Windows\cttlogo.png" + } - # Set properties of the shortcut - $shortcut.TargetPath = "powershell.exe" - $shortcut.Arguments = "-NoProfile -ExecutionPolicy Bypass -Command `"$command`"" - # Save the shortcut - $shortcut.Save() + # Set properties of the shortcut + $shortcut.TargetPath = "powershell.exe" + $shortcut.Arguments = "-NoProfile -ExecutionPolicy Bypass -Command `"$command`"" + # Save the shortcut + $shortcut.Save() - # Make the shortcut have 'Run as administrator' property on - $bytes = [System.IO.File]::ReadAllBytes($shortcutPath) - # Set byte value at position 0x15 in hex, or 21 in decimal, from the value 0x00 to 0x20 in hex - $bytes[0x15] = $bytes[0x15] -bor 0x20 - [System.IO.File]::WriteAllBytes($shortcutPath, $bytes) + # Make the shortcut have 'Run as administrator' property on + $bytes = [System.IO.File]::ReadAllBytes($shortcutPath) + # Set byte value at position 0x15 in hex, or 21 in decimal, from the value 0x00 to 0x20 in hex + $bytes[0x15] = $bytes[0x15] -bor 0x20 + [System.IO.File]::WriteAllBytes($shortcutPath, $bytes) - Write-Host "Shortcut created at: $shortcutPath" - # - # Done create WinUtil shortcut on the desktop - # ************************************************ + Write-Host "Shortcut created at: $shortcutPath" + # + # Done create WinUtil shortcut on the desktop + # ************************************************ - Start-Process explorer + Start-Process explorer '@ - $firstRun | Out-File -FilePath "$env:temp\FirstStartup.ps1" -Force + $firstRun | Out-File -FilePath "$env:temp\FirstStartup.ps1" -Force } diff --git a/functions/private/Invoke-WinUtilBingSearch.ps1 b/functions/private/Invoke-WinUtilBingSearch.ps1 index 21574b68..b7527bcb 100644 --- a/functions/private/Invoke-WinUtilBingSearch.ps1 +++ b/functions/private/Invoke-WinUtilBingSearch.ps1 @@ -9,26 +9,22 @@ function Invoke-WinUtilBingSearch { #> Param($Enabled) - Try{ - if ($Enabled -eq $false){ + try { + if ($Enabled -eq $false) { Write-Host "Enabling Bing Search" $value = 1 - } - else { + } else { Write-Host "Disabling Bing Search" $value = 0 } $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Search" Set-ItemProperty -Path $Path -Name BingSearchEnabled -Value $value - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } -} \ No newline at end of file +} diff --git a/functions/private/Invoke-WinUtilCurrentSystem.ps1 b/functions/private/Invoke-WinUtilCurrentSystem.ps1 index a65ef60c..505942b5 100644 --- a/functions/private/Invoke-WinUtilCurrentSystem.ps1 +++ b/functions/private/Invoke-WinUtilCurrentSystem.ps1 @@ -14,7 +14,7 @@ Function Invoke-WinUtilCurrentSystem { $CheckBox ) - if ($checkbox -eq "winget"){ + if ($checkbox -eq "winget") { $originalEncoding = [Console]::OutputEncoding [Console]::OutputEncoding = [System.Text.UTF8Encoding]::new() @@ -31,9 +31,9 @@ Function Invoke-WinUtilCurrentSystem { } } - if($CheckBox -eq "tweaks"){ + if($CheckBox -eq "tweaks") { - if(!(Test-Path 'HKU:\')){New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS} + if(!(Test-Path 'HKU:\')) {New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS} $ScheduledTasks = Get-ScheduledTask $sync.configs.tweaks | Get-Member -MemberType NoteProperty | ForEach-Object { @@ -44,59 +44,57 @@ Function Invoke-WinUtilCurrentSystem { $scheduledtaskKeys = $sync.configs.tweaks.$Config.scheduledtask $serviceKeys = $sync.configs.tweaks.$Config.service - if($registryKeys -or $scheduledtaskKeys -or $serviceKeys){ + if($registryKeys -or $scheduledtaskKeys -or $serviceKeys) { $Values = @() - Foreach ($tweaks in $registryKeys){ - Foreach($tweak in $tweaks){ + Foreach ($tweaks in $registryKeys) { + Foreach($tweak in $tweaks) { - if(test-path $tweak.Path){ + if(test-path $tweak.Path) { $actualValue = Get-ItemProperty -Name $tweak.Name -Path $tweak.Path -ErrorAction SilentlyContinue | Select-Object -ExpandProperty $($tweak.Name) $expectedValue = $tweak.Value - if ($expectedValue -notlike $actualValue){ + if ($expectedValue -notlike $actualValue) { $values += $False } - } - else { + } else { $values += $False } } } - Foreach ($tweaks in $scheduledtaskKeys){ - Foreach($tweak in $tweaks){ + Foreach ($tweaks in $scheduledtaskKeys) { + Foreach($tweak in $tweaks) { $task = $ScheduledTasks | Where-Object {$($psitem.TaskPath + $psitem.TaskName) -like "\$($tweak.name)"} - if($task){ + if($task) { $actualValue = $task.State $expectedValue = $tweak.State - if ($expectedValue -ne $actualValue){ + if ($expectedValue -ne $actualValue) { $values += $False } } } } - Foreach ($tweaks in $serviceKeys){ - Foreach($tweak in $tweaks){ + Foreach ($tweaks in $serviceKeys) { + Foreach($tweak in $tweaks) { $Service = Get-Service -Name $tweak.Name - if($Service){ + if($Service) { $actualValue = $Service.StartType $expectedValue = $tweak.StartupType - if ($expectedValue -ne $actualValue){ + if ($expectedValue -ne $actualValue) { $values += $False } } } } - if($values -notcontains $false){ + if($values -notcontains $false) { Write-Output $Config } } } } } - diff --git a/functions/private/Invoke-WinUtilDarkMode.ps1 b/functions/private/Invoke-WinUtilDarkMode.ps1 index 590da6eb..8ce369d3 100644 --- a/functions/private/Invoke-WinUtilDarkMode.ps1 +++ b/functions/private/Invoke-WinUtilDarkMode.ps1 @@ -9,12 +9,11 @@ Function Invoke-WinUtilDarkMode { #> Param($DarkMoveEnabled) - Try{ - if ($DarkMoveEnabled -eq $false){ + try { + if ($DarkMoveEnabled -eq $false) { Write-Host "Enabling Dark Mode" $DarkMoveValue = 0 - } - else { + } else { Write-Host "Disabling Dark Mode" $DarkMoveValue = 1 } @@ -22,15 +21,12 @@ Function Invoke-WinUtilDarkMode { $Path = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize" Set-ItemProperty -Path $Path -Name AppsUseLightTheme -Value $DarkMoveValue Set-ItemProperty -Path $Path -Name SystemUsesLightTheme -Value $DarkMoveValue - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } -} \ No newline at end of file +} diff --git a/functions/private/Invoke-WinUtilFeatureInstall.ps1 b/functions/private/Invoke-WinUtilFeatureInstall.ps1 index 4b3a0f65..72a22d9a 100644 --- a/functions/private/Invoke-WinUtilFeatureInstall.ps1 +++ b/functions/private/Invoke-WinUtilFeatureInstall.ps1 @@ -13,19 +13,16 @@ function Invoke-WinUtilFeatureInstall { $x = 0 $CheckBox | ForEach-Object { - if($sync.configs.feature.$psitem.feature){ - Foreach( $feature in $sync.configs.feature.$psitem.feature ){ - Try{ + if($sync.configs.feature.$psitem.feature) { + Foreach( $feature in $sync.configs.feature.$psitem.feature ) { + try { Write-Host "Installing $feature" Enable-WindowsOptionalFeature -Online -FeatureName $feature -All -NoRestart - } - Catch{ - if ($psitem.Exception.Message -like "*requires elevation*"){ + } catch { + if ($psitem.Exception.Message -like "*requires elevation*") { Write-Warning "Unable to Install $feature due to permissions. Are you running as admin?" $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Error" }) - } - - else{ + } else { Write-Warning "Unable to Install $feature due to unhandled exception" Write-Warning $psitem.Exception.StackTrace @@ -33,21 +30,18 @@ function Invoke-WinUtilFeatureInstall { } } } - if($sync.configs.feature.$psitem.InvokeScript){ - Foreach( $script in $sync.configs.feature.$psitem.InvokeScript ){ - Try{ + if($sync.configs.feature.$psitem.InvokeScript) { + Foreach( $script in $sync.configs.feature.$psitem.InvokeScript ) { + try { $Scriptblock = [scriptblock]::Create($script) Write-Host "Running Script for $psitem" Invoke-Command $scriptblock -ErrorAction stop - } - Catch{ - if ($psitem.Exception.Message -like "*requires elevation*"){ + } catch { + if ($psitem.Exception.Message -like "*requires elevation*") { Write-Warning "Unable to Install $feature due to permissions. Are you running as admin?" $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Error" }) - } - - else{ + } else { $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Error" }) Write-Warning "Unable to Install $feature due to unhandled exception" Write-Warning $psitem.Exception.StackTrace diff --git a/functions/private/Invoke-WinUtilGPU.ps1 b/functions/private/Invoke-WinUtilGPU.ps1 index 13e4fb76..926f2794 100644 --- a/functions/private/Invoke-WinUtilGPU.ps1 +++ b/functions/private/Invoke-WinUtilGPU.ps1 @@ -11,11 +11,11 @@ function Invoke-WinUtilGPU { ) foreach ($gpu in $gpuInfo) { - foreach ($gpuPattern in $lowPowerGPUs){ + foreach ($gpuPattern in $lowPowerGPUs) { if ($gpu.Name -like $gpuPattern) { return $false } } } return $true -} \ No newline at end of file +} diff --git a/functions/private/Invoke-WinUtilHiddenFiles.ps1 b/functions/private/Invoke-WinUtilHiddenFiles.ps1 index 81b3d6bb..5309d2c3 100644 --- a/functions/private/Invoke-WinUtilHiddenFiles.ps1 +++ b/functions/private/Invoke-WinUtilHiddenFiles.ps1 @@ -9,25 +9,21 @@ function Invoke-WinUtilHiddenFiles { #> Param($Enabled) - Try{ - if ($Enabled -eq $false){ + try { + if ($Enabled -eq $false) { Write-Host "Enabling Hidden Files" $value = 1 - } - else { + } else { Write-Host "Disabling Hidden Files" $value = 0 } $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" Set-ItemProperty -Path $Path -Name Hidden -Value $value - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } diff --git a/functions/private/Invoke-WinUtilMouseAcceleration.ps1 b/functions/private/Invoke-WinUtilMouseAcceleration.ps1 index 34375170..f29bdeee 100644 --- a/functions/private/Invoke-WinUtilMouseAcceleration.ps1 +++ b/functions/private/Invoke-WinUtilMouseAcceleration.ps1 @@ -9,14 +9,13 @@ Function Invoke-WinUtilMouseAcceleration { #> Param($MouseAccelerationEnabled) - Try{ - if ($MouseAccelerationEnabled -eq $false){ + try { + if ($MouseAccelerationEnabled -eq $false) { Write-Host "Enabling Mouse Acceleration" $MouseSpeed = 1 $MouseThreshold1 = 6 $MouseThreshold2 = 10 - } - else { + } else { Write-Host "Disabling Mouse Acceleration" $MouseSpeed = 0 $MouseThreshold1 = 0 @@ -28,15 +27,12 @@ Function Invoke-WinUtilMouseAcceleration { Set-ItemProperty -Path $Path -Name MouseSpeed -Value $MouseSpeed Set-ItemProperty -Path $Path -Name MouseThreshold1 -Value $MouseThreshold1 Set-ItemProperty -Path $Path -Name MouseThreshold2 -Value $MouseThreshold2 - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } -} \ No newline at end of file +} diff --git a/functions/private/Invoke-WinUtilNumLock.ps1 b/functions/private/Invoke-WinUtilNumLock.ps1 index 97b36a94..77735a70 100644 --- a/functions/private/Invoke-WinUtilNumLock.ps1 +++ b/functions/private/Invoke-WinUtilNumLock.ps1 @@ -6,27 +6,23 @@ function Invoke-WinUtilNumLock { Indicates whether to enable or disable Numlock on startup #> Param($Enabled) - Try{ - if ($Enabled -eq $false){ + try { + if ($Enabled -eq $false) { Write-Host "Enabling Numlock on startup" $value = 2 - } - else { + } else { 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 - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } -} \ No newline at end of file +} diff --git a/functions/private/Invoke-WinUtilScript.ps1 b/functions/private/Invoke-WinUtilScript.ps1 index 4059f917..05cef26a 100644 --- a/functions/private/Invoke-WinUtilScript.ps1 +++ b/functions/private/Invoke-WinUtilScript.ps1 @@ -20,30 +20,25 @@ function Invoke-WinUtilScript { [scriptblock]$scriptblock ) - Try { + try { Write-Host "Running Script for $name" Invoke-Command $scriptblock -ErrorAction Stop - } - Catch [System.Management.Automation.CommandNotFoundException] { + } catch [System.Management.Automation.CommandNotFoundException] { Write-Warning "The specified command was not found." Write-Warning $PSItem.Exception.message - } - Catch [System.Management.Automation.RuntimeException] { + } catch [System.Management.Automation.RuntimeException] { Write-Warning "A runtime exception occurred." Write-Warning $PSItem.Exception.message - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "A security exception occurred." Write-Warning $PSItem.Exception.message - } - Catch [System.UnauthorizedAccessException] { + } catch [System.UnauthorizedAccessException] { Write-Warning "Access denied. You do not have permission to perform this operation." Write-Warning $PSItem.Exception.message - } - Catch { + } catch { # Generic catch block to handle any other type of exception Write-Warning "Unable to run script for $name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } -} \ No newline at end of file +} diff --git a/functions/private/Invoke-WinUtilShowExt.ps1 b/functions/private/Invoke-WinUtilShowExt.ps1 index 0b5dee6e..c90265a8 100644 --- a/functions/private/Invoke-WinUtilShowExt.ps1 +++ b/functions/private/Invoke-WinUtilShowExt.ps1 @@ -6,26 +6,22 @@ function Invoke-WinUtilShowExt { Indicates whether to enable or disable Show file extentions #> Param($Enabled) - Try{ - if ($Enabled -eq $false){ + try { + if ($Enabled -eq $false) { Write-Host "Showing file extentions" $value = 0 - } - else { + } else { Write-Host "hiding file extensions" $value = 1 } $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" Set-ItemProperty -Path $Path -Name HideFileExt -Value $value - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } -} \ No newline at end of file +} diff --git a/functions/private/Invoke-WinUtilSnapFlyout.ps1 b/functions/private/Invoke-WinUtilSnapFlyout.ps1 index fb317ec9..bfb83c31 100644 --- a/functions/private/Invoke-WinUtilSnapFlyout.ps1 +++ b/functions/private/Invoke-WinUtilSnapFlyout.ps1 @@ -6,12 +6,11 @@ function Invoke-WinUtilSnapFlyout { Indicates whether to enable or disable Snap Assist Flyout on startup #> Param($Enabled) - Try{ - if ($Enabled -eq $false){ + try { + if ($Enabled -eq $false) { Write-Host "Enabling Snap Assist Flyout On startup" $value = 1 - } - else { + } else { Write-Host "Disabling Snap Assist Flyout On startup" $value = 0 } @@ -20,15 +19,12 @@ function Invoke-WinUtilSnapFlyout { taskkill.exe /F /IM "explorer.exe" Set-ItemProperty -Path $Path -Name EnableSnapAssistFlyout -Value $value Start-Process "explorer.exe" - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } -} \ No newline at end of file +} diff --git a/functions/private/Invoke-WinUtilSnapSuggestion.ps1 b/functions/private/Invoke-WinUtilSnapSuggestion.ps1 index 6fd35a14..f2358c73 100644 --- a/functions/private/Invoke-WinUtilSnapSuggestion.ps1 +++ b/functions/private/Invoke-WinUtilSnapSuggestion.ps1 @@ -6,12 +6,11 @@ function Invoke-WinUtilSnapSuggestion { Indicates whether to enable or disable Snap Assist Suggestions on startup #> Param($Enabled) - Try{ - if ($Enabled -eq $false){ + try { + if ($Enabled -eq $false) { Write-Host "Enabling Snap Assist Suggestion On startup" $value = 1 - } - else { + } else { Write-Host "Disabling Snap Assist Suggestion On startup" $value = 0 } @@ -20,15 +19,12 @@ function Invoke-WinUtilSnapSuggestion { taskkill.exe /F /IM "explorer.exe" Set-ItemProperty -Path $Path -Name SnapAssist -Value $value Start-Process "explorer.exe" - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } -} \ No newline at end of file +} diff --git a/functions/private/Invoke-WinUtilSnapWindow.ps1 b/functions/private/Invoke-WinUtilSnapWindow.ps1 index a52950d4..c76e1c7d 100644 --- a/functions/private/Invoke-WinUtilSnapWindow.ps1 +++ b/functions/private/Invoke-WinUtilSnapWindow.ps1 @@ -6,26 +6,22 @@ function Invoke-WinUtilSnapWindow { Indicates whether to enable or disable Snapping Windows on startup #> Param($Enabled) - Try{ - if ($Enabled -eq $false){ + try { + if ($Enabled -eq $false) { Write-Host "Enabling Snap Windows On startup | Relogin Required" $value = 1 - } - else { + } else { Write-Host "Disabling Snap Windows On startup | Relogin Required" $value = 0 } $Path = "HKCU:\Control Panel\Desktop" Set-ItemProperty -Path $Path -Name WindowArrangementActive -Value $value - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } -} \ No newline at end of file +} diff --git a/functions/private/Invoke-WinUtilSponsors.ps1 b/functions/private/Invoke-WinUtilSponsors.ps1 index cf75dc27..54484500 100644 --- a/functions/private/Invoke-WinUtilSponsors.ps1 +++ b/functions/private/Invoke-WinUtilSponsors.ps1 @@ -37,9 +37,8 @@ Function Invoke-WinUtilSponsors { # Return the sponsors return $sponsors - } - catch { + } catch { Write-Error "An error occurred while fetching or processing the sponsors: $_" return $null } -} \ No newline at end of file +} diff --git a/functions/private/Invoke-WinUtilStickyKeys.ps1 b/functions/private/Invoke-WinUtilStickyKeys.ps1 index 69689f9f..b7d8860f 100644 --- a/functions/private/Invoke-WinUtilStickyKeys.ps1 +++ b/functions/private/Invoke-WinUtilStickyKeys.ps1 @@ -6,26 +6,22 @@ Function Invoke-WinUtilStickyKeys { Indicates whether to enable or disable Sticky Keys on startup #> Param($Enabled) - Try { - if ($Enabled -eq $false){ + try { + if ($Enabled -eq $false) { Write-Host "Enabling Sticky Keys On startup" $value = 510 - } - else { + } else { Write-Host "Disabling Sticky Keys On startup" $value = 58 } $Path = "HKCU:\Control Panel\Accessibility\StickyKeys" Set-ItemProperty -Path $Path -Name Flags -Value $value - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } -} \ No newline at end of file +} diff --git a/functions/private/Invoke-WinUtilTaskView.ps1 b/functions/private/Invoke-WinUtilTaskView.ps1 index b9963294..3af1beb6 100644 --- a/functions/private/Invoke-WinUtilTaskView.ps1 +++ b/functions/private/Invoke-WinUtilTaskView.ps1 @@ -9,25 +9,21 @@ function Invoke-WinUtilTaskView { #> Param($Enabled) - Try{ - if ($Enabled -eq $false){ + try { + if ($Enabled -eq $false) { Write-Host "Enabling Task View" $value = 1 - } - else { + } else { Write-Host "Disabling Task View" $value = 0 } $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" Set-ItemProperty -Path $Path -Name ShowTaskViewButton -Value $value - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } diff --git a/functions/private/Invoke-WinUtilTaskbarAlignment.ps1 b/functions/private/Invoke-WinUtilTaskbarAlignment.ps1 index 0c5e0dfa..e3f512f7 100644 --- a/functions/private/Invoke-WinUtilTaskbarAlignment.ps1 +++ b/functions/private/Invoke-WinUtilTaskbarAlignment.ps1 @@ -9,25 +9,21 @@ function Invoke-WinUtilTaskbarAlignment { #> Param($Enabled) - Try{ - if ($Enabled -eq $false){ + try { + if ($Enabled -eq $false) { Write-Host "Making Taskbar Alignment to the Center" $value = 1 - } - else { + } else { Write-Host "Making Taskbar Alignment to the Left" $value = 0 } $Path = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" Set-ItemProperty -Path $Path -Name "TaskbarAl" -Value $value - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } diff --git a/functions/private/Invoke-WinUtilTaskbarSearch.ps1 b/functions/private/Invoke-WinUtilTaskbarSearch.ps1 index b297c023..b35d4816 100644 --- a/functions/private/Invoke-WinUtilTaskbarSearch.ps1 +++ b/functions/private/Invoke-WinUtilTaskbarSearch.ps1 @@ -9,25 +9,21 @@ function Invoke-WinUtilTaskbarSearch { #> Param($Enabled) - Try{ - if ($Enabled -eq $false){ + try { + if ($Enabled -eq $false) { Write-Host "Enabling Search Button" $value = 1 - } - else { + } else { Write-Host "Disabling Search Button" $value = 0 } $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Search\" Set-ItemProperty -Path $Path -Name SearchboxTaskbarMode -Value $value - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } diff --git a/functions/private/Invoke-WinUtilTaskbarWidgets.ps1 b/functions/private/Invoke-WinUtilTaskbarWidgets.ps1 index 27077f55..f8b2ce3a 100644 --- a/functions/private/Invoke-WinUtilTaskbarWidgets.ps1 +++ b/functions/private/Invoke-WinUtilTaskbarWidgets.ps1 @@ -9,25 +9,21 @@ function Invoke-WinUtilTaskbarWidgets { #> Param($Enabled) - Try{ - if ($Enabled -eq $false){ + try { + if ($Enabled -eq $false) { Write-Host "Enabling Taskbar Widgets" $value = 1 - } - else { + } else { Write-Host "Disabling Taskbar Widgets" $value = 0 } $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" Set-ItemProperty -Path $Path -Name TaskbarDa -Value $value - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } diff --git a/functions/private/Invoke-WinUtilTweaks.ps1 b/functions/private/Invoke-WinUtilTweaks.ps1 index 90dee507..8bb06faf 100644 --- a/functions/private/Invoke-WinUtilTweaks.ps1 +++ b/functions/private/Invoke-WinUtilTweaks.ps1 @@ -22,7 +22,7 @@ function Invoke-WinUtilTweaks { ) Write-Debug "Tweaks: $($CheckBox)" - if($undo){ + if($undo) { $Values = @{ Registry = "OriginalValue" ScheduledTask = "OriginalState" @@ -30,8 +30,7 @@ function Invoke-WinUtilTweaks { ScriptType = "UndoScript" } - } - Else{ + } else { $Values = @{ Registry = "Value" ScheduledTask = "State" @@ -40,18 +39,18 @@ function Invoke-WinUtilTweaks { ScriptType = "InvokeScript" } } - if($sync.configs.tweaks.$CheckBox.ScheduledTask){ + if($sync.configs.tweaks.$CheckBox.ScheduledTask) { $sync.configs.tweaks.$CheckBox.ScheduledTask | ForEach-Object { Write-Debug "$($psitem.Name) and state is $($psitem.$($values.ScheduledTask))" Set-WinUtilScheduledTask -Name $psitem.Name -State $psitem.$($values.ScheduledTask) } } - if($sync.configs.tweaks.$CheckBox.service){ + if($sync.configs.tweaks.$CheckBox.service) { Write-Debug "KeepServiceStartup is $KeepServiceStartup" $sync.configs.tweaks.$CheckBox.service | ForEach-Object { $changeservice = $true - # The check for !($undo) is required, without it the script will throw an error for accessing unavailable memeber, which's the 'OriginalService' Property + # The check for !($undo) is required, without it the script will throw an error for accessing unavailable memeber, which's the 'OriginalService' Property if($KeepServiceStartup -AND !($undo)) { try { # Check if the service exists @@ -60,8 +59,7 @@ function Invoke-WinUtilTweaks { Write-Debug "Service $($service.Name) was changed in the past to $($service.StartType.ToString()) from it's original type of $($psitem.$($values.OriginalService)), will not change it to $($psitem.$($values.service))" $changeservice = $false } - } - catch [System.ServiceProcess.ServiceNotFoundException] { + } catch [System.ServiceProcess.ServiceNotFoundException] { Write-Warning "Service $($psitem.Name) was not found" } } @@ -72,13 +70,13 @@ function Invoke-WinUtilTweaks { } } } - if($sync.configs.tweaks.$CheckBox.registry){ + if($sync.configs.tweaks.$CheckBox.registry) { $sync.configs.tweaks.$CheckBox.registry | ForEach-Object { Write-Debug "$($psitem.Name) and state is $($psitem.$($values.registry))" Set-WinUtilRegistry -Name $psitem.Name -Path $psitem.Path -Type $psitem.Type -Value $psitem.$($values.registry) } } - if($sync.configs.tweaks.$CheckBox.$($values.ScriptType)){ + if($sync.configs.tweaks.$CheckBox.$($values.ScriptType)) { $sync.configs.tweaks.$CheckBox.$($values.ScriptType) | ForEach-Object { Write-Debug "$($psitem) and state is $($psitem.$($values.ScriptType))" $Scriptblock = [scriptblock]::Create($psitem) @@ -86,8 +84,8 @@ function Invoke-WinUtilTweaks { } } - if(!$undo){ - if($sync.configs.tweaks.$CheckBox.appx){ + if(!$undo) { + if($sync.configs.tweaks.$CheckBox.appx) { $sync.configs.tweaks.$CheckBox.appx | ForEach-Object { Write-Debug "UNDO $($psitem.Name)" Remove-WinUtilAPPX -Name $psitem diff --git a/functions/private/Invoke-WinUtilVerboseLogon.ps1 b/functions/private/Invoke-WinUtilVerboseLogon.ps1 index 997050f9..9bed241c 100644 --- a/functions/private/Invoke-WinUtilVerboseLogon.ps1 +++ b/functions/private/Invoke-WinUtilVerboseLogon.ps1 @@ -6,26 +6,22 @@ function Invoke-WinUtilVerboseLogon { Indicates whether to enable or disable VerboseLogon messages #> Param($Enabled) - Try{ - if ($Enabled -eq $false){ + try { + if ($Enabled -eq $false) { Write-Host "Enabling Verbose Logon Messages" $value = 1 - } - else { + } else { Write-Host "Disabling Verbose Logon Messages" $value = 0 } $Path = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" Set-ItemProperty -Path $Path -Name VerboseStatus -Value $value - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } -} \ No newline at end of file +} diff --git a/functions/private/Remove-WinUtilAPPX.ps1 b/functions/private/Remove-WinUtilAPPX.ps1 index e54a3475..e90a101b 100644 --- a/functions/private/Remove-WinUtilAPPX.ps1 +++ b/functions/private/Remove-WinUtilAPPX.ps1 @@ -15,22 +15,19 @@ function Remove-WinUtilAPPX { $Name ) - Try { + try { Write-Host "Removing $Name" Get-AppxPackage "*$Name*" | Remove-AppxPackage -ErrorAction SilentlyContinue Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like "*$Name*" | Remove-AppxProvisionedPackage -Online -ErrorAction SilentlyContinue - } - Catch [System.Exception] { + } catch [System.Exception] { if ($psitem.Exception.Message -like "*The requested operation requires elevation*") { Write-Warning "Unable to uninstall $name due to a Security Exception" - } - else { + } else { Write-Warning "Unable to uninstall $name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } - } - Catch{ + } catch { Write-Warning "Unable to uninstall $name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } -} \ No newline at end of file +} diff --git a/functions/private/Set-WinUtilDNS.ps1 b/functions/private/Set-WinUtilDNS.ps1 index 0810e6d2..3aa4f157 100644 --- a/functions/private/Set-WinUtilDNS.ps1 +++ b/functions/private/Set-WinUtilDNS.ps1 @@ -12,24 +12,22 @@ function Set-WinUtilDNS { #> param($DNSProvider) - if($DNSProvider -eq "Default"){return} - Try{ + if($DNSProvider -eq "Default") {return} + try { $Adapters = Get-NetAdapter | Where-Object {$_.Status -eq "Up"} Write-Host "Ensuring DNS is set to $DNSProvider on the following interfaces" Write-Host $($Adapters | Out-String) - Foreach ($Adapter in $Adapters){ - if($DNSProvider -eq "DHCP"){ + Foreach ($Adapter in $Adapters) { + if($DNSProvider -eq "DHCP") { Set-DnsClientServerAddress -InterfaceIndex $Adapter.ifIndex -ResetServerAddresses - } - Else{ + } else { Set-DnsClientServerAddress -InterfaceIndex $Adapter.ifIndex -ServerAddresses ("$($sync.configs.dns.$DNSProvider.Primary)", "$($sync.configs.dns.$DNSProvider.Secondary)") Set-DnsClientServerAddress -InterfaceIndex $Adapter.ifIndex -ServerAddresses ("$($sync.configs.dns.$DNSProvider.Primary6)", "$($sync.configs.dns.$DNSProvider.Secondary6)") } } - } - Catch{ + } catch { Write-Warning "Unable to set DNS Provider due to an unhandled exception" Write-Warning $psitem.Exception.StackTrace } -} \ No newline at end of file +} diff --git a/functions/private/Set-WinUtilRegistry.ps1 b/functions/private/Set-WinUtilRegistry.ps1 index a5c67fbc..e3f66e2e 100644 --- a/functions/private/Set-WinUtilRegistry.ps1 +++ b/functions/private/Set-WinUtilRegistry.ps1 @@ -27,8 +27,8 @@ function Set-WinUtilRegistry { $Value ) - Try{ - if(!(Test-Path 'HKU:\')){New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS} + try { + if(!(Test-Path 'HKU:\')) {New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS} If (!(Test-Path $Path)) { Write-Host "$Path was not found, Creating..." @@ -37,14 +37,11 @@ function Set-WinUtilRegistry { Write-Host "Set $Path\$Name to $Value" Set-ItemProperty -Path $Path -Name $Name -Type $Type -Value $Value -Force -ErrorAction Stop | Out-Null - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } diff --git a/functions/private/Set-WinUtilScheduledTask.ps1 b/functions/private/Set-WinUtilScheduledTask.ps1 index 453f7793..e6ee2bef 100644 --- a/functions/private/Set-WinUtilScheduledTask.ps1 +++ b/functions/private/Set-WinUtilScheduledTask.ps1 @@ -19,27 +19,24 @@ function Set-WinUtilScheduledTask { $State ) - Try{ - if($State -eq "Disabled"){ + try { + if($State -eq "Disabled") { Write-Host "Disabling Scheduled Task $Name" Disable-ScheduledTask -TaskName $Name -ErrorAction Stop } - if($State -eq "Enabled"){ + if($State -eq "Enabled") { Write-Host "Enabling Scheduled Task $Name" Enable-ScheduledTask -TaskName $Name -ErrorAction Stop } - } - Catch [System.Exception]{ - if($psitem.Exception.Message -like "*The system cannot find the file specified*"){ + } catch [System.Exception] { + if($psitem.Exception.Message -like "*The system cannot find the file specified*") { Write-Warning "Scheduled Task $name was not Found" - } - Else{ + } else { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.Message } - } - Catch{ + } catch { Write-Warning "Unable to run script for $name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } -} \ No newline at end of file +} diff --git a/functions/private/Set-WinUtilService.ps1 b/functions/private/Set-WinUtilService.ps1 index e16b2597..d2a7d459 100644 --- a/functions/private/Set-WinUtilService.ps1 +++ b/functions/private/Set-WinUtilService.ps1 @@ -26,11 +26,9 @@ Function Set-WinUtilService { # Service exists, proceed with changing properties $service | Set-Service -StartupType $StartupType -ErrorAction Stop - } - catch [System.ServiceProcess.ServiceNotFoundException] { + } catch [System.ServiceProcess.ServiceNotFoundException] { Write-Warning "Service $Name was not found" - } - catch { + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $_.Exception.Message } diff --git a/functions/private/Set-WinUtilTaskbarItem.ps1 b/functions/private/Set-WinUtilTaskbarItem.ps1 index 7f290fac..465ca4c3 100644 --- a/functions/private/Set-WinUtilTaskbarItem.ps1 +++ b/functions/private/Set-WinUtilTaskbarItem.ps1 @@ -83,4 +83,4 @@ function Set-WinUtilTaskbaritem { if ($description) { $sync["Form"].taskbarItemInfo.Description = $description } -} \ No newline at end of file +} diff --git a/functions/private/Set-WinUtilUiTheme.ps1 b/functions/private/Set-WinUtilUiTheme.ps1 index 1338526f..45db1ab4 100644 --- a/functions/private/Set-WinUtilUiTheme.ps1 +++ b/functions/private/Set-WinUtilUiTheme.ps1 @@ -16,9 +16,9 @@ function Set-WinUtilUITheme { param ( [Parameter(Mandatory, position=0)] - [string] $inputXML, + [string]$inputXML, [Parameter(position=1)] - [string] $themeName = 'matrix' + [string]$themeName = 'matrix' ) try { @@ -37,13 +37,11 @@ function Set-WinUtilUITheme { # Replace the key with the value in the input XML $inputXML = $inputXML.Replace($formattedKey, $value) } - } - else { + } else { Write-Host "Theme '$themeName' not found." } - } - catch { + } catch { Write-Warning "Unable to apply theme" Write-Warning $psitem.Exception.StackTrace } diff --git a/functions/private/Test-WinUtilPackageManager.ps1 b/functions/private/Test-WinUtilPackageManager.ps1 index 290d8adc..04feb83c 100644 --- a/functions/private/Test-WinUtilPackageManager.ps1 +++ b/functions/private/Test-WinUtilPackageManager.ps1 @@ -30,12 +30,12 @@ function Test-WinUtilPackageManager { } catch { Write-Warning "Winget was not found due to un-known reasons, The Stack Trace is:`n$($psitem.Exception.StackTrace)" $wingetExists = $false - } + } # If Winget is available, Parse it's Version and give proper information to Terminal Output. - # If it isn't available, the return of this funtion will be "not-installed", indicating that + # If it isn't available, the return of this funtion will be "not-installed", indicating that # Winget isn't installed/available on The System. - if ($wingetExists) { + if ($wingetExists) { # Check if Preview Version if ($wingetVersionFull.Contains("-preview")) { $wingetVersion = $wingetVersionFull.Trim("-preview") @@ -65,8 +65,7 @@ function Test-WinUtilPackageManager { if (!$wingetOutdated) { Write-Host " - Winget is Up to Date" -ForegroundColor Green $status = "installed" - } - else { + } else { Write-Host " - Winget is Out of Date" -ForegroundColor Red $status = "outdated" } diff --git a/functions/private/Update-WinUtilProgramWinget.ps1 b/functions/private/Update-WinUtilProgramWinget.ps1 index 6fac6741..0784657d 100644 --- a/functions/private/Update-WinUtilProgramWinget.ps1 +++ b/functions/private/Update-WinUtilProgramWinget.ps1 @@ -18,4 +18,4 @@ Function Update-WinUtilProgramWinget { $global:WinGetInstall = Start-Process -Verb runas powershell -ArgumentList "-command invoke-command -scriptblock {$wingetinstall} -argumentlist '$($ProgramsToInstall -join ",")'" -PassThru -} \ No newline at end of file +} diff --git a/functions/public/Invoke-ScratchDialog.ps1 b/functions/public/Invoke-ScratchDialog.ps1 index 9cf4ba90..53ffc8fd 100644 --- a/functions/public/Invoke-ScratchDialog.ps1 +++ b/functions/public/Invoke-ScratchDialog.ps1 @@ -18,8 +18,7 @@ function Invoke-ScratchDialog { $filePath = $Dialog.SelectedPath Write-Host "No ISO is chosen+ $filePath" - if ([string]::IsNullOrEmpty($filePath)) - { + if ([string]::IsNullOrEmpty($filePath)) { Write-Host "No Folder had chosen" return } diff --git a/functions/public/Invoke-WPFButton.ps1 b/functions/public/Invoke-WPFButton.ps1 index b2ed9c12..d55017dd 100644 --- a/functions/public/Invoke-WPFButton.ps1 +++ b/functions/public/Invoke-WPFButton.ps1 @@ -15,7 +15,7 @@ function Invoke-WPFButton { # Use this to get the name of the button #[System.Windows.MessageBox]::Show("$Button","Chris Titus Tech's Windows Utility","OK","Info") - Switch -Wildcard ($Button){ + Switch -Wildcard ($Button) { "WPFTab?BT" {Invoke-WPFTab $Button} "WPFinstall" {Invoke-WPFInstall} @@ -55,4 +55,4 @@ function Invoke-WPFButton { "WPFCloseButton" {Invoke-WPFCloseButton} "MicrowinScratchDirBT" {Invoke-ScratchDialog} } -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFCloseButton.ps1 b/functions/public/Invoke-WPFCloseButton.ps1 index 8a784fc0..5ffff15a 100644 --- a/functions/public/Invoke-WPFCloseButton.ps1 +++ b/functions/public/Invoke-WPFCloseButton.ps1 @@ -9,4 +9,4 @@ function Invoke-WPFCloseButton { #> $sync["Form"].Close() Write-Host "Bye bye!" -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFControlPanel.ps1 b/functions/public/Invoke-WPFControlPanel.ps1 index f5574a11..eb0fdb2a 100644 --- a/functions/public/Invoke-WPFControlPanel.ps1 +++ b/functions/public/Invoke-WPFControlPanel.ps1 @@ -10,7 +10,7 @@ function Invoke-WPFControlPanel { #> param($Panel) - switch ($Panel){ + switch ($Panel) { "WPFPanelcontrol" {cmd /c control} "WPFPanelnetwork" {cmd /c ncpa.cpl} "WPFPanelpower" {cmd /c powercfg.cpl} @@ -19,4 +19,4 @@ function Invoke-WPFControlPanel { "WPFPanelsystem" {cmd /c sysdm.cpl} "WPFPaneluser" {cmd /c "control userpasswords2"} } -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFFeatureInstall.ps1 b/functions/public/Invoke-WPFFeatureInstall.ps1 index 57cbc38e..dd9995d2 100644 --- a/functions/public/Invoke-WPFFeatureInstall.ps1 +++ b/functions/public/Invoke-WPFFeatureInstall.ps1 @@ -6,7 +6,7 @@ function Invoke-WPFFeatureInstall { #> - if($sync.ProcessRunning){ + if($sync.ProcessRunning) { $msg = "[Invoke-WPFFeatureInstall] Install process is currently running." [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) return @@ -17,7 +17,7 @@ function Invoke-WPFFeatureInstall { Invoke-WPFRunspace -ArgumentList $Features -DebugPreference $DebugPreference -ScriptBlock { param($Features, $DebugPreference) $sync.ProcessRunning = $true - if ($Features.count -eq 1){ + if ($Features.count -eq 1) { $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" }) } else { $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" }) @@ -33,4 +33,4 @@ function Invoke-WPFFeatureInstall { Write-Host "--- A Reboot may be required ---" Write-Host "===================================" } -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFFixesNetwork.ps1 b/functions/public/Invoke-WPFFixesNetwork.ps1 index 94ba11bd..d7417528 100644 --- a/functions/public/Invoke-WPFFixesNetwork.ps1 +++ b/functions/public/Invoke-WPFFixesNetwork.ps1 @@ -26,4 +26,4 @@ function Invoke-WPFFixesNetwork { Write-Host "==========================================" Write-Host "-- Network Configuration has been Reset --" Write-Host "==========================================" -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFFixesUpdate.ps1 b/functions/public/Invoke-WPFFixesUpdate.ps1 index 27bd7406..ab3012c9 100644 --- a/functions/public/Invoke-WPFFixesUpdate.ps1 +++ b/functions/public/Invoke-WPFFixesUpdate.ps1 @@ -66,7 +66,7 @@ function Invoke-WPFFixesUpdate { ).Trim()} catch {0}) ` <# And the current percentage is greater than the previous one #>` -and $percent -gt $oldpercent - ){ + ) { # Update the progress bar $oldpercent = $percent Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running chkdsk... ($percent%)" -PercentComplete $percent @@ -93,7 +93,7 @@ function Invoke-WPFFixesUpdate { ) -join '' ).TrimStart()} catch {0} ) -and $percent -gt $oldpercent - ){ + ) { # Update the progress bar $oldpercent = $percent Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running SFC... ($percent%)" -PercentComplete $percent @@ -112,7 +112,7 @@ function Invoke-WPFFixesUpdate { [int]($_ -replace "\[" -replace "=" -replace " " -replace "%" -replace "\]") } catch {0}) ` -and $percent -gt $oldpercent - ){ + ) { # Update the progress bar $oldpercent = $percent Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running DISM... ($percent%)" -PercentComplete $percent @@ -137,7 +137,7 @@ function Invoke-WPFFixesUpdate { ) -join '' ).TrimStart()} catch {0} ) -and $percent -gt $oldpercent - ){ + ) { # Update the progress bar $oldpercent = $percent Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running SFC... ($percent%)" -PercentComplete $percent @@ -289,4 +289,4 @@ function Invoke-WPFFixesUpdate { Write-Progress -Id 8 -Activity "Deleting BITS jobs" -Completed Write-Progress -Id 9 -Activity "Starting Windows Update Services" -Completed Write-Progress -Id 10 -Activity "Forcing discovery" -Completed -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFFixesWinget.ps1 b/functions/public/Invoke-WPFFixesWinget.ps1 index d52b8141..f380c2ab 100644 --- a/functions/public/Invoke-WPFFixesWinget.ps1 +++ b/functions/public/Invoke-WPFFixesWinget.ps1 @@ -11,4 +11,4 @@ function Invoke-WPFFixesWinget { Install-WinUtilChoco Start-Process -FilePath "choco" -ArgumentList "install winget -y --force" -NoNewWindow -Wait -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFGetInstalled.ps1 b/functions/public/Invoke-WPFGetInstalled.ps1 index 9ef1c3ac..6f5a326a 100644 --- a/functions/public/Invoke-WPFGetInstalled.ps1 +++ b/functions/public/Invoke-WPFGetInstalled.ps1 @@ -10,13 +10,13 @@ function Invoke-WPFGetInstalled { #> param($checkbox) - if($sync.ProcessRunning){ + if($sync.ProcessRunning) { $msg = "[Invoke-WPFGetInstalled] Install process is currently running." [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) return } - if(((Test-WinUtilPackageManager -winget) -eq "not-installed") -and $checkbox -eq "winget"){ + if(((Test-WinUtilPackageManager -winget) -eq "not-installed") -and $checkbox -eq "winget") { return } @@ -26,17 +26,17 @@ function Invoke-WPFGetInstalled { $sync.ProcessRunning = $true $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" }) - if($checkbox -eq "winget"){ + if($checkbox -eq "winget") { Write-Host "Getting Installed Programs..." } - if($checkbox -eq "tweaks"){ + if($checkbox -eq "tweaks") { Write-Host "Getting Installed Tweaks..." } $Checkboxes = Invoke-WinUtilCurrentSystem -CheckBox $checkbox $sync.form.Dispatcher.invoke({ - foreach($checkbox in $Checkboxes){ + foreach($checkbox in $Checkboxes) { $sync.$checkbox.ischecked = $True } }) diff --git a/functions/public/Invoke-WPFGetIso.ps1 b/functions/public/Invoke-WPFGetIso.ps1 index 01390dc1..2db534c7 100644 --- a/functions/public/Invoke-WPFGetIso.ps1 +++ b/functions/public/Invoke-WPFGetIso.ps1 @@ -6,7 +6,7 @@ function Invoke-WPFGetIso { Write-Host "Invoking WPFGetIso" - if($sync.ProcessRunning){ + if($sync.ProcessRunning) { $msg = "GetIso process is currently running." [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) return @@ -18,22 +18,20 @@ function Invoke-WPFGetIso { Write-Host " _ __ __ _ " - Write-Host " /\/\ (_) ___ _ __ ___ / / /\ \ \(_) _ __ " - Write-Host " / \ | | / __|| '__| / _ \ \ \/ \/ /| || '_ \ " - Write-Host "/ /\/\ \| || (__ | | | (_) | \ /\ / | || | | | " - Write-Host "\/ \/|_| \___||_| \___/ \/ \/ |_||_| |_| " + Write-Host " /\/\ (_) ___ _ __ ___ / / /\ \ \(_) _ __ " + Write-Host " / \ | | / __|| '__| / _ \ \ \/ \/ /| || '_ \ " + Write-Host "/ /\/\ \| || (__ | | | (_) | \ /\ / | || | | | " + Write-Host "\/ \/|_| \___||_| \___/ \/ \/ |_||_| |_| " $oscdimgPath = Join-Path $env:TEMP 'oscdimg.exe' $oscdImgFound = [bool] (Get-Command -ErrorAction Ignore -Type Application oscdimg.exe) -or (Test-Path $oscdimgPath -PathType Leaf) Write-Host "oscdimg.exe on system: $oscdImgFound" - if (!$oscdImgFound) - { + if (!$oscdImgFound) { $downloadFromGitHub = $sync.WPFMicrowinDownloadFromGitHub.IsChecked $sync.BusyMessage.Visibility="Hidden" - if (!$downloadFromGitHub) - { + if (!$downloadFromGitHub) { # only show the message to people who did check the box to download from github, if you check the box # you consent to downloading it, no need to show extra dialogs [System.Windows.MessageBox]::Show("oscdimge.exe is not found on the system, winutil will now attempt do download and install it using choco. This might take a long time.") @@ -42,8 +40,7 @@ function Invoke-WPFGetIso { Install-WinUtilChoco $chocoFound = [bool] (Get-Command -ErrorAction Ignore -Type Application choco) Write-Host "choco on system: $chocoFound" - if (!$chocoFound) - { + if (!$chocoFound) { [System.Windows.MessageBox]::Show("choco.exe is not found on the system, you need choco to download oscdimg.exe") return } @@ -51,8 +48,7 @@ function Invoke-WPFGetIso { Start-Process -Verb runas -FilePath powershell.exe -ArgumentList "choco install windows-adk-oscdimg" [System.Windows.MessageBox]::Show("oscdimg is installed, now close, reopen PowerShell terminal and re-launch winutil.ps1") return - } - else { + } else { [System.Windows.MessageBox]::Show("oscdimge.exe is not found on the system, winutil will now attempt do download and install it from github. This might take a long time.") Get-Oscdimg -oscdimgPath $oscdimgPath $oscdImgFound = Test-Path $oscdimgPath -PathType Leaf @@ -60,8 +56,7 @@ function Invoke-WPFGetIso { $msg = "oscdimg was not downloaded can not proceed" [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error) return - } - else { + } else { Write-Host "oscdimg.exe was successfully downloaded from github" } } @@ -74,16 +69,14 @@ function Invoke-WPFGetIso { $openFileDialog.ShowDialog() | Out-Null $filePath = $openFileDialog.FileName - if ([string]::IsNullOrEmpty($filePath)) - { + if ([string]::IsNullOrEmpty($filePath)) { Write-Host "No ISO is chosen" $sync.BusyMessage.Visibility="Hidden" return } Write-Host "File path $($filePath)" - if (-not (Test-Path -Path $filePath -PathType Leaf)) - { + if (-not (Test-Path -Path $filePath -PathType Leaf)) { $msg = "File you've chosen doesn't exist" [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error) return @@ -98,20 +91,16 @@ function Invoke-WPFGetIso { # This is done to guarantee a dynamic solution, as the installation drive may be mounted to a letter different than C $driveSpace = (Get-Volume -DriveLetter ([IO.Path]::GetPathRoot([Environment]::GetFolderPath([Environment+SpecialFolder]::UserProfile)).Replace(":\", "").Trim())).SizeRemaining Write-Debug "Free space on installation drive: $($driveSpace) bytes" - if ($driveSpace -lt ($isoSize * 2)) - { + if ($driveSpace -lt ($isoSize * 2)) { # It's not critical and we _may_ continue. Output a warning Write-Warning "You may not have enough space for this operation. Proceed at your own risk." } - elseif ($driveSpace -lt $isoSize) - { + elseif ($driveSpace -lt $isoSize) { # It's critical and we can't continue. Output an error Write-Host "You don't have enough space for this operation. You need at least $([Math]::Round(($isoSize / ([Math]::Pow(1024, 2))) * 2, 2)) MB of free space to copy the ISO files to a temp directory and to be able to perform additional operations." Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" return - } - else - { + } else { Write-Host "You have enough space for this operation." } @@ -151,14 +140,12 @@ function Invoke-WPFGetIso { } # Detect if the folders already exist and remove them - if (($sync.MicrowinMountDir.Text -ne "") -and (Test-Path -Path $sync.MicrowinMountDir.Text)) - { + if (($sync.MicrowinMountDir.Text -ne "") -and (Test-Path -Path $sync.MicrowinMountDir.Text)) { try { Write-Host "Deleting temporary files from previous run. Please wait..." Remove-Item -Path $sync.MicrowinMountDir.Text -Recurse -Force Remove-Item -Path $sync.MicrowinScratchDir.Text -Recurse -Force - } - catch { + } catch { Write-Host "Could not delete temporary files. You need to delete those manually." } } @@ -199,16 +186,14 @@ function Invoke-WPFGetIso { $wimFile = "$mountDir\sources\install.wim" Write-Host "Getting image information $wimFile" - if ((-not (Test-Path -Path $wimFile -PathType Leaf)) -and (-not (Test-Path -Path $wimFile.Replace(".wim", ".esd").Trim() -PathType Leaf))) - { + if ((-not (Test-Path -Path $wimFile -PathType Leaf)) -and (-not (Test-Path -Path $wimFile.Replace(".wim", ".esd").Trim() -PathType Leaf))) { $msg = "Neither install.wim nor install.esd exist in the image, this could happen if you use unofficial Windows images. Please don't use shady images from the internet, use only official images. Here are instructions how to download ISO images if the Microsoft website is not showing the link to download and ISO. https://www.techrepublic.com/article/how-to-download-a-windows-10-iso-file-without-using-the-media-creation-tool/" Write-Host $msg [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error) Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" throw } - elseif ((-not (Test-Path -Path $wimFile -PathType Leaf)) -and (Test-Path -Path $wimFile.Replace(".wim", ".esd").Trim() -PathType Leaf)) - { + elseif ((-not (Test-Path -Path $wimFile -PathType Leaf)) -and (Test-Path -Path $wimFile.Replace(".wim", ".esd").Trim() -PathType Leaf)) { Write-Host "Install.esd found on the image. It needs to be converted to a WIM file in order to begin processing" $wimFile = $wimFile.Replace(".wim", ".esd").Trim() } @@ -221,8 +206,7 @@ function Invoke-WPFGetIso { $sync.MicrowinWindowsFlavors.SelectedIndex = 0 Write-Host "Finding suitable Pro edition. This can take some time. Do note that this is an automatic process that might not select the edition you want." Get-WindowsImage -ImagePath $wimFile | ForEach-Object { - if ((Get-WindowsImage -ImagePath $wimFile -Index $_.ImageIndex).EditionId -eq "Professional") - { + if ((Get-WindowsImage -ImagePath $wimFile -Index $_.ImageIndex).EditionId -eq "Professional") { # We have found the Pro edition $sync.MicrowinWindowsFlavors.SelectedIndex = $_.ImageIndex - 1 } @@ -247,5 +231,3 @@ function Invoke-WPFGetIso { $sync.ProcessRunning = $false Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" } - - diff --git a/functions/public/Invoke-WPFImpex.ps1 b/functions/public/Invoke-WPFImpex.ps1 index bbac24eb..9b03cc13 100644 --- a/functions/public/Invoke-WPFImpex.ps1 +++ b/functions/public/Invoke-WPFImpex.ps1 @@ -19,31 +19,30 @@ function Invoke-WPFImpex { $Config = $null ) - if ($type -eq "export"){ + if ($type -eq "export") { $FileBrowser = New-Object System.Windows.Forms.SaveFileDialog } - if ($type -eq "import"){ + if ($type -eq "import") { $FileBrowser = New-Object System.Windows.Forms.OpenFileDialog } - if (-not $Config){ + if (-not $Config) { $FileBrowser.InitialDirectory = [Environment]::GetFolderPath('Desktop') $FileBrowser.Filter = "JSON Files (*.json)|*.json" $FileBrowser.ShowDialog() | Out-Null - if($FileBrowser.FileName -eq ""){ + if($FileBrowser.FileName -eq "") { return - } - else{ + } else { $Config = $FileBrowser.FileName } } - if ($type -eq "export"){ + if ($type -eq "export") { $jsonFile = Get-WinUtilCheckBoxes -unCheck $false $jsonFile | ConvertTo-Json | Out-File $FileBrowser.FileName -Force } - if ($type -eq "import"){ + if ($type -eq "import") { $jsonFile = Get-Content $Config | ConvertFrom-Json $flattenedJson = @() diff --git a/functions/public/Invoke-WPFInstall.ps1 b/functions/public/Invoke-WPFInstall.ps1 index b4b0cf21..8e033228 100644 --- a/functions/public/Invoke-WPFInstall.ps1 +++ b/functions/public/Invoke-WPFInstall.ps1 @@ -6,7 +6,7 @@ function Invoke-WPFInstall { #> - if($sync.ProcessRunning){ + if($sync.ProcessRunning) { $msg = "[Invoke-WPFInstall] An Install process is currently running." [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) return @@ -23,7 +23,7 @@ function Invoke-WPFInstall { Invoke-WPFRunspace -ArgumentList $PackagesToInstall -DebugPreference $DebugPreference -ScriptBlock { param($PackagesToInstall, $DebugPreference) - if ($PackagesToInstall.count -eq 1){ + if ($PackagesToInstall.count -eq 1) { $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" }) } else { $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" }) @@ -43,15 +43,15 @@ function Invoke-WPFInstall { return $packagesWinget, $packagesChoco }.Invoke($PackagesToInstall) - try{ + try { $sync.ProcessRunning = $true $errorPackages = @() - if($packagesWinget.Count -gt 0){ + if($packagesWinget.Count -gt 0) { Install-WinUtilWinget $errorPackages += Install-WinUtilProgramWinget -ProgramsToInstall $packagesWinget $errorPackages| ForEach-Object {if($_.choco -ne "na") {$packagesChoco += $_}} } - if($packagesChoco.Count -gt 0){ + if($packagesChoco.Count -gt 0) { Install-WinUtilChoco Install-WinUtilProgramChoco -ProgramsToInstall $packagesChoco } @@ -59,8 +59,7 @@ function Invoke-WPFInstall { Write-Host "-- Installs have finished ---" Write-Host "===========================================" $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" }) - } - Catch { + } catch { Write-Host "===========================================" Write-Host "Error: $_" Write-Host "===========================================" diff --git a/functions/public/Invoke-WPFInstallUpgrade.ps1 b/functions/public/Invoke-WPFInstallUpgrade.ps1 index c62dfe1d..e30f5f1f 100644 --- a/functions/public/Invoke-WPFInstallUpgrade.ps1 +++ b/functions/public/Invoke-WPFInstallUpgrade.ps1 @@ -5,11 +5,11 @@ function Invoke-WPFInstallUpgrade { Invokes the function that upgrades all installed programs using winget #> - if((Test-WinUtilPackageManager -winget) -eq "not-installed"){ + if((Test-WinUtilPackageManager -winget) -eq "not-installed") { return } - if(Get-WinUtilInstallerProcess -Process $global:WinGetInstall){ + if(Get-WinUtilInstallerProcess -Process $global:WinGetInstall) { $msg = "[Invoke-WPFInstallUpgrade] Install process is currently running. Please check for a powershell window labeled 'Winget Install'" [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) return diff --git a/functions/public/Invoke-WPFMicrowin.ps1 b/functions/public/Invoke-WPFMicrowin.ps1 index b54e2625..1871c08a 100644 --- a/functions/public/Invoke-WPFMicrowin.ps1 +++ b/functions/public/Invoke-WPFMicrowin.ps1 @@ -5,32 +5,32 @@ function Invoke-WPFMicrowin { #> - if($sync.ProcessRunning) { + if($sync.ProcessRunning) { $msg = "GetIso process is currently running." [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) return } - # Define the constants for Windows API + # Define the constants for Windows API Add-Type @" using System; using System.Runtime.InteropServices; public class PowerManagement { - [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] - public static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags); + [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + public static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags); - [FlagsAttribute] - public enum EXECUTION_STATE : uint { - ES_SYSTEM_REQUIRED = 0x00000001, - ES_DISPLAY_REQUIRED = 0x00000002, - ES_CONTINUOUS = 0x80000000, - } + [FlagsAttribute] + public enum EXECUTION_STATE : uint { + ES_SYSTEM_REQUIRED = 0x00000001, + ES_DISPLAY_REQUIRED = 0x00000002, + ES_CONTINUOUS = 0x80000000, + } } "@ - # Prevent the machine from sleeping - [PowerManagement]::SetThreadExecutionState([PowerManagement]::EXECUTION_STATE::ES_CONTINUOUS -bor [PowerManagement]::EXECUTION_STATE::ES_SYSTEM_REQUIRED -bor [PowerManagement]::EXECUTION_STATE::ES_DISPLAY_REQUIRED) + # Prevent the machine from sleeping + [PowerManagement]::SetThreadExecutionState([PowerManagement]::EXECUTION_STATE::ES_CONTINUOUS -bor [PowerManagement]::EXECUTION_STATE::ES_SYSTEM_REQUIRED -bor [PowerManagement]::EXECUTION_STATE::ES_DISPLAY_REQUIRED) # Ask the user where to save the file $SaveDialog = New-Object System.Windows.Forms.SaveFileDialog @@ -40,422 +40,385 @@ public class PowerManagement { if ($SaveDialog.FileName -eq "") { Write-Host "No file name for the target image was specified" - Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" + Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" return } - Set-WinUtilTaskbaritem -state "Indeterminate" -overlay "logo" + Set-WinUtilTaskbaritem -state "Indeterminate" -overlay "logo" Write-Host "Target ISO location: $($SaveDialog.FileName)" - $index = $sync.MicrowinWindowsFlavors.SelectedValue.Split(":")[0].Trim() - Write-Host "Index chosen: '$index' from $($sync.MicrowinWindowsFlavors.SelectedValue)" + $index = $sync.MicrowinWindowsFlavors.SelectedValue.Split(":")[0].Trim() + Write-Host "Index chosen: '$index' from $($sync.MicrowinWindowsFlavors.SelectedValue)" - $keepPackages = $sync.WPFMicrowinKeepProvisionedPackages.IsChecked - $keepProvisionedPackages = $sync.WPFMicrowinKeepAppxPackages.IsChecked - $keepDefender = $sync.WPFMicrowinKeepDefender.IsChecked - $keepEdge = $sync.WPFMicrowinKeepEdge.IsChecked - $copyToUSB = $sync.WPFMicrowinCopyToUsb.IsChecked - $injectDrivers = $sync.MicrowinInjectDrivers.IsChecked - $importDrivers = $sync.MicrowinImportDrivers.IsChecked + $keepPackages = $sync.WPFMicrowinKeepProvisionedPackages.IsChecked + $keepProvisionedPackages = $sync.WPFMicrowinKeepAppxPackages.IsChecked + $keepDefender = $sync.WPFMicrowinKeepDefender.IsChecked + $keepEdge = $sync.WPFMicrowinKeepEdge.IsChecked + $copyToUSB = $sync.WPFMicrowinCopyToUsb.IsChecked + $injectDrivers = $sync.MicrowinInjectDrivers.IsChecked + $importDrivers = $sync.MicrowinImportDrivers.IsChecked $mountDir = $sync.MicrowinMountDir.Text $scratchDir = $sync.MicrowinScratchDir.Text - # Detect if the Windows image is an ESD file and convert it to WIM - if (-not (Test-Path -Path $mountDir\sources\install.wim -PathType Leaf) -and (Test-Path -Path $mountDir\sources\install.esd -PathType Leaf)) - { - Write-Host "Exporting Windows image to a WIM file, keeping the index we want to work on. This can take several minutes, depending on the performance of your computer..." - Export-WindowsImage -SourceImagePath $mountDir\sources\install.esd -SourceIndex $index -DestinationImagePath $mountDir\sources\install.wim -CompressionType "Max" - if ($?) - { + # Detect if the Windows image is an ESD file and convert it to WIM + if (-not (Test-Path -Path $mountDir\sources\install.wim -PathType Leaf) -and (Test-Path -Path $mountDir\sources\install.esd -PathType Leaf)) { + Write-Host "Exporting Windows image to a WIM file, keeping the index we want to work on. This can take several minutes, depending on the performance of your computer..." + Export-WindowsImage -SourceImagePath $mountDir\sources\install.esd -SourceIndex $index -DestinationImagePath $mountDir\sources\install.wim -CompressionType "Max" + if ($?) { Remove-Item -Path $mountDir\sources\install.esd -Force - # Since we've already exported the image index we wanted, switch to the first one - $index = 1 - } - else - { + # Since we've already exported the image index we wanted, switch to the first one + $index = 1 + } else { $msg = "The export process has failed and MicroWin processing cannot continue" Write-Host "Failed to export the image" [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error) - Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" + Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" return - } - } + } + } $imgVersion = (Get-WindowsImage -ImagePath $mountDir\sources\install.wim -Index $index).Version # Detect image version to avoid performing MicroWin processing on Windows 8 and earlier - if ((Test-CompatibleImage $imgVersion $([System.Version]::new(10,0,10240,0))) -eq $false) - { - $msg = "This image is not compatible with MicroWin processing. Make sure it isn't a Windows 8 or earlier image." + if ((Test-CompatibleImage $imgVersion $([System.Version]::new(10,0,10240,0))) -eq $false) { + $msg = "This image is not compatible with MicroWin processing. Make sure it isn't a Windows 8 or earlier image." $dlg_msg = $msg + "`n`nIf you want more information, the version of the image selected is $($imgVersion)`n`nIf an image has been incorrectly marked as incompatible, report an issue to the developers." - Write-Host $msg - [System.Windows.MessageBox]::Show($dlg_msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Exclamation) - Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" + Write-Host $msg + [System.Windows.MessageBox]::Show($dlg_msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Exclamation) + Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" return } - $mountDirExists = Test-Path $mountDir + $mountDirExists = Test-Path $mountDir $scratchDirExists = Test-Path $scratchDir - if (-not $mountDirExists -or -not $scratchDirExists) - { + if (-not $mountDirExists -or -not $scratchDirExists) { Write-Error "Required directories '$mountDirExists' '$scratchDirExists' and do not exist." - Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" + Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" return } - try { + try { - Write-Host "Mounting Windows image. This may take a while." + Write-Host "Mounting Windows image. This may take a while." Mount-WindowsImage -ImagePath "$mountDir\sources\install.wim" -Index $index -Path "$scratchDir" - if ($?) - { - Write-Host "Mounting complete! Performing removal of applications..." - } - else - { + if ($?) { + Write-Host "Mounting complete! Performing removal of applications..." + } else { Write-Host "Could not mount image. Exiting..." - Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" + Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" return } - if ($importDrivers) - { - Write-Host "Exporting drivers from active installation..." - if (Test-Path "$env:TEMP\DRV_EXPORT") - { - Remove-Item "$env:TEMP\DRV_EXPORT" -Recurse -Force - } - if (($injectDrivers -and (Test-Path $sync.MicrowinDriverLocation.Text))) - { - Write-Host "Using specified driver source..." - dism /english /online /export-driver /destination="$($sync.MicrowinDriverLocation.Text)" | Out-Host - if ($?) - { - # Don't add exported drivers yet, that is run later - Write-Host "Drivers have been exported successfully." - } - else - { - Write-Host "Failed to export drivers." - } - } - else - { - New-Item -Path "$env:TEMP\DRV_EXPORT" -ItemType Directory -Force - dism /english /online /export-driver /destination="$env:TEMP\DRV_EXPORT" | Out-Host - if ($?) - { - Write-Host "Adding exported drivers..." - dism /english /image="$scratchDir" /add-driver /driver="$env:TEMP\DRV_EXPORT" /recurse | Out-Host - } - else - { - Write-Host "Failed to export drivers. Continuing without importing them..." - } - if (Test-Path "$env:TEMP\DRV_EXPORT") - { - Remove-Item "$env:TEMP\DRV_EXPORT" -Recurse -Force - } - } - } + if ($importDrivers) { + Write-Host "Exporting drivers from active installation..." + if (Test-Path "$env:TEMP\DRV_EXPORT") { + Remove-Item "$env:TEMP\DRV_EXPORT" -Recurse -Force + } + if (($injectDrivers -and (Test-Path $sync.MicrowinDriverLocation.Text))) { + Write-Host "Using specified driver source..." + dism /english /online /export-driver /destination="$($sync.MicrowinDriverLocation.Text)" | Out-Host + if ($?) { + # Don't add exported drivers yet, that is run later + Write-Host "Drivers have been exported successfully." + } else { + Write-Host "Failed to export drivers." + } + } else { + New-Item -Path "$env:TEMP\DRV_EXPORT" -ItemType Directory -Force + dism /english /online /export-driver /destination="$env:TEMP\DRV_EXPORT" | Out-Host + if ($?) { + Write-Host "Adding exported drivers..." + dism /english /image="$scratchDir" /add-driver /driver="$env:TEMP\DRV_EXPORT" /recurse | Out-Host + } else { + Write-Host "Failed to export drivers. Continuing without importing them..." + } + if (Test-Path "$env:TEMP\DRV_EXPORT") { + Remove-Item "$env:TEMP\DRV_EXPORT" -Recurse -Force + } + } + } - if ($injectDrivers) - { - $driverPath = $sync.MicrowinDriverLocation.Text - if (Test-Path $driverPath) - { - Write-Host "Adding Windows Drivers image($scratchDir) drivers($driverPath) " - dism /English /image:$scratchDir /add-driver /driver:$driverPath /recurse | Out-Host - } - else - { - Write-Host "Path to drivers is invalid continuing without driver injection" - } - } + if ($injectDrivers) { + $driverPath = $sync.MicrowinDriverLocation.Text + if (Test-Path $driverPath) { + Write-Host "Adding Windows Drivers image($scratchDir) drivers($driverPath) " + dism /English /image:$scratchDir /add-driver /driver:$driverPath /recurse | Out-Host + } else { + Write-Host "Path to drivers is invalid continuing without driver injection" + } + } - Write-Host "Remove Features from the image" - Remove-Features -keepDefender:$keepDefender - Write-Host "Removing features complete!" + Write-Host "Remove Features from the image" + Remove-Features -keepDefender:$keepDefender + Write-Host "Removing features complete!" - if (!$keepPackages) - { - Write-Host "Removing OS packages" - Remove-Packages - } - if (!$keepProvisionedPackages) - { - Write-Host "Removing Appx Bloat" - Remove-ProvisionedPackages -keepSecurity:$keepDefender - } + if (!$keepPackages) { + Write-Host "Removing OS packages" + Remove-Packages + } + if (!$keepProvisionedPackages) { + Write-Host "Removing Appx Bloat" + Remove-ProvisionedPackages -keepSecurity:$keepDefender + } - # special code, for some reason when you try to delete some inbox apps - # we have to get and delete log files directory. - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\LogFiles\WMI\RtBackup" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\WebThreatDefSvc" -Directory + # special code, for some reason when you try to delete some inbox apps + # we have to get and delete log files directory. + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\LogFiles\WMI\RtBackup" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\WebThreatDefSvc" -Directory - # Defender is hidden in 2 places we removed a feature above now need to remove it from the disk - if (!$keepDefender) - { - Write-Host "Removing Defender" - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Windows Defender" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Windows Defender" - } - if (!$keepEdge) - { - Write-Host "Removing Edge" - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Microsoft" -mask "*edge*" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Microsoft" -mask "*edge*" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*edge*" -Directory - } + # Defender is hidden in 2 places we removed a feature above now need to remove it from the disk + if (!$keepDefender) { + Write-Host "Removing Defender" + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Windows Defender" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Windows Defender" + } + if (!$keepEdge) { + Write-Host "Removing Edge" + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Microsoft" -mask "*edge*" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Microsoft" -mask "*edge*" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*edge*" -Directory + } - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\DiagTrack" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\InboxApps" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\SecurityHealthSystray.exe" - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\LocationNotificationWindows.exe" - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Windows Photo Viewer" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Windows Photo Viewer" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Windows Media Player" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Windows Media Player" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Windows Mail" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Windows Mail" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Internet Explorer" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Internet Explorer" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\GameBarPresenceWriter" - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\OneDriveSetup.exe" - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\OneDrive.ico" - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*Windows.Search*" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*narratorquickstart*" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*Xbox*" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*ParentalControls*" -Directory - Write-Host "Removal complete!" + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\DiagTrack" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\InboxApps" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\SecurityHealthSystray.exe" + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\LocationNotificationWindows.exe" + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Windows Photo Viewer" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Windows Photo Viewer" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Windows Media Player" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Windows Media Player" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Windows Mail" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Windows Mail" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Internet Explorer" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Internet Explorer" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\GameBarPresenceWriter" + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\OneDriveSetup.exe" + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\OneDrive.ico" + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*Windows.Search*" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*narratorquickstart*" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*Xbox*" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*ParentalControls*" -Directory + Write-Host "Removal complete!" - Write-Host "Create unattend.xml" - New-Unattend - Write-Host "Done Create unattend.xml" - Write-Host "Copy unattend.xml file into the ISO" - New-Item -ItemType Directory -Force -Path "$($scratchDir)\Windows\Panther" - Copy-Item "$env:temp\unattend.xml" "$($scratchDir)\Windows\Panther\unattend.xml" -force - New-Item -ItemType Directory -Force -Path "$($scratchDir)\Windows\System32\Sysprep" - Copy-Item "$env:temp\unattend.xml" "$($scratchDir)\Windows\System32\Sysprep\unattend.xml" -force - Copy-Item "$env:temp\unattend.xml" "$($scratchDir)\unattend.xml" -force - Write-Host "Done Copy unattend.xml" + Write-Host "Create unattend.xml" + New-Unattend + Write-Host "Done Create unattend.xml" + Write-Host "Copy unattend.xml file into the ISO" + New-Item -ItemType Directory -Force -Path "$($scratchDir)\Windows\Panther" + Copy-Item "$env:temp\unattend.xml" "$($scratchDir)\Windows\Panther\unattend.xml" -force + New-Item -ItemType Directory -Force -Path "$($scratchDir)\Windows\System32\Sysprep" + Copy-Item "$env:temp\unattend.xml" "$($scratchDir)\Windows\System32\Sysprep\unattend.xml" -force + Copy-Item "$env:temp\unattend.xml" "$($scratchDir)\unattend.xml" -force + Write-Host "Done Copy unattend.xml" - Write-Host "Create FirstRun" - New-FirstRun - Write-Host "Done create FirstRun" - Write-Host "Copy FirstRun.ps1 into the ISO" - Copy-Item "$env:temp\FirstStartup.ps1" "$($scratchDir)\Windows\FirstStartup.ps1" -force - Write-Host "Done copy FirstRun.ps1" + Write-Host "Create FirstRun" + New-FirstRun + Write-Host "Done create FirstRun" + Write-Host "Copy FirstRun.ps1 into the ISO" + Copy-Item "$env:temp\FirstStartup.ps1" "$($scratchDir)\Windows\FirstStartup.ps1" -force + Write-Host "Done copy FirstRun.ps1" - Write-Host "Copy link to winutil.ps1 into the ISO" - $desktopDir = "$($scratchDir)\Windows\Users\Default\Desktop" - New-Item -ItemType Directory -Force -Path "$desktopDir" - dism /English /image:$($scratchDir) /set-profilepath:"$($scratchDir)\Windows\Users\Default" + Write-Host "Copy link to winutil.ps1 into the ISO" + $desktopDir = "$($scratchDir)\Windows\Users\Default\Desktop" + New-Item -ItemType Directory -Force -Path "$desktopDir" + dism /English /image:$($scratchDir) /set-profilepath:"$($scratchDir)\Windows\Users\Default" - # $command = "powershell.exe -NoProfile -ExecutionPolicy Bypass -Command 'irm https://christitus.com/win | iex'" - # $shortcutPath = "$desktopDir\WinUtil.lnk" - # $shell = New-Object -ComObject WScript.Shell - # $shortcut = $shell.CreateShortcut($shortcutPath) + # $command = "powershell.exe -NoProfile -ExecutionPolicy Bypass -Command 'irm https://christitus.com/win | iex'" + # $shortcutPath = "$desktopDir\WinUtil.lnk" + # $shell = New-Object -ComObject WScript.Shell + # $shortcut = $shell.CreateShortcut($shortcutPath) - # if (Test-Path -Path "$env:TEMP\cttlogo.png") - # { - # $pngPath = "$env:TEMP\cttlogo.png" - # $icoPath = "$env:TEMP\cttlogo.ico" - # ConvertTo-Icon -bitmapPath $pngPath -iconPath $icoPath - # Write-Host "ICO file created at: $icoPath" - # Copy-Item "$env:TEMP\cttlogo.png" "$($scratchDir)\Windows\cttlogo.png" -force - # Copy-Item "$env:TEMP\cttlogo.ico" "$($scratchDir)\Windows\cttlogo.ico" -force - # $shortcut.IconLocation = "c:\Windows\cttlogo.ico" - # } + # if (Test-Path -Path "$env:TEMP\cttlogo.png") + # { + # $pngPath = "$env:TEMP\cttlogo.png" + # $icoPath = "$env:TEMP\cttlogo.ico" + # ConvertTo-Icon -bitmapPath $pngPath -iconPath $icoPath + # Write-Host "ICO file created at: $icoPath" + # Copy-Item "$env:TEMP\cttlogo.png" "$($scratchDir)\Windows\cttlogo.png" -force + # Copy-Item "$env:TEMP\cttlogo.ico" "$($scratchDir)\Windows\cttlogo.ico" -force + # $shortcut.IconLocation = "c:\Windows\cttlogo.ico" + # } - # $shortcut.TargetPath = "powershell.exe" - # $shortcut.Arguments = "-NoProfile -ExecutionPolicy Bypass -Command `"$command`"" - # $shortcut.Save() - # Write-Host "Shortcut to winutil created at: $shortcutPath" - # *************************** Automation black *************************** + # $shortcut.TargetPath = "powershell.exe" + # $shortcut.Arguments = "-NoProfile -ExecutionPolicy Bypass -Command `"$command`"" + # $shortcut.Save() + # Write-Host "Shortcut to winutil created at: $shortcutPath" + # *************************** Automation black *************************** - Write-Host "Copy checkinstall.cmd into the ISO" - New-CheckInstall - Copy-Item "$env:temp\checkinstall.cmd" "$($scratchDir)\Windows\checkinstall.cmd" -force - Write-Host "Done copy checkinstall.cmd" + Write-Host "Copy checkinstall.cmd into the ISO" + New-CheckInstall + Copy-Item "$env:temp\checkinstall.cmd" "$($scratchDir)\Windows\checkinstall.cmd" -force + Write-Host "Done copy checkinstall.cmd" - Write-Host "Creating a directory that allows to bypass Wifi setup" - New-Item -ItemType Directory -Force -Path "$($scratchDir)\Windows\System32\OOBE\BYPASSNRO" + Write-Host "Creating a directory that allows to bypass Wifi setup" + New-Item -ItemType Directory -Force -Path "$($scratchDir)\Windows\System32\OOBE\BYPASSNRO" - Write-Host "Loading registry" - reg load HKLM\zCOMPONENTS "$($scratchDir)\Windows\System32\config\COMPONENTS" - reg load HKLM\zDEFAULT "$($scratchDir)\Windows\System32\config\default" - reg load HKLM\zNTUSER "$($scratchDir)\Users\Default\ntuser.dat" - reg load HKLM\zSOFTWARE "$($scratchDir)\Windows\System32\config\SOFTWARE" - reg load HKLM\zSYSTEM "$($scratchDir)\Windows\System32\config\SYSTEM" + Write-Host "Loading registry" + reg load HKLM\zCOMPONENTS "$($scratchDir)\Windows\System32\config\COMPONENTS" + reg load HKLM\zDEFAULT "$($scratchDir)\Windows\System32\config\default" + reg load HKLM\zNTUSER "$($scratchDir)\Users\Default\ntuser.dat" + reg load HKLM\zSOFTWARE "$($scratchDir)\Windows\System32\config\SOFTWARE" + reg load HKLM\zSYSTEM "$($scratchDir)\Windows\System32\config\SYSTEM" - Write-Host "Disabling Teams" - reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Communications" /v "ConfigureChatAutoInstall" /t REG_DWORD /d 0 /f >$null 2>&1 - reg add "HKLM\zSOFTWARE\Policies\Microsoft\Windows\Windows Chat" /v ChatIcon /t REG_DWORD /d 2 /f >$null 2>&1 - reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f >$null 2>&1 - reg query "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Communications" /v "ConfigureChatAutoInstall" >$null 2>&1 - # Write-Host Error code $LASTEXITCODE - Write-Host "Done disabling Teams" + Write-Host "Disabling Teams" + reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Communications" /v "ConfigureChatAutoInstall" /t REG_DWORD /d 0 /f >$null 2>&1 + reg add "HKLM\zSOFTWARE\Policies\Microsoft\Windows\Windows Chat" /v ChatIcon /t REG_DWORD /d 2 /f >$null 2>&1 + reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f >$null 2>&1 + reg query "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Communications" /v "ConfigureChatAutoInstall" >$null 2>&1 + # Write-Host Error code $LASTEXITCODE + Write-Host "Done disabling Teams" - Write-Host "Bypassing system requirements (system image)" - reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f - reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f - reg add "HKLM\zNTUSER\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f - reg add "HKLM\zNTUSER\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f - reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassCPUCheck" /t REG_DWORD /d 1 /f - reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassRAMCheck" /t REG_DWORD /d 1 /f - reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassSecureBootCheck" /t REG_DWORD /d 1 /f - reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassStorageCheck" /t REG_DWORD /d 1 /f - reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassTPMCheck" /t REG_DWORD /d 1 /f - reg add "HKLM\zSYSTEM\Setup\MoSetup" /v "AllowUpgradesWithUnsupportedTPMOrCPU" /t REG_DWORD /d 1 /f + Write-Host "Bypassing system requirements (system image)" + reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f + reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f + reg add "HKLM\zNTUSER\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f + reg add "HKLM\zNTUSER\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f + reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassCPUCheck" /t REG_DWORD /d 1 /f + reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassRAMCheck" /t REG_DWORD /d 1 /f + reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassSecureBootCheck" /t REG_DWORD /d 1 /f + reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassStorageCheck" /t REG_DWORD /d 1 /f + reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassTPMCheck" /t REG_DWORD /d 1 /f + reg add "HKLM\zSYSTEM\Setup\MoSetup" /v "AllowUpgradesWithUnsupportedTPMOrCPU" /t REG_DWORD /d 1 /f - if (!$keepEdge) - { - Write-Host "Removing Edge icon from taskbar" - reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband" /v "Favorites" /f >$null 2>&1 - reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband" /v "FavoritesChanges" /f >$null 2>&1 - reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband" /v "Pinned" /f >$null 2>&1 - reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband" /v "LayoutCycle" /f >$null 2>&1 - Write-Host "Edge icon removed from taskbar" - if (Test-Path "HKLM:\zSOFTWARE\WOW6432Node") - { - # Remove leftovers of 64-bit installations - # --- - # Remove registry values first... - reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge" /va /f > $null 2>&1 - reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge Update" /va /f > $null 2>&1 - reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft EdgeWebView" /va /f > $null 2>&1 - # ...then the registry keys - reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge" /f > $null 2>&1 - reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge Update" /f > $null 2>&1 - reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft EdgeWebView" /f > $null 2>&1 - } - } + if (!$keepEdge) { + Write-Host "Removing Edge icon from taskbar" + reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband" /v "Favorites" /f >$null 2>&1 + reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband" /v "FavoritesChanges" /f >$null 2>&1 + reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband" /v "Pinned" /f >$null 2>&1 + reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband" /v "LayoutCycle" /f >$null 2>&1 + Write-Host "Edge icon removed from taskbar" + if (Test-Path "HKLM:\zSOFTWARE\WOW6432Node") { + # Remove leftovers of 64-bit installations + # --- + # Remove registry values first... + reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge" /va /f > $null 2>&1 + reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge Update" /va /f > $null 2>&1 + reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft EdgeWebView" /va /f > $null 2>&1 + # ...then the registry keys + reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge" /f > $null 2>&1 + reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge Update" /f > $null 2>&1 + reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft EdgeWebView" /f > $null 2>&1 + } + } - reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f - Write-Host "Setting all services to start manually" - reg add "HKLM\zSOFTWARE\CurrentControlSet\Services" /v Start /t REG_DWORD /d 3 /f - # Write-Host $LASTEXITCODE + reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f + Write-Host "Setting all services to start manually" + reg add "HKLM\zSOFTWARE\CurrentControlSet\Services" /v Start /t REG_DWORD /d 3 /f + # Write-Host $LASTEXITCODE - Write-Host "Enabling Local Accounts on OOBE" - reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v "BypassNRO" /t REG_DWORD /d "1" /f + Write-Host "Enabling Local Accounts on OOBE" + reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v "BypassNRO" /t REG_DWORD /d "1" /f - Write-Host "Disabling Sponsored Apps" - reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OemPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f - reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f - reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f - reg add "HKLM\zSOFTWARE\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f - reg add "HKLM\zSOFTWARE\Microsoft\PolicyManager\current\device\Start" /v "ConfigureStartPins" /t REG_SZ /d '{\"pinnedList\": [{}]}' /f - Write-Host "Done removing Sponsored Apps" + Write-Host "Disabling Sponsored Apps" + reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OemPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f + reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f + reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f + reg add "HKLM\zSOFTWARE\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f + reg add "HKLM\zSOFTWARE\Microsoft\PolicyManager\current\device\Start" /v "ConfigureStartPins" /t REG_SZ /d '{\"pinnedList\": [{}]}' /f + Write-Host "Done removing Sponsored Apps" - Write-Host "Disabling Reserved Storage" - reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\ReserveManager" /v "ShippedWithReserves" /t REG_DWORD /d 0 /f + Write-Host "Disabling Reserved Storage" + reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\ReserveManager" /v "ShippedWithReserves" /t REG_DWORD /d 0 /f - Write-Host "Changing theme to dark. This only works on Activated Windows" - reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize" /v "AppsUseLightTheme" /t REG_DWORD /d 0 /f - reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize" /v "SystemUsesLightTheme" /t REG_DWORD /d 0 /f + Write-Host "Changing theme to dark. This only works on Activated Windows" + reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize" /v "AppsUseLightTheme" /t REG_DWORD /d 0 /f + reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize" /v "SystemUsesLightTheme" /t REG_DWORD /d 0 /f - } catch { + } catch { Write-Error "An unexpected error occurred: $_" } finally { - Write-Host "Unmounting Registry..." - reg unload HKLM\zCOMPONENTS - reg unload HKLM\zDEFAULT - reg unload HKLM\zNTUSER - reg unload HKLM\zSOFTWARE - reg unload HKLM\zSYSTEM + Write-Host "Unmounting Registry..." + reg unload HKLM\zCOMPONENTS + reg unload HKLM\zDEFAULT + reg unload HKLM\zNTUSER + reg unload HKLM\zSOFTWARE + reg unload HKLM\zSYSTEM - Write-Host "Cleaning up image..." - dism /English /image:$scratchDir /Cleanup-Image /StartComponentCleanup /ResetBase - Write-Host "Cleanup complete." + Write-Host "Cleaning up image..." + dism /English /image:$scratchDir /Cleanup-Image /StartComponentCleanup /ResetBase + Write-Host "Cleanup complete." - Write-Host "Unmounting image..." + Write-Host "Unmounting image..." Dismount-WindowsImage -Path $scratchDir -Save - } + } - try { + try { - Write-Host "Exporting image into $mountDir\sources\install2.wim" + Write-Host "Exporting image into $mountDir\sources\install2.wim" Export-WindowsImage -SourceImagePath "$mountDir\sources\install.wim" -SourceIndex $index -DestinationImagePath "$mountDir\sources\install2.wim" -CompressionType "Max" - Write-Host "Remove old '$mountDir\sources\install.wim' and rename $mountDir\sources\install2.wim" - Remove-Item "$mountDir\sources\install.wim" - Rename-Item "$mountDir\sources\install2.wim" "$mountDir\sources\install.wim" + Write-Host "Remove old '$mountDir\sources\install.wim' and rename $mountDir\sources\install2.wim" + Remove-Item "$mountDir\sources\install.wim" + Rename-Item "$mountDir\sources\install2.wim" "$mountDir\sources\install.wim" - if (-not (Test-Path -Path "$mountDir\sources\install.wim")) - { - Write-Error "Something went wrong and '$mountDir\sources\install.wim' doesn't exist. Please report this bug to the devs" - Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" - return - } - Write-Host "Windows image completed. Continuing with boot.wim." + if (-not (Test-Path -Path "$mountDir\sources\install.wim")) { + Write-Error "Something went wrong and '$mountDir\sources\install.wim' doesn't exist. Please report this bug to the devs" + Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" + return + } + Write-Host "Windows image completed. Continuing with boot.wim." - # Next step boot image - Write-Host "Mounting boot image $mountDir\sources\boot.wim into $scratchDir" + # Next step boot image + Write-Host "Mounting boot image $mountDir\sources\boot.wim into $scratchDir" Mount-WindowsImage -ImagePath "$mountDir\sources\boot.wim" -Index 2 -Path "$scratchDir" - if ($injectDrivers) - { - $driverPath = $sync.MicrowinDriverLocation.Text - if (Test-Path $driverPath) - { - Write-Host "Adding Windows Drivers image($scratchDir) drivers($driverPath) " - dism /English /image:$scratchDir /add-driver /driver:$driverPath /recurse | Out-Host - } - else - { - Write-Host "Path to drivers is invalid continuing without driver injection" - } - } + if ($injectDrivers) { + $driverPath = $sync.MicrowinDriverLocation.Text + if (Test-Path $driverPath) { + Write-Host "Adding Windows Drivers image($scratchDir) drivers($driverPath) " + dism /English /image:$scratchDir /add-driver /driver:$driverPath /recurse | Out-Host + } else { + Write-Host "Path to drivers is invalid continuing without driver injection" + } + } - Write-Host "Loading registry..." - reg load HKLM\zCOMPONENTS "$($scratchDir)\Windows\System32\config\COMPONENTS" >$null - reg load HKLM\zDEFAULT "$($scratchDir)\Windows\System32\config\default" >$null - reg load HKLM\zNTUSER "$($scratchDir)\Users\Default\ntuser.dat" >$null - reg load HKLM\zSOFTWARE "$($scratchDir)\Windows\System32\config\SOFTWARE" >$null - reg load HKLM\zSYSTEM "$($scratchDir)\Windows\System32\config\SYSTEM" >$null - Write-Host "Bypassing system requirements on the setup image" - reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f - reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f - reg add "HKLM\zNTUSER\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f - reg add "HKLM\zNTUSER\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f - reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassCPUCheck" /t REG_DWORD /d 1 /f - reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassRAMCheck" /t REG_DWORD /d 1 /f - reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassSecureBootCheck" /t REG_DWORD /d 1 /f - reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassStorageCheck" /t REG_DWORD /d 1 /f - reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassTPMCheck" /t REG_DWORD /d 1 /f - reg add "HKLM\zSYSTEM\Setup\MoSetup" /v "AllowUpgradesWithUnsupportedTPMOrCPU" /t REG_DWORD /d 1 /f - # Fix Computer Restarted Unexpectedly Error on New Bare Metal Install - reg add "HKLM\zSYSTEM\Setup\Status\ChildCompletion" /v "setup.exe" /t REG_DWORD /d 3 /f - } catch { + Write-Host "Loading registry..." + reg load HKLM\zCOMPONENTS "$($scratchDir)\Windows\System32\config\COMPONENTS" >$null + reg load HKLM\zDEFAULT "$($scratchDir)\Windows\System32\config\default" >$null + reg load HKLM\zNTUSER "$($scratchDir)\Users\Default\ntuser.dat" >$null + reg load HKLM\zSOFTWARE "$($scratchDir)\Windows\System32\config\SOFTWARE" >$null + reg load HKLM\zSYSTEM "$($scratchDir)\Windows\System32\config\SYSTEM" >$null + Write-Host "Bypassing system requirements on the setup image" + reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f + reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f + reg add "HKLM\zNTUSER\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f + reg add "HKLM\zNTUSER\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f + reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassCPUCheck" /t REG_DWORD /d 1 /f + reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassRAMCheck" /t REG_DWORD /d 1 /f + reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassSecureBootCheck" /t REG_DWORD /d 1 /f + reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassStorageCheck" /t REG_DWORD /d 1 /f + reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassTPMCheck" /t REG_DWORD /d 1 /f + reg add "HKLM\zSYSTEM\Setup\MoSetup" /v "AllowUpgradesWithUnsupportedTPMOrCPU" /t REG_DWORD /d 1 /f + # Fix Computer Restarted Unexpectedly Error on New Bare Metal Install + reg add "HKLM\zSYSTEM\Setup\Status\ChildCompletion" /v "setup.exe" /t REG_DWORD /d 3 /f + } catch { Write-Error "An unexpected error occurred: $_" } finally { - Write-Host "Unmounting Registry..." - reg unload HKLM\zCOMPONENTS - reg unload HKLM\zDEFAULT - reg unload HKLM\zNTUSER - reg unload HKLM\zSOFTWARE - reg unload HKLM\zSYSTEM + Write-Host "Unmounting Registry..." + reg unload HKLM\zCOMPONENTS + reg unload HKLM\zDEFAULT + reg unload HKLM\zNTUSER + reg unload HKLM\zSOFTWARE + reg unload HKLM\zSYSTEM - Write-Host "Unmounting image..." + Write-Host "Unmounting image..." Dismount-WindowsImage -Path $scratchDir -Save - Write-Host "Creating ISO image" + Write-Host "Creating ISO image" - # if we downloaded oscdimg from github it will be in the temp directory so use it - # if it is not in temp it is part of ADK and is in global PATH so just set it to oscdimg.exe - $oscdimgPath = Join-Path $env:TEMP 'oscdimg.exe' - $oscdImgFound = Test-Path $oscdimgPath -PathType Leaf - if (!$oscdImgFound) - { - $oscdimgPath = "oscdimg.exe" - } + # if we downloaded oscdimg from github it will be in the temp directory so use it + # if it is not in temp it is part of ADK and is in global PATH so just set it to oscdimg.exe + $oscdimgPath = Join-Path $env:TEMP 'oscdimg.exe' + $oscdImgFound = Test-Path $oscdimgPath -PathType Leaf + if (!$oscdImgFound) { + $oscdimgPath = "oscdimg.exe" + } - Write-Host "[INFO] Using oscdimg.exe from: $oscdimgPath" - #& oscdimg.exe -m -o -u2 -udfver102 -bootdata:2#p0,e,b$mountDir\boot\etfsboot.com#pEF,e,b$mountDir\efi\microsoft\boot\efisys.bin $mountDir $env:temp\microwin.iso - #Start-Process -FilePath $oscdimgPath -ArgumentList "-m -o -u2 -udfver102 -bootdata:2#p0,e,b$mountDir\boot\etfsboot.com#pEF,e,b$mountDir\efi\microsoft\boot\efisys.bin $mountDir $env:temp\microwin.iso" -NoNewWindow -Wait - #Start-Process -FilePath $oscdimgPath -ArgumentList '-m -o -u2 -udfver102 -bootdata:2#p0,e,b$mountDir\boot\etfsboot.com#pEF,e,b$mountDir\efi\microsoft\boot\efisys.bin $mountDir `"$($SaveDialog.FileName)`"' -NoNewWindow -Wait + Write-Host "[INFO] Using oscdimg.exe from: $oscdimgPath" + #& oscdimg.exe -m -o -u2 -udfver102 -bootdata:2#p0,e,b$mountDir\boot\etfsboot.com#pEF,e,b$mountDir\efi\microsoft\boot\efisys.bin $mountDir $env:temp\microwin.iso + #Start-Process -FilePath $oscdimgPath -ArgumentList "-m -o -u2 -udfver102 -bootdata:2#p0,e,b$mountDir\boot\etfsboot.com#pEF,e,b$mountDir\efi\microsoft\boot\efisys.bin $mountDir $env:temp\microwin.iso" -NoNewWindow -Wait + #Start-Process -FilePath $oscdimgPath -ArgumentList '-m -o -u2 -udfver102 -bootdata:2#p0,e,b$mountDir\boot\etfsboot.com#pEF,e,b$mountDir\efi\microsoft\boot\efisys.bin $mountDir `"$($SaveDialog.FileName)`"' -NoNewWindow -Wait $oscdimgProc = New-Object System.Diagnostics.Process $oscdimgProc.StartInfo.FileName = $oscdimgPath $oscdimgProc.StartInfo.Arguments = "-m -o -u2 -udfver102 -bootdata:2#p0,e,b$mountDir\boot\etfsboot.com#pEF,e,b$mountDir\efi\microsoft\boot\efisys.bin $mountDir `"$($SaveDialog.FileName)`"" @@ -465,41 +428,40 @@ public class PowerManagement { $oscdimgProc.Start() $oscdimgProc.WaitForExit() - if ($copyToUSB) - { - Write-Host "Copying target ISO to the USB drive" - #Copy-ToUSB("$env:temp\microwin.iso") - Copy-ToUSB("$($SaveDialog.FileName)") - if ($?) { Write-Host "Done Copying target ISO to USB drive!" } else { Write-Host "ISO copy failed." } - } + if ($copyToUSB) { + Write-Host "Copying target ISO to the USB drive" + #Copy-ToUSB("$env:temp\microwin.iso") + Copy-ToUSB("$($SaveDialog.FileName)") + if ($?) { Write-Host "Done Copying target ISO to USB drive!" } else { Write-Host "ISO copy failed." } + } - Write-Host " _____ " - Write-Host "(____ \ " - Write-Host " _ \ \ ___ ____ ____ " - Write-Host "| | | / _ \| _ \ / _ ) " - Write-Host "| |__/ / |_| | | | ( (/ / " - Write-Host "|_____/ \___/|_| |_|\____) " + Write-Host " _____ " + Write-Host "(____ \ " + Write-Host " _ \ \ ___ ____ ____ " + Write-Host "| | | / _ \| _ \ / _ ) " + Write-Host "| |__/ / |_| | | | ( (/ / " + Write-Host "|_____/ \___/|_| |_|\____) " - # Check if the ISO was successfully created - CTT edit - if ($LASTEXITCODE -eq 0) { - Write-Host "`n`nPerforming Cleanup..." - Remove-Item -Recurse -Force "$($scratchDir)" - Remove-Item -Recurse -Force "$($mountDir)" - #$msg = "Done. ISO image is located here: $env:temp\microwin.iso" - $msg = "Done. ISO image is located here: $($SaveDialog.FileName)" - Write-Host $msg - Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" - [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Information) - } else { - Write-Host "ISO creation failed. The "$($mountDir)" directory has not been removed." - } + # Check if the ISO was successfully created - CTT edit + if ($LASTEXITCODE -eq 0) { + Write-Host "`n`nPerforming Cleanup..." + Remove-Item -Recurse -Force "$($scratchDir)" + Remove-Item -Recurse -Force "$($mountDir)" + #$msg = "Done. ISO image is located here: $env:temp\microwin.iso" + $msg = "Done. ISO image is located here: $($SaveDialog.FileName)" + Write-Host $msg + Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" + [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Information) + } else { + Write-Host "ISO creation failed. The "$($mountDir)" directory has not been removed." + } - $sync.MicrowinOptionsPanel.Visibility = 'Collapsed' + $sync.MicrowinOptionsPanel.Visibility = 'Collapsed' - #$sync.MicrowinFinalIsoLocation.Text = "$env:temp\microwin.iso" + #$sync.MicrowinFinalIsoLocation.Text = "$env:temp\microwin.iso" $sync.MicrowinFinalIsoLocation.Text = "$($SaveDialog.FileName)" - # Allow the machine to sleep again (optional) - [PowerManagement]::SetThreadExecutionState(0) - $sync.ProcessRunning = $false - } -} \ No newline at end of file + # Allow the machine to sleep again (optional) + [PowerManagement]::SetThreadExecutionState(0) + $sync.ProcessRunning = $false + } +} diff --git a/functions/public/Invoke-WPFOOSU.ps1 b/functions/public/Invoke-WPFOOSU.ps1 index 4d61c83f..e2522d3d 100644 --- a/functions/public/Invoke-WPFOOSU.ps1 +++ b/functions/public/Invoke-WPFOOSU.ps1 @@ -10,11 +10,10 @@ function Invoke-WPFOOSU { Invoke-WebRequest -Uri "https://dl5.oo-software.com/files/ooshutup10/OOSU10.exe" -OutFile $OOSU_filepath Write-Host "Starting OO Shutup 10 ..." Start-Process $OOSU_filepath - } - catch { + } catch { Write-Host "Error Downloading and Running OO Shutup 10" -ForegroundColor Red } finally { $ProgressPreference = $Initial_ProgressPreference } -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFPanelDISM.ps1 b/functions/public/Invoke-WPFPanelDISM.ps1 index a1d266cf..31b36364 100644 --- a/functions/public/Invoke-WPFPanelDISM.ps1 +++ b/functions/public/Invoke-WPFPanelDISM.ps1 @@ -27,4 +27,4 @@ function Invoke-WPFPanelDISM { Write-Host '`n(3/4) DISM' -ForegroundColor Green; DISM /Online /Cleanup-Image /Restorehealth; Write-Host '`n(4/4) SFC - 2nd scan' -ForegroundColor Green; sfc /scannow; Read-Host '`nPress Enter to Continue'" -verb runas -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFPresets.ps1 b/functions/public/Invoke-WPFPresets.ps1 index dde2ce78..1595a8f1 100644 --- a/functions/public/Invoke-WPFPresets.ps1 +++ b/functions/public/Invoke-WPFPresets.ps1 @@ -20,10 +20,9 @@ function Invoke-WPFPresets { [bool]$imported = $false ) - if($imported -eq $true){ + if($imported -eq $true) { $CheckBoxesToCheck = $preset - } - Else{ + } else { $CheckBoxesToCheck = $sync.configs.preset.$preset } @@ -39,8 +38,7 @@ function Invoke-WPFPresets { foreach ($CheckBox in $CheckBoxes) { $checkboxName = $CheckBox.Key - if (-not $CheckBoxesToCheck) - { + if (-not $CheckBoxesToCheck) { $sync.$checkboxName.IsChecked = $false continue } diff --git a/functions/public/Invoke-WPFRunspace.ps1 b/functions/public/Invoke-WPFRunspace.ps1 index cb624ef3..dfb3a6cd 100644 --- a/functions/public/Invoke-WPFRunspace.ps1 +++ b/functions/public/Invoke-WPFRunspace.ps1 @@ -38,12 +38,11 @@ function Invoke-WPFRunspace { $script:handle = $script:powershell.BeginInvoke() # Clean up the RunspacePool threads when they are complete, and invoke the garbage collector to clean up the memory - if ($script:handle.IsCompleted) - { + if ($script:handle.IsCompleted) { $script:powershell.EndInvoke($script:handle) $script:powershell.Dispose() $sync.runspace.Dispose() $sync.runspace.Close() [System.GC]::Collect() } -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFShortcut.ps1 b/functions/public/Invoke-WPFShortcut.ps1 index 513ede95..e759eb20 100644 --- a/functions/public/Invoke-WPFShortcut.ps1 +++ b/functions/public/Invoke-WPFShortcut.ps1 @@ -22,10 +22,9 @@ function Invoke-WPFShortcut { Switch ($ShortcutToAdd) { "WinUtil" { # Use Powershell 7 if installed and fallback to PS5 if not - if (Get-Command "pwsh" -ErrorAction SilentlyContinue){ + if (Get-Command "pwsh" -ErrorAction SilentlyContinue) { $shell = "pwsh.exe" - } - else{ + } else { $shell = "powershell.exe" } diff --git a/functions/public/Invoke-WPFTab.ps1 b/functions/public/Invoke-WPFTab.ps1 index 644348d9..7333467f 100644 --- a/functions/public/Invoke-WPFTab.ps1 +++ b/functions/public/Invoke-WPFTab.ps1 @@ -21,8 +21,7 @@ function Invoke-WPFTab { $sync[$PSItem.Name].IsChecked = $false # $tabNumber = [int]($PSItem.Name -replace "WPFTab","" -replace "BT","") - 1 # $sync.$tabNav.Items[$tabNumber].IsSelected = $false - } - else { + } else { $sync["$ClickedTab"].IsChecked = $true $tabNumber = [int]($ClickedTab-replace "WPFTab","" -replace "BT","") - 1 $sync.$tabNav.Items[$tabNumber].IsSelected = $true diff --git a/functions/public/Invoke-WPFToggle.ps1 b/functions/public/Invoke-WPFToggle.ps1 index 539878c7..c1bdc1c8 100644 --- a/functions/public/Invoke-WPFToggle.ps1 +++ b/functions/public/Invoke-WPFToggle.ps1 @@ -15,7 +15,7 @@ function Invoke-WPFToggle { # Use this to get the name of the button #[System.Windows.MessageBox]::Show("$Button","Chris Titus Tech's Windows Utility","OK","Info") - Switch -Wildcard ($Button){ + Switch -Wildcard ($Button) { "WPFToggleDarkMode" {Invoke-WinUtilDarkMode -DarkMoveEnabled $(Get-WinUtilToggleStatus WPFToggleDarkMode)} "WPFToggleBingSearch" {Invoke-WinUtilBingSearch $(Get-WinUtilToggleStatus WPFToggleBingSearch)} diff --git a/functions/public/Invoke-WPFTweakPS7.ps1 b/functions/public/Invoke-WPFTweakPS7.ps1 index ce7fc131..830d2a3c 100644 --- a/functions/public/Invoke-WPFTweakPS7.ps1 +++ b/functions/public/Invoke-WPFTweakPS7.ps1 @@ -26,13 +26,13 @@ function Invoke-WPFTweakPS7{ } } # Check if the Windows Terminal is installed and return if not (Prerequisite for the following code) - if (-not (Get-Command "wt" -ErrorAction SilentlyContinue)){ + if (-not (Get-Command "wt" -ErrorAction SilentlyContinue)) { Write-Host "Windows Terminal not installed. Skipping Terminal preference" return } # Check if the Windows Terminal settings.json file exists and return if not (Prereqisite for the following code) $settingsPath = "$env:LOCALAPPDATA\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json" - if (-not (Test-Path -Path $settingsPath)){ + if (-not (Test-Path -Path $settingsPath)) { Write-Host "Windows Terminal Settings file not found at $settingsPath" return } diff --git a/functions/public/Invoke-WPFUltimatePerformance.ps1 b/functions/public/Invoke-WPFUltimatePerformance.ps1 index d1a12780..8000b420 100644 --- a/functions/public/Invoke-WPFUltimatePerformance.ps1 +++ b/functions/public/Invoke-WPFUltimatePerformance.ps1 @@ -9,10 +9,10 @@ Function Invoke-WPFUltimatePerformance { #> param($State) - Try{ + try { # Check if Ultimate Performance plan is installed $ultimatePlan = powercfg -list | Select-String -Pattern "Ultimate Performance" - if($state -eq "Enable"){ + if($state -eq "Enable") { if ($ultimatePlan) { Write-Host "Ultimate Performance plan is already installed." } else { @@ -29,7 +29,7 @@ Function Invoke-WPFUltimatePerformance { } - elseif($state -eq "Disable"){ + elseif($state -eq "Disable") { if ($ultimatePlan) { # Extract the GUID of the Ultimate Performance plan $ultimatePlanGUID = $ultimatePlan.Line.Split()[3] @@ -47,7 +47,7 @@ Function Invoke-WPFUltimatePerformance { Write-Host "Ultimate Performance plan is not installed." } } - } Catch{ + } catch { Write-Warning $psitem.Exception.Message } -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFUnInstall.ps1 b/functions/public/Invoke-WPFUnInstall.ps1 index e0195ada..528194dc 100644 --- a/functions/public/Invoke-WPFUnInstall.ps1 +++ b/functions/public/Invoke-WPFUnInstall.ps1 @@ -6,7 +6,7 @@ function Invoke-WPFUnInstall { #> - if($sync.ProcessRunning){ + if($sync.ProcessRunning) { $msg = "[Invoke-WPFUnInstall] Install process is currently running" [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) return @@ -27,12 +27,12 @@ function Invoke-WPFUnInstall { $confirm = [System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon) - if($confirm -eq "No"){return} + if($confirm -eq "No") {return} Invoke-WPFRunspace -ArgumentList $PackagesToInstall -DebugPreference $DebugPreference -ScriptBlock { param($PackagesToInstall, $DebugPreference) - if ($PackagesToInstall.count -eq 1){ + if ($PackagesToInstall.count -eq 1) { $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" }) } else { $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" }) @@ -51,14 +51,14 @@ function Invoke-WPFUnInstall { } return $packagesWinget, $packagesChoco }.Invoke($PackagesToInstall) - try{ + try { $sync.ProcessRunning = $true # Install all selected programs in new window - if($packagesWinget.Count -gt 0){ + if($packagesWinget.Count -gt 0) { Install-WinUtilProgramWinget -ProgramsToInstall $packagesWinget -Manage "Uninstalling" } - if($packagesChoco.Count -gt 0){ + if($packagesChoco.Count -gt 0) { Install-WinUtilProgramChoco -ProgramsToInstall $packagesChoco -Manage "Uninstalling" } @@ -68,8 +68,7 @@ function Invoke-WPFUnInstall { Write-Host "-- Uninstalls have finished ---" Write-Host "===========================================" $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" }) - } - Catch { + } catch { Write-Host "===========================================" Write-Host "Error: $_" Write-Host "===========================================" diff --git a/functions/public/Invoke-WPFUpdatesdefault.ps1 b/functions/public/Invoke-WPFUpdatesdefault.ps1 index 3e1cebdd..0b786f32 100644 --- a/functions/public/Invoke-WPFUpdatesdefault.ps1 +++ b/functions/public/Invoke-WPFUpdatesdefault.ps1 @@ -42,4 +42,4 @@ function Invoke-WPFUpdatesdefault { Write-Host "===================================================" Write-Host "--- Windows Update Settings Reset to Default ---" Write-Host "===================================================" -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFUpdatesdisable.ps1 b/functions/public/Invoke-WPFUpdatesdisable.ps1 index 3167039f..d3f28815 100644 --- a/functions/public/Invoke-WPFUpdatesdisable.ps1 +++ b/functions/public/Invoke-WPFUpdatesdisable.ps1 @@ -32,4 +32,4 @@ function Invoke-WPFUpdatesdisable { Write-Host "=================================" Write-Host "--- Updates ARE DISABLED ---" Write-Host "=================================" -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFUpdatessecurity.ps1 b/functions/public/Invoke-WPFUpdatessecurity.ps1 index e310d6a4..ed7fe937 100644 --- a/functions/public/Invoke-WPFUpdatessecurity.ps1 +++ b/functions/public/Invoke-WPFUpdatessecurity.ps1 @@ -50,4 +50,4 @@ function Invoke-WPFUpdatessecurity { Write-Host "=================================" Write-Host "-- Updates Set to Recommended ---" Write-Host "=================================" -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFtweaksbutton.ps1 b/functions/public/Invoke-WPFtweaksbutton.ps1 index 79bcfbbd..e38ec8b2 100644 --- a/functions/public/Invoke-WPFtweaksbutton.ps1 +++ b/functions/public/Invoke-WPFtweaksbutton.ps1 @@ -6,7 +6,7 @@ function Invoke-WPFtweaksbutton { #> - if($sync.ProcessRunning){ + if($sync.ProcessRunning) { $msg = "[Invoke-WPFtweaksbutton] Install process is currently running." [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) return @@ -16,7 +16,7 @@ function Invoke-WPFtweaksbutton { Set-WinUtilDNS -DNSProvider $sync["WPFchangedns"].text - if ($tweaks.count -eq 0 -and $sync["WPFchangedns"].text -eq "Default"){ + if ($tweaks.count -eq 0 -and $sync["WPFchangedns"].text -eq "Default") { $msg = "Please check the tweaks you wish to perform." [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) return @@ -30,7 +30,7 @@ function Invoke-WPFtweaksbutton { $sync.ProcessRunning = $true - if ($Tweaks.count -eq 1){ + if ($Tweaks.count -eq 1) { $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" }) } else { $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" }) @@ -56,4 +56,4 @@ function Invoke-WPFtweaksbutton { # $MessageIcon = [System.Windows.MessageBoxImage]::Information # [System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon) } -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFundoall.ps1 b/functions/public/Invoke-WPFundoall.ps1 index d706b815..a65940e8 100644 --- a/functions/public/Invoke-WPFundoall.ps1 +++ b/functions/public/Invoke-WPFundoall.ps1 @@ -6,7 +6,7 @@ function Invoke-WPFundoall { #> - if($sync.ProcessRunning){ + if($sync.ProcessRunning) { $msg = "[Invoke-WPFundoall] Install process is currently running." [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) return @@ -14,7 +14,7 @@ function Invoke-WPFundoall { $Tweaks = (Get-WinUtilCheckBoxes)["WPFTweaks"] - if ($tweaks.count -eq 0){ + if ($tweaks.count -eq 0) { $msg = "Please check the tweaks you wish to undo." [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) return @@ -24,14 +24,14 @@ function Invoke-WPFundoall { param($Tweaks, $DebugPreference) $sync.ProcessRunning = $true - if ($Tweaks.count -eq 1){ + if ($Tweaks.count -eq 1) { $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" }) } else { $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" }) } $cnt = 0 - Foreach ($tweak in $tweaks){ + Foreach ($tweak in $tweaks) { Invoke-WinUtilTweaks $tweak -undo $true $cnt += 1 $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -value ($cnt/$Tweaks.Count) }) @@ -202,4 +202,4 @@ function Invoke-WPFundoall { Write-Host "--- Undo All is Finished ---" Write-Host "=================================" #> -} \ No newline at end of file +} diff --git a/gpedit-home.ps1 b/gpedit-home.ps1 index a4931963..43c552a3 100644 --- a/gpedit-home.ps1 +++ b/gpedit-home.ps1 @@ -1,4 +1,4 @@ Get-ChildItem @( "$env:SystemRoot\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientTools-Package*.mum", "$env:SystemRoot\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package*.mum" -) | ForEach-Object { dism.exe /online /norestart /add-package:"$_" } \ No newline at end of file +) | ForEach-Object { dism.exe /online /norestart /add-package:"$_" } diff --git a/lint/PSScriptAnalyser.ps1 b/lint/PSScriptAnalyser.ps1 index 20a9080f..47feae83 100644 --- a/lint/PSScriptAnalyser.ps1 +++ b/lint/PSScriptAnalyser.ps1 @@ -22,4 +22,4 @@ # Note: if a rule is in both IncludeRules and ExcludeRules, the rule # will be excluded. ExcludeRules = @('PSAvoidUsingWriteHost') -} \ No newline at end of file +} diff --git a/overrides/main.html b/overrides/main.html index f680422d..f5f0eb39 100644 --- a/overrides/main.html +++ b/overrides/main.html @@ -2,4 +2,4 @@ {% block footer %} {# Empty block to override the footer #} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/pester/configs.Tests.ps1 b/pester/configs.Tests.ps1 index 6a0a76bd..dd2db7f3 100644 --- a/pester/configs.Tests.ps1 +++ b/pester/configs.Tests.ps1 @@ -25,19 +25,19 @@ Describe "Config Files" -ForEach @( name = "tweaks" undo = $true } -){ +) { Context "$name config file" { It "Imports with no errors" { $global:importedconfigs.$name | should -Not -BeNullOrEmpty } - if ($config){ + if ($config) { It "Imports should be the correct structure" { $applications = $global:importedconfigs.$name | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty name $template = $config | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty name $result = New-Object System.Collections.Generic.List[System.Object] Foreach ($application in $applications) { $compare = $global:importedconfigs.$name.$application | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty name - if ($(Compare-Object $compare $template) -ne $null){ + if ($(Compare-Object $compare $template) -ne $null) { $result.Add($application) } } @@ -45,12 +45,12 @@ Describe "Config Files" -ForEach @( $result | Select-String "WPF*" | should -BeNullOrEmpty } } - if($undo){ + if($undo) { It "Tweaks should contain original Value" { $tweaks = $global:importedconfigs.$name | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty name $result = New-Object System.Collections.Generic.List[System.Object] - foreach ($tweak in $tweaks){ + foreach ($tweak in $tweaks) { $Originals = @( @{ name = "registry" @@ -65,10 +65,10 @@ Describe "Config Files" -ForEach @( value = "OriginalState" } ) - Foreach ($original in $Originals){ + Foreach ($original in $Originals) { $TotalCount = ($global:importedconfigs.$name.$tweak.$($original.name)).count $OriginalCount = ($global:importedconfigs.$name.$tweak.$($original.name).$($original.value) | Where-Object {$_}).count - if($TotalCount -ne $OriginalCount){ + if($TotalCount -ne $OriginalCount) { $result.Add("$Tweak,$($original.name)") } } @@ -78,4 +78,4 @@ Describe "Config Files" -ForEach @( } } -} \ No newline at end of file +} diff --git a/scripts/main.ps1 b/scripts/main.ps1 index 248bf605..c1d476f4 100644 --- a/scripts/main.ps1 +++ b/scripts/main.ps1 @@ -11,7 +11,7 @@ $InitialSessionState.Variables.Add($hashVars) # Get every private function and add them to the session state $functions = (Get-ChildItem function:\).where{$_.name -like "*winutil*" -or $_.name -like "*WPF*"} -foreach ($function in $functions){ +foreach ($function in $functions) { $functionDefinition = Get-Content function:\$($function.name) $functionEntry = New-Object System.Management.Automation.Runspaces.SessionStateFunctionEntry -ArgumentList $($function.name), $functionDefinition @@ -55,12 +55,10 @@ $inputXML = $inputXML -replace 'mc:Ignorable="d"', '' -replace "x:N", 'N' -repla if ((Get-WinUtilToggleStatus WPFToggleDarkMode) -eq $True) { if (Invoke-WinUtilGPU -eq $True) { $ctttheme = 'Matrix' - } - else { + } else { $ctttheme = 'Dark' } -} -else { +} else { $ctttheme = 'Classic' } $inputXML = Set-WinUtilUITheme -inputXML $inputXML -themeName $ctttheme @@ -90,9 +88,9 @@ try { $xaml.SelectNodes("//*[@Name]") | ForEach-Object {$sync["$("$($psitem.Name)")"] = $sync["Form"].FindName($psitem.Name)} $sync.keys | ForEach-Object { - if($sync.$psitem){ + if($sync.$psitem) { if($($sync["$psitem"].GetType() | Select-Object -ExpandProperty Name) -eq "CheckBox" ` - -and $sync["$psitem"].Name -like "WPFToggle*"){ + -and $sync["$psitem"].Name -like "WPFToggle*") { $sync["$psitem"].IsChecked = Get-WinUtilToggleStatus $sync["$psitem"].Name $sync["$psitem"].Add_Click({ @@ -101,14 +99,14 @@ $sync.keys | ForEach-Object { }) } - if($($sync["$psitem"].GetType() | Select-Object -ExpandProperty Name) -eq "ToggleButton"){ + if($($sync["$psitem"].GetType() | Select-Object -ExpandProperty Name) -eq "ToggleButton") { $sync["$psitem"].Add_Click({ [System.Object]$Sender = $args[0] Invoke-WPFButton $Sender.name }) } - if($($sync["$psitem"].GetType() | Select-Object -ExpandProperty Name) -eq "Button"){ + if($($sync["$psitem"].GetType() | Select-Object -ExpandProperty Name) -eq "Button") { $sync["$psitem"].Add_Click({ [System.Object]$Sender = $args[0] Invoke-WPFButton $Sender.name @@ -134,7 +132,7 @@ $sync.keys | ForEach-Object { # Load computer information in the background Invoke-WPFRunspace -ScriptBlock { - try{ + try { $oldProgressPreference = $ProgressPreference $ProgressPreference = "SilentlyContinue" $sync.ConfigLoaded = $False @@ -179,8 +177,7 @@ $commonKeyEvents = { return } - if ($_.Key -eq "Escape") - { + if ($_.Key -eq "Escape") { $sync.SearchBar.SelectAll() $sync.SearchBar.Text = "" $sync.SearchBarClearButton.Visibility = "Collapsed" @@ -188,8 +185,7 @@ $commonKeyEvents = { } # don't ask, I know what I'm doing, just go... - if (($_.Key -eq "Q" -and $_.KeyboardDevice.Modifiers -eq "Ctrl")) - { + if (($_.Key -eq "Q" -and $_.KeyboardDevice.Modifiers -eq "Ctrl")) { $this.Close() } if ($_.KeyboardDevice.Modifiers -eq "Alt") { @@ -232,12 +228,9 @@ $sync["Form"].Add_MouseLeftButtonDown({ }) $sync["Form"].Add_MouseDoubleClick({ - if ($sync["Form"].WindowState -eq [Windows.WindowState]::Normal) - { + if ($sync["Form"].WindowState -eq [Windows.WindowState]::Normal) { $sync["Form"].WindowState = [Windows.WindowState]::Maximized; - } - else - { + } else { $sync["Form"].WindowState = [Windows.WindowState]::Normal; } }) @@ -283,11 +276,11 @@ Add-Type @" foreach ($proc in (Get-Process).where{ $_.MainWindowTitle -and $_.MainWindowTitle -like "*titus*" }) { # Check if the process's MainWindowHandle is valid - if ($proc.MainWindowHandle -ne [System.IntPtr]::Zero) { + if ($proc.MainWindowHandle -ne [System.IntPtr]::Zero) { Write-Debug "MainWindowHandle: $($proc.Id) $($proc.MainWindowTitle) $($proc.MainWindowHandle)" $windowHandle = $proc.MainWindowHandle - } else { - Write-Warning "Process found, but no MainWindowHandle: $($proc.Id) $($proc.MainWindowTitle)" + } else { + Write-Warning "Process found, but no MainWindowHandle: $($proc.Id) $($proc.MainWindowTitle)" } } @@ -328,9 +321,9 @@ Add-Type @" # maybe this is not the best place to load and execute config file? # maybe community can help? - if ($PARAM_CONFIG){ + if ($PARAM_CONFIG) { Invoke-WPFImpex -type "import" -Config $PARAM_CONFIG - if ($PARAM_RUN){ + if ($PARAM_RUN) { while ($sync.ProcessRunning) { Start-Sleep -Seconds 5 } @@ -377,8 +370,7 @@ $sync["SearchBar"].Add_TextChanged({ if ($sync.SearchBar.Text -ne "") { $sync.SearchBarClearButton.Visibility = "Visible" - } - else { + } else { $sync.SearchBarClearButton.Visibility = "Collapsed" } @@ -404,8 +396,7 @@ $sync["SearchBar"].Add_TextChanged({ if ($textBlock -ne $null) { $textBlock.Visibility = "Visible" } - } - else { + } else { $CheckBox.Value.Visibility = "Collapsed" # Set the corresponding text block visibility if ($textBlock -ne $null) { @@ -415,17 +406,16 @@ $sync["SearchBar"].Add_TextChanged({ } $activeCategories = $activeApplications | Select-Object -ExpandProperty category -Unique - foreach ($category in $activeCategories){ + foreach ($category in $activeCategories) { $label = $labels[$(Get-WPFObjectName -type "Label" -name $category)] $label.Visibility = "Visible" } - if ($activeCategories){ + if ($activeCategories) { $inactiveCategories = Compare-Object -ReferenceObject $allCategories -DifferenceObject $activeCategories -PassThru - } - else{ + } else { $inactiveCategories = $allCategories } - foreach ($category in $inactiveCategories){ + foreach ($category in $inactiveCategories) { $label = $labels[$(Get-WPFObjectName -type "Label" -name $category)] $label.Visibility = "Collapsed"} }) @@ -471,8 +461,7 @@ $sync["SettingsButton"].Add_Click({ Write-Debug "SettingsButton clicked" if ($sync["SettingsPopup"].IsOpen) { $sync["SettingsPopup"].IsOpen = $false - } - else { + } else { $sync["SettingsPopup"].IsOpen = $true } $_.Handled = $false @@ -528,8 +517,7 @@ $sync["SponsorMenuItem"].Add_Click({ # Append the sponsors to the authorInfo $sponsors | ForEach-Object { $authorInfo += "$_`n" } - } - catch { + } catch { $authorInfo += "An error occurred while fetching or processing the sponsors: $_`n" } diff --git a/scripts/start.ps1 b/scripts/start.ps1 index 4f68920a..73693260 100644 --- a/scripts/start.ps1 +++ b/scripts/start.ps1 @@ -45,8 +45,7 @@ $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") -{ +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 diff --git a/winget.ps1 b/winget.ps1 index b7761cc2..861584f9 100644 --- a/winget.ps1 +++ b/winget.ps1 @@ -35,15 +35,15 @@ <# .SYNOPSIS - Downloads and installs the latest version of winget and its dependencies. Updates the PATH variable if needed. + Downloads and installs the latest version of winget and its dependencies. Updates the PATH variable if needed. .DESCRIPTION - Downloads and installs the latest version of winget and its dependencies. Updates the PATH variable if needed. + Downloads and installs the latest version of winget and its dependencies. Updates the PATH variable if needed. This script is designed to be straightforward and easy to use, removing the hassle of manually downloading, installing, and configuring winget. To make the newly installed winget available for use, a system reboot may be required after running the script. This function should be run with administrative privileges. .EXAMPLE - winget-install + winget-install .PARAMETER DebugMode Enables debug mode, which shows additional information for debugging. .PARAMETER DisableCleanup @@ -57,10 +57,10 @@ This function should be run with administrative privileges. .PARAMETER Help Displays the full help information for the script. .NOTES - Version : 3.0.1 - Created by : asheroto + Version : 3.0.1 + Created by : asheroto .LINK - Project Site: https://github.com/asheroto/winget-install + Project Site: https://github.com/asheroto/winget-install #> [CmdletBinding()] param (