Test 2024 01 12 (#1401)

* change logseq url and add .net 8 (#1385)

* Update applications.json

Add Official logseq url 
Add .net runtime 8.0

* compile with new logseq and .net 8 runtime

* add thorium avx2

* Compile Winutil

* Remove Cider Music Player (#1400)

* Update winutil.ps1

* Update applications.json

* Compile Winutil

* Import/Export is now global, Settings menu added and many more improvements (#1398)

* Anoter one of those huge PRs
- Fix version inefficiency the version is already stored in sync, no need to slow down loading by one extra replace.
- Created custom dialog and About message
- Create a menu with Import/Export values
	- press on teh Settings cog in the right upper corner and save all the checkboxes
	- then you can either load them or load and run automatically
- Made Import Export load accross the whole app
- Optimized the way checkbox controls are looked up, it is 20% faster now
- Added a switch to load all the boxes from a config file
	- example: .winutil.ps1 -Config "C:UsersasdfDesktop\111.json"
- Added a switch to run all the action in unattended mode by passing -Run siwthc
	- example: .winutil.ps1 -Config "C:UsersasdfDesktop\111.json" -Run
	- This will run all the tweaks and install all the apps

* Fixing a couple of bugs and blur fonts, also menu now closes when focus is lost

---------

Co-authored-by: KonTy <KonTy@github.com>
Co-authored-by: Chris Titus <contact@christitus.com>

* Update applications.json

* Compile Winutil

* Add F8 Recovery Menu and Windows Reg Backup and others (#1389)

* Update feature.json append F8 legacy startup and Win Reg Backup and web search suggestion in search app

- enable automatic windows registry backup and do schedule for it as well (disabled by default in Win10, Win11) this will help when doing last known Good Configuration thru the F8 startup menu.
- enable / disable legacy F8 startup recovery option.
- enable / disable web search suggestions in the windows search in task bar.

* new tick boxes features. F8 recovery, regbackup, search web suggestions

- enable automatic windows registry backup and do schedule for it as well (disabled by default in Win10, Win11) this will help when doing last known Good Configuration thru the F8 startup menu.
- enable / disable legacy F8 startup recovery option.
- enable / disable web search suggestions in the windows search in task bar.

* Compile Winutil

* add Parsec to installable applications (#1157) (#1396)

Identifiers:
- Winget: Parsec.parsec
- Chocolatey: parsec

* Compile Winutil

* add Konty to About page

* Compile Winutil

* fix description (#1388) (#1402)

Co-authored-by: howell2024 <156375832+howell2024@users.noreply.github.com>

---------

Co-authored-by: Cristian Negulescu <cristian@clamsen.com>
Co-authored-by: ChrisTitusTech <ChrisTitusTech@users.noreply.github.com>
Co-authored-by: Tommi Pöntinen <98650216+hamburgerghini1@users.noreply.github.com>
Co-authored-by: KonTy <9524513+KonTy@users.noreply.github.com>
Co-authored-by: KonTy <KonTy@github.com>
Co-authored-by: Smartek <70715469+smartekIT@users.noreply.github.com>
Co-authored-by: Saikrishnan K <53394202+K-Saikrishnan@users.noreply.github.com>
Co-authored-by: howell2024 <156375832+howell2024@users.noreply.github.com>
This commit is contained in:
Chris Titus
2024-01-15 11:32:19 -06:00
committed by GitHub
parent ef2befa10e
commit 3b133e704e
26 changed files with 1645 additions and 645 deletions

View File

@ -20,56 +20,58 @@ Function Get-WinUtilCheckBoxes {
#>
Param(
$Group,
[boolean]$unCheck = $true
[boolean]$unCheck = $false
)
$Output = New-Object System.Collections.Generic.List[System.Object]
if($Group -eq "WPFInstall"){
$filter = Get-WinUtilVariables -Type Checkbox | Where-Object {$psitem -like "WPFInstall*"}
$CheckBoxes = $sync.GetEnumerator() | Where-Object {$psitem.Key -in $filter}
Foreach ($CheckBox in $CheckBoxes){
if($CheckBox.value.ischecked -eq $true){
$sync.configs.applications.$($CheckBox.Name).winget -split ";" | ForEach-Object {
$Output.Add($psitem)
}
if ($uncheck -eq $true){
$CheckBox.value.ischecked = $false
}
}
}
$Output = @{
Install = @()
WPFTweaks = @()
WPFFeature = @()
WPFInstall = @()
}
if($Group -eq "WPFTweaks"){
$filter = Get-WinUtilVariables -Type Checkbox | Where-Object {$psitem -like "WPF*Tweaks*"}
$CheckBoxes = $sync.GetEnumerator() | Where-Object {$psitem.Key -in $filter}
Foreach ($CheckBox in $CheckBoxes){
if($CheckBox.value.ischecked -eq $true){
$Output.Add($Checkbox.Name)
$CheckBoxes = $sync.GetEnumerator() | Where-Object { $_.Value -is [System.Windows.Controls.CheckBox] }
if ($uncheck -eq $true){
$CheckBox.value.ischecked = $false
foreach ($CheckBox in $CheckBoxes) {
$group = if ($CheckBox.Key.StartsWith("WPFInstall")) { "Install" }
elseif ($CheckBox.Key.StartsWith("WPFTweaks")) { "WPFTweaks" }
elseif ($CheckBox.Key.StartsWith("WPFFeature")) { "WPFFeature" }
if ($group) {
if ($CheckBox.Value.IsChecked -eq $true) {
$feature = switch ($group) {
"Install" {
# Get the winget value
$wingetValue = $sync.configs.applications.$($CheckBox.Name).winget
if (-not [string]::IsNullOrWhiteSpace($wingetValue) -and $wingetValue -ne "na") {
$wingetValue -split ";"
} else {
$sync.configs.applications.$($CheckBox.Name).choco
}
}
default {
$CheckBox.Name
}
}
if (-not $Output.ContainsKey($group)) {
$Output[$group] = @()
}
if ($group -eq "Install") {
$Output["WPFInstall"] += $CheckBox.Name
Write-Debug "Adding: $($CheckBox.Name) under: WPFInstall"
}
Write-Debug "Adding: $($feature) under: $($group)"
$Output[$group] += $feature
if ($uncheck -eq $true) {
$CheckBox.Value.IsChecked = $false
}
}
}
}
if($Group -eq "WPFFeature"){
$filter = Get-WinUtilVariables -Type Checkbox | Where-Object {$psitem -like "WPF*Feature*"}
$CheckBoxes = $sync.GetEnumerator() | Where-Object {$psitem.Key -in $filter}
Foreach ($CheckBox in $CheckBoxes){
if($CheckBox.value.ischecked -eq $true){
$Output.Add($Checkbox.Name)
if ($uncheck -eq $true){
$CheckBox.value.ischecked = $false
}
}
}
}
Write-Output $($Output | Select-Object -Unique)
return $Output
}

View File

@ -276,19 +276,22 @@ function New-Unattend {
# <Path>net user administrator /active:yes</Path>
# </RunSynchronousCommand>
# this section doesn't work in win10/????
# <settings pass="specialize">
# <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
# <CEIPEnabled>0</CEIPEnabled>
# </component>
# <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
# <ConfigureChatAutoInstall>false</ConfigureChatAutoInstall>
# </component>
# </settings>
$unattend = @'
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend"
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<settings pass="specialize">
<component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<CEIPEnabled>0</CEIPEnabled>
</component>
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ConfigureChatAutoInstall>false</ConfigureChatAutoInstall>
</component>
</settings>
<settings pass="auditUser">
<component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RunSynchronous>

View File

@ -16,6 +16,8 @@ function Invoke-WinUtilTweaks {
$CheckBox,
$undo = $false
)
Write-Debug "Tweaks: $($CheckBox)"
if($undo){
$Values = @{
Registry = "OriginalValue"
@ -35,21 +37,25 @@ function Invoke-WinUtilTweaks {
}
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){
$sync.configs.tweaks.$CheckBox.service | ForEach-Object {
Write-Debug "$($psitem.Name) and state is $($psitem.$($values.service))"
Set-WinUtilService -Name $psitem.Name -StartupType $psitem.$($values.Service)
}
}
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)){
$sync.configs.tweaks.$CheckBox.$($values.ScriptType) | ForEach-Object {
Write-Debug "$($psitem) and state is $($psitem.$($values.ScriptType))"
$Scriptblock = [scriptblock]::Create($psitem)
Invoke-WinUtilScript -ScriptBlock $scriptblock -Name $CheckBox
}
@ -58,6 +64,7 @@ function Invoke-WinUtilTweaks {
if(!$undo){
if($sync.configs.tweaks.$CheckBox.appx){
$sync.configs.tweaks.$CheckBox.appx | ForEach-Object {
Write-Debug "UNDO $($psitem.Name)"
Remove-WinUtilAPPX -Name $psitem
}
}

View File

@ -0,0 +1,221 @@
function Show-CustomDialog {
<#
.SYNOPSIS
Displays a custom dialog box with an image, heading, message, and an OK button.
.DESCRIPTION
This function creates a custom dialog box with the specified message and additional elements such as an image, heading, and an OK button. The dialog box is designed with a green border, rounded corners, and a black background.
.PARAMETER Message
The message to be displayed in the dialog box.
.PARAMETER Width
The width of the custom dialog window.
.PARAMETER Height
The height of the custom dialog window.
.EXAMPLE
Show-CustomDialog -Message "This is a custom dialog with a message and an image above." -Width 300 -Height 200
#>
param(
[string]$Message,
[int]$Width = 300,
[int]$Height = 200
)
Add-Type -AssemblyName PresentationFramework
# Define theme colors
$foregroundColor = [Windows.Media.Brushes]::White
$backgroundColor = [Windows.Media.Brushes]::Black
$font = New-Object Windows.Media.FontFamily("Consolas")
$borderColor = [Windows.Media.Brushes]::Green
$buttonBackgroundColor = [Windows.Media.Brushes]::Black
$buttonForegroundColor = [Windows.Media.Brushes]::White
$shadowColor = [Windows.Media.ColorConverter]::ConvertFromString("#AAAAAAAA")
# Create a custom dialog window
$dialog = New-Object Windows.Window
$dialog.Title = "About"
$dialog.Height = $Height
$dialog.Width = $Width
$dialog.Margin = New-Object Windows.Thickness(10) # Add margin to the entire dialog box
$dialog.WindowStyle = [Windows.WindowStyle]::None # Remove title bar and window controls
$dialog.ResizeMode = [Windows.ResizeMode]::NoResize # Disable resizing
$dialog.WindowStartupLocation = [Windows.WindowStartupLocation]::CenterScreen # Center the window
$dialog.Foreground = $foregroundColor
$dialog.Background = $backgroundColor
$dialog.FontFamily = $font
# Create a Border for the green edge with rounded corners
$border = New-Object Windows.Controls.Border
$border.BorderBrush = $borderColor
$border.BorderThickness = New-Object Windows.Thickness(1) # Adjust border thickness as needed
$border.CornerRadius = New-Object Windows.CornerRadius(10) # Adjust the radius for rounded corners
# Create a drop shadow effect
$dropShadow = New-Object Windows.Media.Effects.DropShadowEffect
$dropShadow.Color = $shadowColor
$dropShadow.Direction = 270
$dropShadow.ShadowDepth = 5
$dropShadow.BlurRadius = 10
# Apply drop shadow effect to the border
$dialog.Effect = $dropShadow
$dialog.Content = $border
# Create a grid for layout inside the Border
$grid = New-Object Windows.Controls.Grid
$border.Child = $grid
# Add the following line to show gridlines
#$grid.ShowGridLines = $true
# Add the following line to set the background color of the grid
$grid.Background = [Windows.Media.Brushes]::Transparent
# Add the following line to make the Grid stretch
$grid.HorizontalAlignment = [Windows.HorizontalAlignment]::Stretch
$grid.VerticalAlignment = [Windows.VerticalAlignment]::Stretch
# Add the following line to make the Border stretch
$border.HorizontalAlignment = [Windows.HorizontalAlignment]::Stretch
$border.VerticalAlignment = [Windows.VerticalAlignment]::Stretch
# Set up Row Definitions
$row0 = New-Object Windows.Controls.RowDefinition
$row0.Height = [Windows.GridLength]::Auto
$row1 = New-Object Windows.Controls.RowDefinition
$row1.Height = [Windows.GridLength]::new(1, [Windows.GridUnitType]::Star)
$row2 = New-Object Windows.Controls.RowDefinition
$row2.Height = [Windows.GridLength]::Auto
# Add Row Definitions to Grid
$grid.RowDefinitions.Add($row0)
$grid.RowDefinitions.Add($row1)
$grid.RowDefinitions.Add($row2)
# Add StackPanel for horizontal layout with margins
$stackPanel = New-Object Windows.Controls.StackPanel
$stackPanel.Margin = New-Object Windows.Thickness(10) # Add margins around the stack panel
$stackPanel.Orientation = [Windows.Controls.Orientation]::Horizontal
$stackPanel.HorizontalAlignment = [Windows.HorizontalAlignment]::Left # Align to the left
$stackPanel.VerticalAlignment = [Windows.VerticalAlignment]::Top # Align to the top
$grid.Children.Add($stackPanel)
[Windows.Controls.Grid]::SetRow($stackPanel, 0) # Set the row to the second row (0-based index)
$viewbox = New-Object Windows.Controls.Viewbox
$viewbox.Width = 25
$viewbox.Height = 25
# Combine the paths into a single string
# $cttLogoPath = @"
# M174 1094 c-4 -14 -4 -55 -2 -92 3 -57 9 -75 41 -122 41 -60 45 -75 22 -84 -25 -9 -17 -21 30 -44 l45 -22 0 -103 c0 -91 3 -109 26 -155 30 -60 65 -87 204 -157 l95 -48 110 58 c184 96 205 127 205 293 l0 108 45 22 c47 23 55 36 30 46 -22 8 -18 30 9 63 13 16 34 48 46 71 20 37 21 52 15 116 l-6 73 -69 -23 c-38 -12 -137 -59 -220 -103 -82 -45 -160 -81 -171 -81 -12 0 -47 15 -78 34 -85 51 -239 127 -309 151 l-62 22 -6 -23z m500 -689 c20 -8 36 -19 36 -24 0 -18 -53 -51 -80 -51 -28 0 -80 33 -80 51 0 10 55 38 76 39 6 0 28 -7 48 -15z
# M177 711 c-19 -88 4 -242 49 -318 43 -74 107 -127 232 -191 176 -90 199 -84 28 7 -169 91 -214 129 -258 220 -29 58 -32 74 -37 190 -4 90 -8 116 -14 92z
# M1069 610 c-4 -131 -5 -137 -38 -198 -43 -79 -89 -119 -210 -181 -53 -27 -116 -61 -141 -76 -74 -43 -6 -20 115 40 221 109 296 217 294 425 -1 144 -16 137 -20 -10z
# "@
$cttLogoPath = @"
M 18.00,14.00
C 18.00,14.00 45.00,27.74 45.00,27.74
45.00,27.74 57.40,34.63 57.40,34.63
57.40,34.63 59.00,43.00 59.00,43.00
59.00,43.00 59.00,83.00 59.00,83.00
55.35,81.66 46.99,77.79 44.72,74.79
41.17,70.10 42.01,59.80 42.00,54.00
42.00,51.62 42.20,48.29 40.98,46.21
38.34,41.74 25.78,38.60 21.28,33.79
16.81,29.02 18.00,20.20 18.00,14.00 Z
M 107.00,14.00
C 109.01,19.06 108.93,30.37 104.66,34.21
100.47,37.98 86.38,43.10 84.60,47.21
83.94,48.74 84.01,51.32 84.00,53.00
83.97,57.04 84.46,68.90 83.26,72.00
81.06,77.70 72.54,81.42 67.00,83.00
67.00,83.00 67.00,43.00 67.00,43.00
67.00,43.00 67.99,35.63 67.99,35.63
67.99,35.63 80.00,28.26 80.00,28.26
80.00,28.26 107.00,14.00 107.00,14.00 Z
M 19.00,46.00
C 21.36,47.14 28.67,50.71 30.01,52.63
31.17,54.30 30.99,57.04 31.00,59.00
31.04,65.41 30.35,72.16 33.56,78.00
38.19,86.45 46.10,89.04 54.00,93.31
56.55,94.69 60.10,97.20 63.00,97.22
65.50,97.24 68.77,95.36 71.00,94.25
76.42,91.55 84.51,87.78 88.82,83.68
94.56,78.20 95.96,70.59 96.00,63.00
96.01,60.24 95.59,54.63 97.02,52.39
98.80,49.60 103.95,47.87 107.00,47.00
107.00,47.00 107.00,67.00 107.00,67.00
106.90,87.69 96.10,93.85 80.00,103.00
76.51,104.98 66.66,110.67 63.00,110.52
60.33,110.41 55.55,107.53 53.00,106.25
46.21,102.83 36.63,98.57 31.04,93.68
16.88,81.28 19.00,62.88 19.00,46.00 Z
"@
# Add SVG path
$svgPath = New-Object Windows.Shapes.Path
$svgPath.Data = [Windows.Media.Geometry]::Parse($cttLogoPath)
$svgPath.Fill = $foregroundColor # Set fill color to white
# Add SVG path to Viewbox
$viewbox.Child = $svgPath
# Add SVG path to the stack panel
$stackPanel.Children.Add($viewbox)
# Add "Winutil" text
$winutilTextBlock = New-Object Windows.Controls.TextBlock
$winutilTextBlock.Text = "Winutil"
$winutilTextBlock.FontSize = 18 # Adjust font size as needed
$winutilTextBlock.Foreground = $foregroundColor
$winutilTextBlock.Margin = New-Object Windows.Thickness(10, 5, 10, 5) # Add margins around the text block
$stackPanel.Children.Add($winutilTextBlock)
# Add TextBlock for information with text wrapping and margins
$messageTextBlock = New-Object Windows.Controls.TextBlock
$messageTextBlock.Text = $Message
$messageTextBlock.TextWrapping = [Windows.TextWrapping]::Wrap # Enable text wrapping
$messageTextBlock.HorizontalAlignment = [Windows.HorizontalAlignment]::Left
$messageTextBlock.VerticalAlignment = [Windows.VerticalAlignment]::Top
$messageTextBlock.Margin = New-Object Windows.Thickness(10) # Add margins around the text block
$grid.Children.Add($messageTextBlock)
[Windows.Controls.Grid]::SetRow($messageTextBlock, 1) # Set the row to the second row (0-based index)
# Add OK button
$okButton = New-Object Windows.Controls.Button
$okButton.Content = "OK"
$okButton.Width = 80
$okButton.Height = 30
$okButton.HorizontalAlignment = [Windows.HorizontalAlignment]::Center
$okButton.VerticalAlignment = [Windows.VerticalAlignment]::Bottom
$okButton.Margin = New-Object Windows.Thickness(0, 0, 0, 10)
$okButton.Background = $buttonBackgroundColor
$okButton.Foreground = $buttonForegroundColor
$okButton.BorderBrush = $borderColor
$okButton.Add_Click({
$dialog.Close()
})
$grid.Children.Add($okButton)
[Windows.Controls.Grid]::SetRow($okButton, 2) # Set the row to the third row (0-based index)
# Handle Escape key press to close the dialog
$dialog.Add_KeyDown({
if ($_.Key -eq 'Escape') {
$dialog.Close()
}
})
# Set the OK button as the default button (activated on Enter)
$okButton.IsDefault = $true
# Show the custom dialog
$dialog.ShowDialog()
}

View File

@ -14,7 +14,6 @@ Function Update-WinUtilProgramWinget {
Start-Transcript $ENV:TEMP\winget-update.log -Append
winget upgrade --all
Pause
}
$global:WinGetInstall = Start-Process -Verb runas powershell -ArgumentList "-command invoke-command -scriptblock {$wingetinstall} -argumentlist '$($ProgramsToInstall -join ",")'" -PassThru

View File

@ -24,10 +24,6 @@ function Invoke-WPFButton {
"WPFdesktop" {Invoke-WPFPresets "Desktop"}
"WPFlaptop" {Invoke-WPFPresets "laptop"}
"WPFminimal" {Invoke-WPFPresets "minimal"}
"WPFexport" {Invoke-WPFImpex -type "export" -CheckBox "WPFTweaks"}
"WPFimport" {Invoke-WPFImpex -type "import" -CheckBox "WPFTweaks"}
"WPFexportWinget" {Invoke-WPFImpex -type "export" -CheckBox "WPFInstall"}
"WPFimportWinget" {Invoke-WPFImpex -type "import" -CheckBox "WPFInstall"}
"WPFclear" {Invoke-WPFPresets -preset $null -imported $true}
"WPFclearWinget" {Invoke-WPFPresets -preset $null -imported $true -CheckBox "WPFInstall"}
"WPFtweaksbutton" {Invoke-WPFtweaksbutton}

View File

@ -7,15 +7,15 @@ function Invoke-WPFFeatureInstall {
#>
if($sync.ProcessRunning){
$msg = "Install process is currently running."
$msg = "[Invoke-WPFFeatureInstall] Install process is currently running."
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
return
}
$Features = Get-WinUtilCheckBoxes -Group "WPFFeature"
$Features = (Get-WinUtilCheckBoxes)["WPFFeatures"]
Invoke-WPFRunspace -ArgumentList $Features -ScriptBlock {
param($Features)
Invoke-WPFRunspace -ArgumentList $Features,$DebugPreference -ScriptBlock {
param($Features, $DebugPreference)
$sync.ProcessRunning = $true
@ -26,12 +26,5 @@ function Invoke-WPFFeatureInstall {
Write-Host "--- Features are Installed ---"
Write-Host "--- A Reboot may be required ---"
Write-Host "==================================="
$ButtonType = [System.Windows.MessageBoxButton]::OK
$MessageboxTitle = "All features are now installed "
$Messageboxbody = ("Done")
$MessageIcon = [System.Windows.MessageBoxImage]::Information
[System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon)
}
}

View File

@ -11,7 +11,7 @@ function Invoke-WPFGetInstalled {
param($checkbox)
if($sync.ProcessRunning){
$msg = "Install process is currently running."
$msg = "[Invoke-WPFGetInstalled] Install process is currently running."
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
return
}
@ -23,8 +23,8 @@ function Invoke-WPFGetInstalled {
return
}
Invoke-WPFRunspace -ArgumentList $checkbox -ScriptBlock {
param($checkbox)
Invoke-WPFRunspace -ArgumentList $checkbox,$DebugPreference -ScriptBlock {
param($checkbox, $DebugPreference)
$sync.ProcessRunning = $true

View File

@ -16,7 +16,7 @@ function Invoke-WPFImpex {
#>
param(
$type,
$checkbox
$Config = $null
)
if ($type -eq "export"){
@ -26,20 +26,36 @@ function Invoke-WPFImpex {
$FileBrowser = New-Object System.Windows.Forms.OpenFileDialog
}
$FileBrowser.InitialDirectory = [Environment]::GetFolderPath('Desktop')
$FileBrowser.Filter = "JSON Files (*.json)|*.json"
$FileBrowser.ShowDialog() | Out-Null
if (-not $Config){
$FileBrowser.InitialDirectory = [Environment]::GetFolderPath('Desktop')
$FileBrowser.Filter = "JSON Files (*.json)|*.json"
$FileBrowser.ShowDialog() | Out-Null
if($FileBrowser.FileName -eq ""){
return
if($FileBrowser.FileName -eq ""){
return
}
else{
$Config = $FileBrowser.FileName
}
}
if ($type -eq "export"){
$jsonFile = Get-WinUtilCheckBoxes $checkbox -unCheck $false
$jsonFile = Get-WinUtilCheckBoxes -unCheck $false
$jsonFile | ConvertTo-Json | Out-File $FileBrowser.FileName -Force
}
if ($type -eq "import"){
$jsonFile = Get-Content $FileBrowser.FileName | ConvertFrom-Json
Invoke-WPFPresets -preset $jsonFile -imported $true -CheckBox $checkbox
$jsonFile = Get-Content $Config | ConvertFrom-Json
$flattenedJson = @()
$jsonFile.PSObject.Properties | ForEach-Object {
$category = $_.Name
foreach ($checkboxName in $_.Value) {
if ($category -ne "Install") {
$flattenedJson += $checkboxName
}
}
}
Invoke-WPFPresets -preset $flattenedJson -imported $true
}
}

View File

@ -7,12 +7,12 @@ function Invoke-WPFInstall {
#>
if($sync.ProcessRunning){
$msg = "Install process is currently running."
$msg = "[Invoke-WPFInstall] Install process is currently running."
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
return
}
$WingetInstall = Get-WinUtilCheckBoxes -Group "WPFInstall"
$WingetInstall = (Get-WinUtilCheckBoxes)["Install"]
if ($wingetinstall.Count -eq 0) {
$WarningMsg = "Please select the program(s) to install"
@ -20,24 +20,15 @@ function Invoke-WPFInstall {
return
}
Invoke-WPFRunspace -ArgumentList $WingetInstall -scriptblock {
param($WingetInstall)
Invoke-WPFRunspace -ArgumentList $WingetInstall,$DebugPreference -ScriptBlock {
param($WingetInstall, $DebugPreference)
try{
$sync.ProcessRunning = $true
# Ensure winget is installed
Install-WinUtilWinget
# Install all selected programs in new window
Install-WinUtilProgramWinget -ProgramsToInstall $WingetInstall
$ButtonType = [System.Windows.MessageBoxButton]::OK
$MessageboxTitle = "Installs are Finished "
$Messageboxbody = ("Done")
$MessageIcon = [System.Windows.MessageBoxImage]::Information
[System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon)
Write-Host "==========================================="
Write-Host "-- Installs have finished ---"
Write-Host "==========================================="
@ -47,6 +38,7 @@ function Invoke-WPFInstall {
Write-Host "-- Winget failed to install ---"
Write-Host "==========================================="
}
Start-Sleep -Seconds 5
$sync.ProcessRunning = $False
}
}

View File

@ -13,7 +13,7 @@ function Invoke-WPFInstallUpgrade {
}
if(Get-WinUtilInstallerProcess -Process $global:WinGetInstall){
$msg = "Install process is currently running. Please check for a powershell window labeled 'Winget Install'"
$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
}

View File

@ -17,8 +17,7 @@ function Invoke-WPFPresets {
param(
$preset,
[bool]$imported = $false,
$checkbox = "WPFTweaks"
[bool]$imported = $false
)
if($imported -eq $true){
@ -28,23 +27,33 @@ function Invoke-WPFPresets {
$CheckBoxesToCheck = $sync.configs.preset.$preset
}
if($checkbox -eq "WPFTweaks"){
$filter = Get-WinUtilVariables -Type Checkbox | Where-Object {$psitem -like "*tweaks*"}
$sync.GetEnumerator() | Where-Object {$psitem.Key -in $filter} | ForEach-Object {
if ($CheckBoxesToCheck -contains $PSItem.name){
$sync.$($PSItem.name).ischecked = $true
}
else{$sync.$($PSItem.name).ischecked = $false}
$CheckBoxes = $sync.GetEnumerator() | Where-Object { $_.Value -is [System.Windows.Controls.CheckBox] }
Write-Debug "Getting checkboxes to set $($CheckBoxes.Count)"
$CheckBoxesToCheck | ForEach-Object {
if ($_ -ne $null) {
Write-Debug $_
}
}
if($checkbox -eq "WPFInstall"){
foreach ($CheckBox in $CheckBoxes) {
$checkboxName = $CheckBox.Key
$filter = Get-WinUtilVariables -Type Checkbox | Where-Object {$psitem -like "WPFInstall*"}
$sync.GetEnumerator() | Where-Object {$psitem.Key -in $filter} | ForEach-Object {
if($($sync.configs.applications.$($psitem.name).winget) -in $CheckBoxesToCheck){
$sync.$($PSItem.name).ischecked = $true
}
else{$sync.$($PSItem.name).ischecked = $false}
if (-not $CheckBoxesToCheck)
{
$sync.$checkboxName.IsChecked = $false
continue
}
# Check if the checkbox name exists in the flattened JSON hashtable
if ($CheckBoxesToCheck.Contains($checkboxName)) {
# If it exists, set IsChecked to true
$sync.$checkboxName.IsChecked = $true
Write-Debug "$checkboxName is checked"
} else {
# If it doesn't exist, set IsChecked to false
$sync.$checkboxName.IsChecked = $false
Write-Debug "$checkboxName is not checked"
}
}
}

View File

@ -21,7 +21,8 @@ function Invoke-WPFRunspace {
[CmdletBinding()]
Param (
$ScriptBlock,
$ArgumentList
$ArgumentList,
$DebugPreference
)
# Create a PowerShell instance
@ -30,6 +31,7 @@ function Invoke-WPFRunspace {
# Add Scriptblock and Arguments to runspace
$script:powershell.AddScript($ScriptBlock)
$script:powershell.AddArgument($ArgumentList)
$script:powershell.AddArgument($DebugPreference) # Pass DebugPreference to the script block
$script:powershell.RunspacePool = $sync.runspace
# Execute the RunspacePool

View File

@ -13,19 +13,19 @@ function Invoke-WPFShortcut {
$iconPath = $null
Switch ($ShortcutToAdd) {
"WinUtil" {
$SourceExe = "$env:SystemRoot\System32\WindowsPowerShell\v1.0\powershell.exe"
$IRM = 'irm https://christitus.com/win | iex'
$Powershell = '-ExecutionPolicy Bypass -Command "Start-Process powershell.exe -verb runas -ArgumentList'
$ArgumentsToSourceExe = "$powershell '$IRM'"
$DestinationName = "WinUtil.lnk"
"WinUtil" {
$SourceExe = "$env:SystemRoot\System32\WindowsPowerShell\v1.0\powershell.exe"
$IRM = 'irm https://christitus.com/win | iex'
$Powershell = '-ExecutionPolicy Bypass -Command "Start-Process powershell.exe -verb runas -ArgumentList'
$ArgumentsToSourceExe = "$powershell '$IRM'"
$DestinationName = "WinUtil.lnk"
if (Test-Path -Path "$env:TEMP\cttlogo.png") {
$iconPath = "$env:SystempRoot\cttlogo.ico"
ConvertTo-Icon -bitmapPath "$env:TEMP\cttlogo.png" -iconPath $iconPath
if (Test-Path -Path "$env:TEMP\cttlogo.png") {
$iconPath = "$env:SystempRoot\cttlogo.ico"
ConvertTo-Icon -bitmapPath "$env:TEMP\cttlogo.png" -iconPath $iconPath
}
}
}
}
$FileBrowser = New-Object System.Windows.Forms.SaveFileDialog
$FileBrowser.InitialDirectory = [Environment]::GetFolderPath('Desktop')

View File

@ -7,12 +7,12 @@ function Invoke-WPFUnInstall {
#>
if($sync.ProcessRunning){
$msg = "Install process is currently running"
$msg = "[Invoke-WPFUnInstall] Install process is currently running"
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
return
}
$WingetInstall = Get-WinUtilCheckBoxes -Group "WPFInstall"
$WingetInstall = (Get-WinUtilCheckBoxes)["Install"]
if ($wingetinstall.Count -eq 0) {
$WarningMsg = "Please select the program(s) to install"
@ -29,8 +29,9 @@ function Invoke-WPFUnInstall {
if($confirm -eq "No"){return}
Invoke-WPFRunspace -ArgumentList $WingetInstall -scriptblock {
param($WingetInstall)
Invoke-WPFRunspace -ArgumentList $WingetInstall,$DebugPreference -ScriptBlock {
param($WingetInstall, $DebugPreference)
try{
$sync.ProcessRunning = $true

View File

@ -7,13 +7,13 @@ function Invoke-WPFtweaksbutton {
#>
if($sync.ProcessRunning){
$msg = "Install process is currently running."
$msg = "[Invoke-WPFtweaksbutton] Install process is currently running."
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
return
}
$Tweaks = Get-WinUtilCheckBoxes -Group "WPFTweaks"
$Tweaks = (Get-WinUtilCheckBoxes)["WPFTweaks"]
Set-WinUtilDNS -DNSProvider $sync["WPFchangedns"].text
if ($tweaks.count -eq 0 -and $sync["WPFchangedns"].text -eq "Default"){
@ -22,21 +22,20 @@ function Invoke-WPFtweaksbutton {
return
}
Invoke-WPFRunspace -ArgumentList $Tweaks -ScriptBlock {
param($Tweaks)
Write-Debug "Number of tweaks to process: $($Tweaks.Count)"
Invoke-WPFRunspace -ArgumentList $Tweaks -DebugPreference $DebugPreference -ScriptBlock {
param($Tweaks, $DebugPreference)
Write-Debug "Inside Number of tweaks to process: $($Tweaks.Count)"
$sync.ProcessRunning = $true
# Executes first if selected
if ("WPFEssTweaksRestorePoint" -in $Tweaks) {
Invoke-WinUtilTweaks "WPFEssTweaksRestorePoint"
}
$cnt = 0
# Execute other selected tweaks
foreach ($tweak in $tweaks) {
if ($tweak -ne "WPFEssTweaksRestorePoint") {
Invoke-WinUtilTweaks $tweak
}
foreach ($tweak in $Tweaks) {
Write-Debug "This is a tweak to run $tweak count: $cnt"
Invoke-WinUtilTweaks $tweak
$cnt += 1
}
$sync.ProcessRunning = $false
@ -44,11 +43,10 @@ function Invoke-WPFtweaksbutton {
Write-Host "-- Tweaks are Finished ---"
Write-Host "================================="
$ButtonType = [System.Windows.MessageBoxButton]::OK
$MessageboxTitle = "Tweaks are Finished "
$Messageboxbody = ("Done")
$MessageIcon = [System.Windows.MessageBoxImage]::Information
[System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon)
# $ButtonType = [System.Windows.MessageBoxButton]::OK
# $MessageboxTitle = "Tweaks are Finished "
# $Messageboxbody = ("Done")
# $MessageIcon = [System.Windows.MessageBoxImage]::Information
# [System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon)
}
}

View File

@ -7,12 +7,12 @@ function Invoke-WPFundoall {
#>
if($sync.ProcessRunning){
$msg = "Install process is currently running."
$msg = "[Invoke-WPFundoall] Install process is currently running."
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
return
}
$Tweaks = Get-WinUtilCheckBoxes -Group "WPFTweaks"
$Tweaks = (Get-WinUtilCheckBoxes)["WPFTweaks"]
if ($tweaks.count -eq 0){
$msg = "Please check the tweaks you wish to undo."
@ -20,8 +20,8 @@ function Invoke-WPFundoall {
return
}
Invoke-WPFRunspace -ArgumentList $Tweaks -ScriptBlock {
param($Tweaks)
Invoke-WPFRunspace -ArgumentList $Tweaks,$DebugPreference -ScriptBlock {
param($Tweaks, $DebugPreference)
$sync.ProcessRunning = $true