mirror of
https://github.com/ChrisTitusTech/winutil.git
synced 2025-06-27 16:44:46 -05:00
Test 12 2022 - Big Foundational Update (#637)
* Fix of the unit tests (#468) * fix pester tests * fix function (#467) * Cherry pick and fix helper script * remove admin check and disable * Trim Trailing Whitespace (#472) Co-authored-by: Chris Titus <contact@christitus.com> * Better .gitignore (#473) * add progress and add wait to start-process (#475) * Fixed Cloudflare Naming (#504) * Update winutil.ps1 * Update MainWindow.xaml * Update check for Chocolatey (#520) * Update winutil.ps1 * Update check for Chocolatey Let user decide if he wants to install Chocolatey * Update winutil.ps1 (#525) Migrate to Switch-Tab function * Update winutil.ps1 (#531) Changes to "DiagTrack" service. * add responsive winget installs (#540) * add responsive winget installs * Update winutil.ps1 fix typo * remove no longer used paramater * add golang, an installation option in development list (#542) * Updated winget functions (#543) * update functions * Update winutil.ps1 forgot triple quotes * Update winutil.ps1 fixed vscode using wrong double quotes * Functions and error handling (#552) * move winget install to function and exception * updated winget upgrade to new install process * add logging to update * choco to function and write-output to ensure logs * update error handling * revert write-host and add invoke-runspace * Added runspace to load configs in background * fix unit tests * update pester tests * update pester * update pester * update pester * updated tweaks config to use WPF variable name * Fix data type of MouseHoverTime (#568) Setting Computer\HKEY_CURRENT_USER\Control Panel\Mouse\MouseHoverTime needs to be REG_SZ instead of REG_DWORD. With the wrong type the Taskbar and the Start Menu become hard to use because everything pops up instantly, probably because it's then treated as a 0 ms delay. * fix restore launch to quick access & OOSU10 download (#565) * Fix grammar (#577) * Update MainWindow.xaml * Update MainWindow-runspace.xaml * fix enable numlock after startup (#580) * Update README.md (#616) Added DNS provider into readme * Fix O&O ShutUp10 disabling app notifications and hide search box (#630) * Add files via upload Added ooshutup10_winutil_settings and fix the issue where OOSU10 disable app notifications and hide search box in windows. * Update winutil.ps1 Change ooshut10.cfg to ooshutup10_winutil_settings.cfg and fix the issues in https://github.com/ChrisTitusTech/winutil/issues/629 Now when apply the tweaks by O&O ShutUp10, will keep search box and notifications will not be disabled. * Update winutil.ps1 * Update winutil.ps1 --------- Co-authored-by: Chris Titus <contact@christitus.com> * Create ooshutup10_winutil_settings.cfg * Feature/tweakstofunctions (#576) * add functions for services * Move WPFEssTweaksDVR to function * Add invoke script and moved temp files * WPFEssTweaksHiber and formatting * WPFEssTweaksHiber * WPFEssTweaksHome and service * WPFEssTweaksLoc * TPMCheck * WPFEssTweaksDiskCleanup * Add error handling for invoke script * grammer * UAC and tweaks * WPFMiscTweaksDisableNotifications * WPFMiscTweaksRightClickMenu * Added DNS configuration + Reset to DHCP * WPFEssTweaksOO * WPFEssTweaksRP * WPFEssTweaksServices * WPFEssTweaksStorage * WPFEssTweaksTele * WPFEssTweaksWifi * WPFMiscTweaksLapPower * WPFMiscTweaksLapNum * WPFMiscTweaksPower * WPFMiscTweaksNum * WPFMiscTweaksExt * WPFMiscTweaksUTC * WPFMiscTweaksDisplay * Mouse Acceleration * WPFEssTweaksRemoveCortana * WPFEssTweaksDeBloat * set teaks to get checkboxes and loop * remove isdev * add help documentation * Add Quad 9 for #532 and #416 * remove isdev * Update tweaks.json Remove-ItemProperty is no longer needed as this was a bug from a bad commit 4 months ago. --------- Co-authored-by: Chris Titus <contact@christitus.com> * Tweak bingsearch (#620) * add functions for services * Move WPFEssTweaksDVR to function * Add invoke script and moved temp files * WPFEssTweaksHiber and formatting * WPFEssTweaksHiber * WPFEssTweaksHome and service * WPFEssTweaksLoc * TPMCheck * WPFEssTweaksDiskCleanup * Add error handling for invoke script * grammer * UAC and tweaks * WPFMiscTweaksDisableNotifications * WPFMiscTweaksRightClickMenu * Added DNS configuration + Reset to DHCP * WPFEssTweaksOO * WPFEssTweaksRP * WPFEssTweaksServices * WPFEssTweaksStorage * WPFEssTweaksTele * WPFEssTweaksWifi * WPFMiscTweaksLapPower * WPFMiscTweaksLapNum * WPFMiscTweaksPower * WPFMiscTweaksNum * WPFMiscTweaksExt * WPFMiscTweaksUTC * WPFMiscTweaksDisplay * Mouse Acceleration * WPFEssTweaksRemoveCortana * WPFEssTweaksDeBloat * set teaks to get checkboxes and loop * remove isdev * add help documentation * Add Quad 9 for #532 and #416 * remove isdev * Update helper script and add tweak * update changes * Refactor/runspaces (#626) * modify runspace.ps1 to compile * update compiler to include warning * unit test * implement invoke-button and naming standard * naming standard * fix winutil tests * update functions * add version number * fix codeowners * fix import * undo tweaks now pull from config * pester test * Compile Winutil * python and oo cfg -fix python 3 to 3.11 -fix o&o shutup cfg -enable dev mode for testing * Force install missing winget Fix method for winget install on any system. * Deluge Addition * Feature/impex (#619) * add functions for services * Move WPFEssTweaksDVR to function * Add invoke script and moved temp files * WPFEssTweaksHiber and formatting * WPFEssTweaksHiber * WPFEssTweaksHome and service * WPFEssTweaksLoc * TPMCheck * WPFEssTweaksDiskCleanup * Add error handling for invoke script * grammer * UAC and tweaks * WPFMiscTweaksDisableNotifications * WPFMiscTweaksRightClickMenu * Added DNS configuration + Reset to DHCP * WPFEssTweaksOO * WPFEssTweaksRP * WPFEssTweaksServices * WPFEssTweaksStorage * WPFEssTweaksTele * WPFEssTweaksWifi * WPFMiscTweaksLapPower * WPFMiscTweaksLapNum * WPFMiscTweaksPower * WPFMiscTweaksNum * WPFMiscTweaksExt * WPFMiscTweaksUTC * WPFMiscTweaksDisplay * Mouse Acceleration * WPFEssTweaksRemoveCortana * WPFEssTweaksDeBloat * set teaks to get checkboxes and loop * remove isdev * add help documentation * Add Quad 9 for #532 and #416 * remove isdev * Working Import and Export * Add null check * Remove IsDev * sync with test * redo impex * Irm runspace fix (#635) * Update runspace.ps1 * Update start.ps1 * compiled for testing * Compile Winutil * Compile Winutil * test * disable runspace build * test * change compile to ascii * change compile to winutil * Compile Winutil * Delete MainWindow.xaml * Update release.yaml runspace merge job * remove update branch --------- Co-authored-by: DeveloperDurp <developerdurp@durp.info> Co-authored-by: Carter <60557606+Carterpersall@users.noreply.github.com> Co-authored-by: Jacobtread <33708767+jacobtread@users.noreply.github.com> Co-authored-by: jstok84 <jstok84@gmail.com> Co-authored-by: WolfBungalow <irtwit@gmail.com> Co-authored-by: Ankit Yadav <52023083+4nkitd@users.noreply.github.com> Co-authored-by: Starfiresg1 <Starfiresg1@users.noreply.github.com> Co-authored-by: Adrián Insaurralde Avalos <36372335+adrianinsaval@users.noreply.github.com> Co-authored-by: Hyperio <96462198+hyperio546@users.noreply.github.com> Co-authored-by: dennyamarojr <36896116+dennyamarojr@users.noreply.github.com> Co-authored-by: ChrisTitusTech <ChrisTitusTech@users.noreply.github.com>
This commit is contained in:
52
functions/private/Get-WinUtilCheckBoxes.ps1
Normal file
52
functions/private/Get-WinUtilCheckBoxes.ps1
Normal file
@ -0,0 +1,52 @@
|
||||
Function Get-WinUtilCheckBoxes {
|
||||
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
Function is meant to find all checkboxes that are checked on the specefic tab and input them into a script.
|
||||
|
||||
Outputed data will be the names of the checkboxes that were checked
|
||||
|
||||
.EXAMPLE
|
||||
|
||||
Get-WinUtilCheckBoxes "WPFInstall"
|
||||
|
||||
#>
|
||||
|
||||
Param(
|
||||
$Group,
|
||||
[boolean]$unCheck = $true
|
||||
)
|
||||
|
||||
|
||||
$Output = New-Object System.Collections.Generic.List[System.Object]
|
||||
|
||||
if($Group -eq "WPFInstall"){
|
||||
$CheckBoxes = get-variable | Where-Object {$psitem.name -like "WPFInstall*" -and $psitem.value.GetType().name -eq "CheckBox"}
|
||||
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
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
if($Group -eq "WPFTweaks"){
|
||||
$CheckBoxes = get-variable | Where-Object {$psitem.name -like "WPF*Tweaks*" -and $psitem.value.GetType().name -eq "CheckBox"}
|
||||
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)
|
||||
}
|
16
functions/private/Get-WinUtilDarkMode.ps1
Normal file
16
functions/private/Get-WinUtilDarkMode.ps1
Normal file
@ -0,0 +1,16 @@
|
||||
Function Get-WinUtilDarkMode {
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
Meant to pull the registry keys responsible for Dark Mode and returns true or false
|
||||
|
||||
#>
|
||||
$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){
|
||||
return $true
|
||||
}
|
||||
else{
|
||||
return $false
|
||||
}
|
||||
}
|
18
functions/private/Get-WinUtilInstallerProcess.ps1
Normal file
18
functions/private/Get-WinUtilInstallerProcess.ps1
Normal file
@ -0,0 +1,18 @@
|
||||
function Get-WinUtilInstallerProcess {
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
Meant to check for running processes and will return a boolean response
|
||||
|
||||
#>
|
||||
|
||||
param($Process)
|
||||
|
||||
if ($Null -eq $Process){
|
||||
return $false
|
||||
}
|
||||
if (Get-Process -Id $Process.Id -ErrorAction SilentlyContinue){
|
||||
return $true
|
||||
}
|
||||
return $false
|
||||
}
|
30
functions/private/Install-WinUtilChoco.ps1
Normal file
30
functions/private/Install-WinUtilChoco.ps1
Normal file
@ -0,0 +1,30 @@
|
||||
function Install-WinUtilChoco {
|
||||
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
Function is meant to ensure Choco is installed
|
||||
|
||||
#>
|
||||
|
||||
try{
|
||||
Write-Host "Checking if Chocolatey is Installed..."
|
||||
|
||||
if((Test-WinUtilPackageManager -choco)){
|
||||
Write-Host "Chocolatey Already Installed"
|
||||
return
|
||||
}
|
||||
|
||||
Write-Host "Seems Chocolatey is not installed, installing now?"
|
||||
#Let user decide if he wants to install Chocolatey
|
||||
$confirmation = Read-Host "Are you Sure You Want To Proceed:(y/n)"
|
||||
if ($confirmation -eq 'y') {
|
||||
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{
|
||||
throw [ChocoFailedInstall]::new('Failed to install')
|
||||
}
|
||||
|
||||
}
|
28
functions/private/Install-WinUtilProgramWinget.ps1
Normal file
28
functions/private/Install-WinUtilProgramWinget.ps1
Normal file
@ -0,0 +1,28 @@
|
||||
Function Install-WinUtilProgramWinget {
|
||||
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
This will install programs via Winget using a new powershell.exe instance to prevent the GUI from locking up.
|
||||
|
||||
Note the triple quotes are required any time you need a " in a normal script block.
|
||||
|
||||
#>
|
||||
|
||||
param($ProgramsToInstall)
|
||||
|
||||
$x = 0
|
||||
$count = $($ProgramsToInstall -split ",").Count
|
||||
|
||||
Write-Progress -Activity "Installing Applications" -Status "Starting" -PercentComplete 0
|
||||
|
||||
Foreach ($Program in $($ProgramsToInstall -split ",")){
|
||||
|
||||
Write-Progress -Activity "Installing Applications" -Status "Installing $Program $($x + 1) of $count" -PercentComplete $($x/$count*100)
|
||||
Start-Process -FilePath winget -ArgumentList "install -e --accept-source-agreements --accept-package-agreements --silent $Program" -NoNewWindow -Wait;
|
||||
$X++
|
||||
}
|
||||
|
||||
Write-Progress -Activity "Installing Applications" -Status "Finished" -Completed
|
||||
|
||||
}
|
68
functions/private/Install-WinUtilWinget.ps1
Normal file
68
functions/private/Install-WinUtilWinget.ps1
Normal file
@ -0,0 +1,68 @@
|
||||
function Install-WinUtilWinget {
|
||||
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
Function is meant to ensure winget is installed
|
||||
|
||||
#>
|
||||
Try{
|
||||
Write-Host "Checking if Winget is Installed..."
|
||||
if (Test-WinUtilPackageManager -winget) {
|
||||
#Checks if winget executable exists and if the Windows Version is 1809 or higher
|
||||
Write-Host "Winget Already Installed"
|
||||
return
|
||||
}
|
||||
|
||||
#Gets the computer's information
|
||||
if ($null -eq $sync.ComputerInfo){
|
||||
$ComputerInfo = Get-ComputerInfo -ErrorAction Stop
|
||||
}
|
||||
Else {
|
||||
$ComputerInfo = $sync.ComputerInfo
|
||||
}
|
||||
|
||||
if (($ComputerInfo.WindowsVersion) -lt "1809") {
|
||||
#Checks if Windows Version is too old for winget
|
||||
Write-Host "Winget is not supported on this version of Windows (Pre-1809)"
|
||||
return
|
||||
}
|
||||
|
||||
#Gets the Windows Edition
|
||||
$OSName = if ($ComputerInfo.OSName) {
|
||||
$ComputerInfo.OSName
|
||||
}else {
|
||||
$ComputerInfo.WindowsProductName
|
||||
}
|
||||
|
||||
if (((($OSName.IndexOf("LTSC")) -ne -1) -or ($OSName.IndexOf("Server") -ne -1)) -and (($ComputerInfo.WindowsVersion) -ge "1809")) {
|
||||
|
||||
Write-Host "Running Alternative Installer for LTSC/Server Editions"
|
||||
|
||||
# Switching to winget-install from PSGallery from asheroto
|
||||
# Source: https://github.com/asheroto/winget-installer
|
||||
|
||||
Start-Process powershell.exe -Verb RunAs -ArgumentList "-command irm https://raw.githubusercontent.com/ChrisTitusTech/winutil/$BranchToUse/winget.ps1 | iex | Out-Host" -WindowStyle Normal -ErrorAction Stop
|
||||
|
||||
if(!(Test-WinUtilPackageManager -winget)){
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
#Installing Winget from the Microsoft Store
|
||||
Write-Host "Winget not found, installing it now."
|
||||
Start-Process "ms-appinstaller:?source=https://aka.ms/getwinget"
|
||||
$nid = (Get-Process AppInstaller).Id
|
||||
Wait-Process -Id $nid
|
||||
|
||||
if(!(Test-WinUtilPackageManager -winget)){
|
||||
break
|
||||
}
|
||||
}
|
||||
Write-Host "Winget Installed"
|
||||
}
|
||||
Catch{
|
||||
throw [WingetFailedInstall]::new('Failed to install')
|
||||
}
|
||||
}
|
26
functions/private/Invoke-WinUtilScript.ps1
Normal file
26
functions/private/Invoke-WinUtilScript.ps1
Normal file
@ -0,0 +1,26 @@
|
||||
function Invoke-WinUtilScript {
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
This function will run a seperate powershell script. Meant for things that can't be handled with the other functions
|
||||
|
||||
.EXAMPLE
|
||||
|
||||
$Scriptblock = [scriptblock]::Create({"Write-output 'Hello World'"})
|
||||
Invoke-WinUtilScript -ScriptBlock $scriptblock -Name "Hello World"
|
||||
|
||||
#>
|
||||
param (
|
||||
$Name,
|
||||
[scriptblock]$scriptblock
|
||||
)
|
||||
|
||||
Try{
|
||||
Invoke-Command $scriptblock -ErrorAction stop
|
||||
Write-Host "Running Script for $name"
|
||||
}
|
||||
Catch{
|
||||
Write-Warning "Unable to run script for $name due to unhandled exception"
|
||||
Write-Warning $psitem.Exception.StackTrace
|
||||
}
|
||||
}
|
57
functions/private/Invoke-WinUtilTweaks.ps1
Normal file
57
functions/private/Invoke-WinUtilTweaks.ps1
Normal file
@ -0,0 +1,57 @@
|
||||
function Invoke-WinUtilTweaks {
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
This function converts all the values from the tweaks.json and routes them to the appropriate function
|
||||
|
||||
#>
|
||||
|
||||
param(
|
||||
$CheckBox,
|
||||
$undo = $false
|
||||
)
|
||||
if($undo){
|
||||
$Values = @{
|
||||
Registry = "OriginalValue"
|
||||
ScheduledTask = "OriginalState"
|
||||
Service = "OriginalType"
|
||||
}
|
||||
}
|
||||
Else{
|
||||
$Values = @{
|
||||
Registry = "Value"
|
||||
ScheduledTask = "State"
|
||||
Service = "StartupType"
|
||||
}
|
||||
}
|
||||
|
||||
if($sync.configs.tweaks.$CheckBox.registry){
|
||||
$sync.configs.tweaks.$CheckBox.registry | ForEach-Object {
|
||||
Set-WinUtilRegistry -Name $psitem.Name -Path $psitem.Path -Type $psitem.Type -Value $psitem.$($values.registry)
|
||||
}
|
||||
}
|
||||
if($sync.configs.tweaks.$CheckBox.ScheduledTask){
|
||||
$sync.configs.tweaks.$CheckBox.ScheduledTask | ForEach-Object {
|
||||
Set-WinUtilScheduledTask -Name $psitem.Name -State $psitem.$($values.ScheduledTask)
|
||||
}
|
||||
}
|
||||
if($sync.configs.tweaks.$CheckBox.service){
|
||||
$sync.configs.tweaks.$CheckBox.service | ForEach-Object {
|
||||
Set-WinUtilService -Name $psitem.Name -StartupType $psitem.$($values.Service)
|
||||
}
|
||||
}
|
||||
|
||||
if(!$undo){
|
||||
if($sync.configs.tweaks.$CheckBox.appx){
|
||||
$sync.configs.tweaks.$CheckBox.appx | ForEach-Object {
|
||||
Remove-WinUtilAPPX -Name $psitem
|
||||
}
|
||||
}
|
||||
if($sync.configs.tweaks.$CheckBox.InvokeScript){
|
||||
$sync.configs.tweaks.$CheckBox.InvokeScript | ForEach-Object {
|
||||
$Scriptblock = [scriptblock]::Create($psitem)
|
||||
Invoke-WinUtilScript -ScriptBlock $scriptblock -Name $CheckBox
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
34
functions/private/Remove-WinUtilAPPX.ps1
Normal file
34
functions/private/Remove-WinUtilAPPX.ps1
Normal file
@ -0,0 +1,34 @@
|
||||
function Remove-WinUtilAPPX {
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
This function will remove any of the provided APPX names
|
||||
|
||||
.EXAMPLE
|
||||
|
||||
Remove-WinUtilAPPX -Name "Microsoft.Microsoft3DViewer"
|
||||
|
||||
#>
|
||||
param (
|
||||
$Name
|
||||
)
|
||||
|
||||
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] {
|
||||
if($psitem.Exception.Message -like "*The requested operation requires elevation*"){
|
||||
Write-Warning "Unable to uninstall $name due to a Security Exception"
|
||||
}
|
||||
Else{
|
||||
Write-Warning "Unable to uninstall $name due to unhandled exception"
|
||||
Write-Warning $psitem.Exception.StackTrace
|
||||
}
|
||||
}
|
||||
Catch{
|
||||
Write-Warning "Unable to uninstall $name due to unhandled exception"
|
||||
Write-Warning $psitem.Exception.StackTrace
|
||||
}
|
||||
}
|
32
functions/private/Set-WinUtilDNS.ps1
Normal file
32
functions/private/Set-WinUtilDNS.ps1
Normal file
@ -0,0 +1,32 @@
|
||||
function Set-WinUtilDNS {
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
This function will set the DNS of all interfaces that are in the "Up" state. It will lookup the values from the DNS.Json file
|
||||
|
||||
.EXAMPLE
|
||||
|
||||
Set-WinUtilDNS -DNSProvider "google"
|
||||
|
||||
#>
|
||||
param($DNSProvider)
|
||||
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"){
|
||||
Set-DnsClientServerAddress -InterfaceIndex $Adapter.ifIndex -ResetServerAddresses
|
||||
}
|
||||
Else{
|
||||
Set-DnsClientServerAddress -InterfaceIndex $Adapter.ifIndex -ServerAddresses ("$($sync.configs.dns.$DNSProvider.Primary)", "$($sync.configs.dns.$DNSProvider.Secondary)")
|
||||
}
|
||||
}
|
||||
}
|
||||
Catch{
|
||||
Write-Warning "Unable to set DNS Provider due to an unhandled exception"
|
||||
Write-Warning $psitem.Exception.StackTrace
|
||||
}
|
||||
}
|
40
functions/private/Set-WinUtilRegistry.ps1
Normal file
40
functions/private/Set-WinUtilRegistry.ps1
Normal file
@ -0,0 +1,40 @@
|
||||
function Set-WinUtilRegistry {
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
This function will make all modifications to the registry
|
||||
|
||||
.EXAMPLE
|
||||
|
||||
Set-WinUtilRegistry -Name "PublishUserActivities" -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Type "DWord" -Value "0"
|
||||
|
||||
#>
|
||||
param (
|
||||
$Name,
|
||||
$Path,
|
||||
$Type,
|
||||
$Value
|
||||
)
|
||||
|
||||
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..."
|
||||
New-Item -Path $Path -Force -ErrorAction Stop | Out-Null
|
||||
}
|
||||
|
||||
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] {
|
||||
Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
|
||||
}
|
||||
Catch [System.Management.Automation.ItemNotFoundException] {
|
||||
Write-Warning $psitem.Exception.ErrorRecord
|
||||
}
|
||||
Catch{
|
||||
Write-Warning "Unable to set $Name due to unhandled exception"
|
||||
Write-Warning $psitem.Exception.StackTrace
|
||||
}
|
||||
}
|
40
functions/private/Set-WinUtilScheduledTask.ps1
Normal file
40
functions/private/Set-WinUtilScheduledTask.ps1
Normal file
@ -0,0 +1,40 @@
|
||||
function Set-WinUtilScheduledTask {
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
This function will enable/disable the provided Scheduled Task
|
||||
|
||||
.EXAMPLE
|
||||
|
||||
Set-WinUtilScheduledTask -Name "Microsoft\Windows\Application Experience\Microsoft Compatibility Appraiser" -State "Disabled"
|
||||
|
||||
#>
|
||||
param (
|
||||
$Name,
|
||||
$State
|
||||
)
|
||||
|
||||
Try{
|
||||
if($State -eq "Disabled"){
|
||||
Write-Host "Disabling Scheduled Task $Name"
|
||||
Disable-ScheduledTask -TaskName $Name -ErrorAction Stop
|
||||
}
|
||||
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*"){
|
||||
Write-Warning "Scheduled Task $name was not Found"
|
||||
}
|
||||
Else{
|
||||
Write-Warning "Unable to set $Name due to unhandled exception"
|
||||
Write-Warning $psitem.Exception.Message
|
||||
}
|
||||
}
|
||||
Catch{
|
||||
Write-Warning "Unable to run script for $name due to unhandled exception"
|
||||
Write-Warning $psitem.Exception.StackTrace
|
||||
}
|
||||
}
|
43
functions/private/Set-WinUtilService.ps1
Normal file
43
functions/private/Set-WinUtilService.ps1
Normal file
@ -0,0 +1,43 @@
|
||||
Function Set-WinUtilService {
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
This function will change the startup type of services and start/stop them as needed
|
||||
|
||||
.EXAMPLE
|
||||
|
||||
Set-WinUtilService -Name "HomeGroupListener" -StartupType "Manual"
|
||||
|
||||
#>
|
||||
param (
|
||||
$Name,
|
||||
$StartupType
|
||||
)
|
||||
Try{
|
||||
Write-Host "Setting Services $Name to $StartupType"
|
||||
Set-Service -Name $Name -StartupType $StartupType -ErrorAction Stop
|
||||
|
||||
if($StartupType -eq "Disabled"){
|
||||
Write-Host "Stopping $Name"
|
||||
Stop-Service -Name $Name -Force -ErrorAction Stop
|
||||
}
|
||||
if($StartupType -eq "Enabled"){
|
||||
Write-Host "Starting $Name"
|
||||
Start-Service -Name $Name -Force -ErrorAction Stop
|
||||
}
|
||||
}
|
||||
Catch [System.Exception]{
|
||||
if($psitem.Exception.Message -like "*Cannot find any service with service name*" -or
|
||||
$psitem.Exception.Message -like "*was not found on computer*"){
|
||||
Write-Warning "Service $name was not Found"
|
||||
}
|
||||
Else{
|
||||
Write-Warning "Unable to set $Name due to unhandled exception"
|
||||
Write-Warning $psitem.Exception.Message
|
||||
}
|
||||
}
|
||||
Catch{
|
||||
Write-Warning "Unable to set $Name due to unhandled exception"
|
||||
Write-Warning $psitem.Exception.StackTrace
|
||||
}
|
||||
}
|
27
functions/private/Test-WinUtilPackageManager.ps1
Normal file
27
functions/private/Test-WinUtilPackageManager.ps1
Normal file
@ -0,0 +1,27 @@
|
||||
function Test-WinUtilPackageManager {
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
Checks for Winget or Choco depending on the paramater
|
||||
|
||||
#>
|
||||
|
||||
Param(
|
||||
[System.Management.Automation.SwitchParameter]$winget,
|
||||
[System.Management.Automation.SwitchParameter]$choco
|
||||
)
|
||||
|
||||
if($winget){
|
||||
if (Test-Path ~\AppData\Local\Microsoft\WindowsApps\winget.exe) {
|
||||
return $true
|
||||
}
|
||||
}
|
||||
|
||||
if($choco){
|
||||
if ((Get-Command -Name choco -ErrorAction Ignore) -and ($chocoVersion = (Get-Item "$env:ChocolateyInstall\choco.exe" -ErrorAction Ignore).VersionInfo.ProductVersion)){
|
||||
return $true
|
||||
}
|
||||
}
|
||||
|
||||
return $false
|
||||
}
|
22
functions/private/Update-WinUtilProgramWinget.ps1
Normal file
22
functions/private/Update-WinUtilProgramWinget.ps1
Normal file
@ -0,0 +1,22 @@
|
||||
Function Update-WinUtilProgramWinget {
|
||||
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
This will update programs via Winget using a new powershell.exe instance to prevent the GUI from locking up.
|
||||
|
||||
#>
|
||||
|
||||
[ScriptBlock]$wingetinstall = {
|
||||
|
||||
$host.ui.RawUI.WindowTitle = """Winget Install"""
|
||||
|
||||
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
|
||||
|
||||
}
|
49
functions/public/Invoke-WPFButton.ps1
Normal file
49
functions/public/Invoke-WPFButton.ps1
Normal file
@ -0,0 +1,49 @@
|
||||
function Invoke-WPFButton {
|
||||
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
Meant to make creating buttons easier. There is a section below in the gui that will assign this function to every button.
|
||||
This way you can dictate what each button does from this function.
|
||||
|
||||
Input will be the name of the button that is clicked.
|
||||
#>
|
||||
|
||||
Param ([string]$Button)
|
||||
|
||||
#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){
|
||||
|
||||
"WPFTab?BT" {Invoke-WPFTab $Button}
|
||||
"WPFinstall" {Invoke-WPFInstall}
|
||||
"WPFInstallUpgrade" {Invoke-WPFInstallUpgrade}
|
||||
"WPFdesktop" {Invoke-WPFPresets "Desktop"}
|
||||
"WPFlaptop" {Invoke-WPFPresets "laptop"}
|
||||
"WPFminimal" {Invoke-WPFPresets "minimal"}
|
||||
"WPFexport" {Invoke-WPFImpex -type "export"}
|
||||
"WPFimport" {Invoke-WPFImpex -type "import"}
|
||||
"WPFclear" {Invoke-WPFPresets -preset $null -imported $true}
|
||||
"WPFtweaksbutton" {Invoke-WPFtweaksbutton}
|
||||
"WPFAddUltPerf" {Invoke-WPFUltimatePerformance -State "Enabled"}
|
||||
"WPFRemoveUltPerf" {Invoke-WPFUltimatePerformance -State "Disabled"}
|
||||
"WPFToggleDarkMode" {Invoke-WPFDarkMode -DarkMoveEnabled $(Get-WinUtilDarkMode)}
|
||||
"WPFundoall" {Invoke-WPFundoall}
|
||||
"WPFFeatureInstall" {Invoke-WPFFeatureInstall}
|
||||
"WPFPanelDISM" {Invoke-WPFPanelDISM}
|
||||
"WPFPanelAutologin" {Invoke-WPFPanelAutologin}
|
||||
"WPFPanelcontrol" {Invoke-WPFControlPanel -Panel $button}
|
||||
"WPFPanelnetwork" {Invoke-WPFControlPanel -Panel $button}
|
||||
"WPFPanelpower" {Invoke-WPFControlPanel -Panel $button}
|
||||
"WPFPanelsound" {Invoke-WPFControlPanel -Panel $button}
|
||||
"WPFPanelsystem" {Invoke-WPFControlPanel -Panel $button}
|
||||
"WPFPaneluser" {Invoke-WPFControlPanel -Panel $button}
|
||||
"WPFUpdatesdefault" {Invoke-WPFUpdatesdefault}
|
||||
"WPFFixesUpdate" {Invoke-WPFFixesUpdate}
|
||||
"WPFUpdatesdisable" {Invoke-WPFUpdatesdisable}
|
||||
"WPFUpdatessecurity" {Invoke-WPFUpdatessecurity}
|
||||
|
||||
|
||||
}
|
||||
}
|
18
functions/public/Invoke-WPFControlPanel.ps1
Normal file
18
functions/public/Invoke-WPFControlPanel.ps1
Normal file
@ -0,0 +1,18 @@
|
||||
function Invoke-WPFControlPanel {
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
Simple Switch for lagacy windows
|
||||
|
||||
#>
|
||||
param($Panel)
|
||||
|
||||
switch ($Panel){
|
||||
"WPFPanelcontrol" {cmd /c control}
|
||||
"WPFPanelnetwork" {cmd /c ncpa.cpl}
|
||||
"WPFPanelpower" {cmd /c powercfg.cpl}
|
||||
"WPFPanelsound" {cmd /c mmsys.cpl}
|
||||
"WPFPanelsystem" {cmd /c sysdm.cpl}
|
||||
"WPFPaneluser" {cmd /c "control userpasswords2"}
|
||||
}
|
||||
}
|
33
functions/public/Invoke-WPFDarkMode.ps1
Normal file
33
functions/public/Invoke-WPFDarkMode.ps1
Normal file
@ -0,0 +1,33 @@
|
||||
Function Invoke-WPFDarkMode {
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
Sets Dark Mode on or off
|
||||
|
||||
#>
|
||||
Param($DarkMoveEnabled)
|
||||
Try{
|
||||
if ($DarkMoveEnabled -eq $false){
|
||||
Write-Host "Enabling Dark Mode"
|
||||
$DarkMoveValue = 0
|
||||
}
|
||||
else {
|
||||
Write-Host "Disabling Dark Mode"
|
||||
$DarkMoveValue = 1
|
||||
}
|
||||
|
||||
$Theme = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize"
|
||||
Set-ItemProperty -Path $Theme -Name AppsUseLightTheme -Value $DarkMoveValue
|
||||
Set-ItemProperty -Path $Theme -Name SystemUsesLightTheme -Value $DarkMoveValue
|
||||
}
|
||||
Catch [System.Security.SecurityException] {
|
||||
Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception"
|
||||
}
|
||||
Catch [System.Management.Automation.ItemNotFoundException] {
|
||||
Write-Warning $psitem.Exception.ErrorRecord
|
||||
}
|
||||
Catch{
|
||||
Write-Warning "Unable to set $Name due to unhandled exception"
|
||||
Write-Warning $psitem.Exception.StackTrace
|
||||
}
|
||||
}
|
56
functions/public/Invoke-WPFFeatureInstall.ps1
Normal file
56
functions/public/Invoke-WPFFeatureInstall.ps1
Normal file
@ -0,0 +1,56 @@
|
||||
function Invoke-WPFFeatureInstall {
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
GUI Function to install Windows Features
|
||||
|
||||
#>
|
||||
If ( $WPFFeaturesdotnet.IsChecked -eq $true ) {
|
||||
Enable-WindowsOptionalFeature -Online -FeatureName "NetFx4-AdvSrvs" -All -NoRestart
|
||||
Enable-WindowsOptionalFeature -Online -FeatureName "NetFx3" -All -NoRestart
|
||||
}
|
||||
If ( $WPFFeatureshyperv.IsChecked -eq $true ) {
|
||||
Enable-WindowsOptionalFeature -Online -FeatureName "HypervisorPlatform" -All -NoRestart
|
||||
Enable-WindowsOptionalFeature -Online -FeatureName "Microsoft-Hyper-V-All" -All -NoRestart
|
||||
Enable-WindowsOptionalFeature -Online -FeatureName "Microsoft-Hyper-V" -All -NoRestart
|
||||
Enable-WindowsOptionalFeature -Online -FeatureName "Microsoft-Hyper-V-Tools-All" -All -NoRestart
|
||||
Enable-WindowsOptionalFeature -Online -FeatureName "Microsoft-Hyper-V-Management-PowerShell" -All -NoRestart
|
||||
Enable-WindowsOptionalFeature -Online -FeatureName "Microsoft-Hyper-V-Hypervisor" -All -NoRestart
|
||||
Enable-WindowsOptionalFeature -Online -FeatureName "Microsoft-Hyper-V-Services" -All -NoRestart
|
||||
Enable-WindowsOptionalFeature -Online -FeatureName "Microsoft-Hyper-V-Management-Clients" -All -NoRestart
|
||||
cmd /c bcdedit /set hypervisorschedulertype classic
|
||||
Write-Host "HyperV is now installed and configured. Please Reboot before using."
|
||||
}
|
||||
If ( $WPFFeatureslegacymedia.IsChecked -eq $true ) {
|
||||
Enable-WindowsOptionalFeature -Online -FeatureName "WindowsMediaPlayer" -All -NoRestart
|
||||
Enable-WindowsOptionalFeature -Online -FeatureName "MediaPlayback" -All -NoRestart
|
||||
Enable-WindowsOptionalFeature -Online -FeatureName "DirectPlay" -All -NoRestart
|
||||
Enable-WindowsOptionalFeature -Online -FeatureName "LegacyComponents" -All -NoRestart
|
||||
}
|
||||
If ( $WPFFeaturewsl.IsChecked -eq $true ) {
|
||||
Enable-WindowsOptionalFeature -Online -FeatureName "VirtualMachinePlatform" -All -NoRestart
|
||||
Enable-WindowsOptionalFeature -Online -FeatureName "Microsoft-Windows-Subsystem-Linux" -All -NoRestart
|
||||
Write-Host "WSL is now installed and configured. Please Reboot before using."
|
||||
}
|
||||
If ( $WPFFeaturenfs.IsChecked -eq $true ) {
|
||||
Enable-WindowsOptionalFeature -Online -FeatureName "ServicesForNFS-ClientOnly" -All -NoRestart
|
||||
Enable-WindowsOptionalFeature -Online -FeatureName "ClientForNFS-Infrastructure" -All -NoRestart
|
||||
Enable-WindowsOptionalFeature -Online -FeatureName "NFS-Administration" -All -NoRestart
|
||||
nfsadmin client stop
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default" -Name "AnonymousUID" -Type DWord -Value 0
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default" -Name "AnonymousGID" -Type DWord -Value 0
|
||||
nfsadmin client start
|
||||
nfsadmin client localhost config fileaccess=755 SecFlavors=+sys -krb5 -krb5i
|
||||
Write-Host "NFS is now setup for user based NFS mounts"
|
||||
}
|
||||
$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)
|
||||
|
||||
Write-Host "================================="
|
||||
Write-Host "--- Features are Installed ---"
|
||||
Write-Host "================================="
|
||||
}
|
111
functions/public/Invoke-WPFFixesUpdate.ps1
Normal file
111
functions/public/Invoke-WPFFixesUpdate.ps1
Normal file
@ -0,0 +1,111 @@
|
||||
function Invoke-WPFFixesUpdate {
|
||||
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
PlaceHolder
|
||||
|
||||
#>
|
||||
|
||||
### Reset Windows Update Script - reregister dlls, services, and remove registry entires.
|
||||
Write-Host "1. Stopping Windows Update Services..."
|
||||
Stop-Service -Name BITS
|
||||
Stop-Service -Name wuauserv
|
||||
Stop-Service -Name appidsvc
|
||||
Stop-Service -Name cryptsvc
|
||||
|
||||
Write-Host "2. Remove QMGR Data file..."
|
||||
Remove-Item "$env:allusersprofile\Application Data\Microsoft\Network\Downloader\qmgr*.dat" -ErrorAction SilentlyContinue
|
||||
|
||||
Write-Host "3. Renaming the Software Distribution and CatRoot Folder..."
|
||||
Rename-Item $env:systemroot\SoftwareDistribution SoftwareDistribution.bak -ErrorAction SilentlyContinue
|
||||
Rename-Item $env:systemroot\System32\Catroot2 catroot2.bak -ErrorAction SilentlyContinue
|
||||
|
||||
Write-Host "4. Removing old Windows Update log..."
|
||||
Remove-Item $env:systemroot\WindowsUpdate.log -ErrorAction SilentlyContinue
|
||||
|
||||
Write-Host "5. Resetting the Windows Update Services to defualt settings..."
|
||||
"sc.exe sdset bits D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)"
|
||||
"sc.exe sdset wuauserv D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)"
|
||||
Set-Location $env:systemroot\system32
|
||||
|
||||
Write-Host "6. Registering some DLLs..."
|
||||
regsvr32.exe /s atl.dll
|
||||
regsvr32.exe /s urlmon.dll
|
||||
regsvr32.exe /s mshtml.dll
|
||||
regsvr32.exe /s shdocvw.dll
|
||||
regsvr32.exe /s browseui.dll
|
||||
regsvr32.exe /s jscript.dll
|
||||
regsvr32.exe /s vbscript.dll
|
||||
regsvr32.exe /s scrrun.dll
|
||||
regsvr32.exe /s msxml.dll
|
||||
regsvr32.exe /s msxml3.dll
|
||||
regsvr32.exe /s msxml6.dll
|
||||
regsvr32.exe /s actxprxy.dll
|
||||
regsvr32.exe /s softpub.dll
|
||||
regsvr32.exe /s wintrust.dll
|
||||
regsvr32.exe /s dssenh.dll
|
||||
regsvr32.exe /s rsaenh.dll
|
||||
regsvr32.exe /s gpkcsp.dll
|
||||
regsvr32.exe /s sccbase.dll
|
||||
regsvr32.exe /s slbcsp.dll
|
||||
regsvr32.exe /s cryptdlg.dll
|
||||
regsvr32.exe /s oleaut32.dll
|
||||
regsvr32.exe /s ole32.dll
|
||||
regsvr32.exe /s shell32.dll
|
||||
regsvr32.exe /s initpki.dll
|
||||
regsvr32.exe /s wuapi.dll
|
||||
regsvr32.exe /s wuaueng.dll
|
||||
regsvr32.exe /s wuaueng1.dll
|
||||
regsvr32.exe /s wucltui.dll
|
||||
regsvr32.exe /s wups.dll
|
||||
regsvr32.exe /s wups2.dll
|
||||
regsvr32.exe /s wuweb.dll
|
||||
regsvr32.exe /s qmgr.dll
|
||||
regsvr32.exe /s qmgrprxy.dll
|
||||
regsvr32.exe /s wucltux.dll
|
||||
regsvr32.exe /s muweb.dll
|
||||
regsvr32.exe /s wuwebv.dll
|
||||
|
||||
Write-Host "7) Removing WSUS client settings..."
|
||||
REG DELETE "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v AccountDomainSid /f
|
||||
REG DELETE "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v PingID /f
|
||||
REG DELETE "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v SusClientId /f
|
||||
|
||||
Write-Host "8) Resetting the WinSock..."
|
||||
netsh winsock reset
|
||||
netsh winhttp reset proxy
|
||||
netsh int ip reset
|
||||
|
||||
Write-Host "9) Delete all BITS jobs..."
|
||||
Get-BitsTransfer | Remove-BitsTransfer
|
||||
|
||||
Write-Host "10) Attempting to install the Windows Update Agent..."
|
||||
If ([System.Environment]::Is64BitOperatingSystem) {
|
||||
wusa Windows8-RT-KB2937636-x64 /quiet
|
||||
}
|
||||
else {
|
||||
wusa Windows8-RT-KB2937636-x86 /quiet
|
||||
}
|
||||
|
||||
Write-Host "11) Starting Windows Update Services..."
|
||||
Start-Service -Name BITS
|
||||
Start-Service -Name wuauserv
|
||||
Start-Service -Name appidsvc
|
||||
Start-Service -Name cryptsvc
|
||||
|
||||
Write-Host "12) Forcing discovery..."
|
||||
wuauclt /resetauthorization /detectnow
|
||||
|
||||
Write-Host "Process complete. Please reboot your computer."
|
||||
|
||||
$ButtonType = [System.Windows.MessageBoxButton]::OK
|
||||
$MessageboxTitle = "Reset Windows Update "
|
||||
$Messageboxbody = ("Stock settings loaded.`n Please reboot your computer")
|
||||
$MessageIcon = [System.Windows.MessageBoxImage]::Information
|
||||
|
||||
[System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon)
|
||||
Write-Host "================================="
|
||||
Write-Host "-- Reset ALL Updates to Factory -"
|
||||
Write-Host "================================="
|
||||
}
|
37
functions/public/Invoke-WPFFormVariables.ps1
Normal file
37
functions/public/Invoke-WPFFormVariables.ps1
Normal file
@ -0,0 +1,37 @@
|
||||
Function Invoke-WPFFormVariables {
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
PlaceHolder
|
||||
|
||||
#>
|
||||
#If ($global:ReadmeDisplay -ne $true) { Write-Host "If you need to reference this display again, run Get-FormVariables" -ForegroundColor Yellow; $global:ReadmeDisplay = $true }
|
||||
|
||||
|
||||
Write-Host ""
|
||||
Write-Host " CCCCCCCCCCCCCTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT "
|
||||
Write-Host " CCC::::::::::::CT:::::::::::::::::::::TT:::::::::::::::::::::T "
|
||||
Write-Host "CC:::::::::::::::CT:::::::::::::::::::::TT:::::::::::::::::::::T "
|
||||
Write-Host "C:::::CCCCCCCC::::CT:::::TT:::::::TT:::::TT:::::TT:::::::TT:::::T "
|
||||
Write-Host "C:::::C CCCCCCTTTTTT T:::::T TTTTTTTTTTTT T:::::T TTTTTT"
|
||||
Write-Host "C:::::C T:::::T T:::::T "
|
||||
Write-Host "C:::::C T:::::T T:::::T "
|
||||
Write-Host "C:::::C T:::::T T:::::T "
|
||||
Write-Host "C:::::C T:::::T T:::::T "
|
||||
Write-Host "C:::::C T:::::T T:::::T "
|
||||
Write-Host "C:::::C T:::::T T:::::T "
|
||||
Write-Host "C:::::C CCCCCC T:::::T T:::::T "
|
||||
Write-Host "C:::::CCCCCCCC::::C TT:::::::TT TT:::::::TT "
|
||||
Write-Host "CC:::::::::::::::C T:::::::::T T:::::::::T "
|
||||
Write-Host "CCC::::::::::::C T:::::::::T T:::::::::T "
|
||||
Write-Host " CCCCCCCCCCCCC TTTTTTTTTTT TTTTTTTTTTT "
|
||||
Write-Host ""
|
||||
Write-Host "====Chris Titus Tech====="
|
||||
Write-Host "=====Windows Toolbox====="
|
||||
|
||||
|
||||
#====DEBUG GUI Elements====
|
||||
|
||||
#Write-Host "Found the following interactable elements from our form" -ForegroundColor Cyan
|
||||
#get-variable WPF*
|
||||
}
|
37
functions/public/Invoke-WPFImpex.ps1
Normal file
37
functions/public/Invoke-WPFImpex.ps1
Normal file
@ -0,0 +1,37 @@
|
||||
function Invoke-WPFImpex {
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
This function handles importing and exporting of the checkboxes checked for the tweaks section
|
||||
|
||||
.EXAMPLE
|
||||
|
||||
Invoke-WPFImpex -type "export"
|
||||
|
||||
#>
|
||||
param($type)
|
||||
|
||||
if ($type -eq "export"){
|
||||
$FileBrowser = New-Object System.Windows.Forms.SaveFileDialog
|
||||
}
|
||||
if ($type -eq "import"){
|
||||
$FileBrowser = New-Object System.Windows.Forms.OpenFileDialog
|
||||
}
|
||||
|
||||
$FileBrowser.InitialDirectory = [Environment]::GetFolderPath('Desktop')
|
||||
$FileBrowser.Filter = "JSON Files (*.json)|*.json"
|
||||
$FileBrowser.ShowDialog() | Out-Null
|
||||
|
||||
if($FileBrowser.FileName -eq ""){
|
||||
return
|
||||
}
|
||||
|
||||
if ($type -eq "export"){
|
||||
$jsonFile = Get-WinUtilCheckBoxes WPFTweaks -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
|
||||
}
|
||||
}
|
52
functions/public/Invoke-WPFInstall.ps1
Normal file
52
functions/public/Invoke-WPFInstall.ps1
Normal file
@ -0,0 +1,52 @@
|
||||
function Invoke-WPFInstall {
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
PlaceHolder
|
||||
|
||||
#>
|
||||
|
||||
if($sync.ProcessRunning){
|
||||
$msg = "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"
|
||||
|
||||
if ($wingetinstall.Count -eq 0) {
|
||||
$WarningMsg = "Please select the program(s) to install"
|
||||
[System.Windows.MessageBox]::Show($WarningMsg, $AppTitle, [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
|
||||
return
|
||||
}
|
||||
|
||||
Invoke-WPFRunspace -ArgumentList $WingetInstall -scriptblock {
|
||||
param($WingetInstall)
|
||||
try{
|
||||
$sync.ProcessRunning = $true
|
||||
|
||||
# Ensure winget is installed
|
||||
Install-WinUtilWinget
|
||||
|
||||
# Install all winget 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 "==========================================="
|
||||
}
|
||||
Catch {
|
||||
Write-Host "==========================================="
|
||||
Write-Host "-- Winget failed to install ---"
|
||||
Write-Host "==========================================="
|
||||
}
|
||||
$sync.ProcessRunning = $False
|
||||
}
|
||||
}
|
27
functions/public/Invoke-WPFInstallUpgrade.ps1
Normal file
27
functions/public/Invoke-WPFInstallUpgrade.ps1
Normal file
@ -0,0 +1,27 @@
|
||||
function Invoke-WPFInstallUpgrade {
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
PlaceHolder
|
||||
|
||||
#>
|
||||
if(!(Test-WinUtilPackageManager -winget)){
|
||||
Write-Host "==========================================="
|
||||
Write-Host "-- Winget is not installed ---"
|
||||
Write-Host "==========================================="
|
||||
return
|
||||
}
|
||||
|
||||
if(Get-WinUtilInstallerProcess -Process $global:WinGetInstall){
|
||||
$msg = "Install process is currently running. Please check for a powershell window labled 'Winget Install'"
|
||||
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
|
||||
return
|
||||
}
|
||||
|
||||
Update-WinUtilProgramWinget
|
||||
|
||||
Write-Host "==========================================="
|
||||
Write-Host "-- Updates started ---"
|
||||
Write-Host "-- You can close this window if desired ---"
|
||||
Write-Host "==========================================="
|
||||
}
|
10
functions/public/Invoke-WPFPanelAutologin.ps1
Normal file
10
functions/public/Invoke-WPFPanelAutologin.ps1
Normal file
@ -0,0 +1,10 @@
|
||||
function Invoke-WPFPanelAutologin {
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
PlaceHolder
|
||||
|
||||
#>
|
||||
curl.exe -ss "https://live.sysinternals.com/Autologon.exe" -o $env:temp\autologin.exe # Official Microsoft recommendation https://learn.microsoft.com/en-us/sysinternals/downloads/autologon
|
||||
cmd /c $env:temp\autologin.exe
|
||||
}
|
13
functions/public/Invoke-WPFPanelDISM.ps1
Normal file
13
functions/public/Invoke-WPFPanelDISM.ps1
Normal file
@ -0,0 +1,13 @@
|
||||
function Invoke-WPFPanelDISM {
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
PlaceHolder
|
||||
|
||||
#>
|
||||
Start-Process PowerShell -ArgumentList "Write-Host '(1/4) Chkdsk' -ForegroundColor Green; Chkdsk /scan;
|
||||
Write-Host '`n(2/4) SFC - 1st scan' -ForegroundColor Green; sfc /scannow;
|
||||
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
|
||||
}
|
31
functions/public/Invoke-WPFPresets.ps1
Normal file
31
functions/public/Invoke-WPFPresets.ps1
Normal file
@ -0,0 +1,31 @@
|
||||
function Invoke-WPFPresets {
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
Meant to make settings presets easier in the tweaks tab. Will pull the data from config/preset.json
|
||||
|
||||
#>
|
||||
|
||||
param(
|
||||
$preset,
|
||||
[bool]$imported = $false
|
||||
)
|
||||
if($imported -eq $true){
|
||||
$CheckBoxesToCheck = $preset
|
||||
}
|
||||
Else{
|
||||
$CheckBoxesToCheck = $sync.configs.preset.$preset
|
||||
}
|
||||
|
||||
#Uncheck all
|
||||
get-variable | Where-Object {$_.name -like "*tweaks*"} | ForEach-Object {
|
||||
if ($psitem.value.gettype().name -eq "CheckBox"){
|
||||
$CheckBox = Get-Variable $psitem.Name
|
||||
if ($CheckBoxesToCheck -contains $CheckBox.name){
|
||||
$checkbox.value.ischecked = $true
|
||||
}
|
||||
else{$checkbox.value.ischecked = $false}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
73
functions/public/Invoke-WPFRunspace.ps1
Normal file
73
functions/public/Invoke-WPFRunspace.ps1
Normal file
@ -0,0 +1,73 @@
|
||||
function Invoke-WPFRunspace {
|
||||
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
Simple function to make it easier to invoke a runspace from inside the script.
|
||||
|
||||
.EXAMPLE
|
||||
|
||||
$params = @{
|
||||
ScriptBlock = $sync.ScriptsInstallPrograms
|
||||
ArgumentList = "Installadvancedip,Installbitwarden"
|
||||
Verbose = $true
|
||||
}
|
||||
|
||||
Invoke-WPFRunspace @params
|
||||
|
||||
#>
|
||||
|
||||
[CmdletBinding()]
|
||||
Param (
|
||||
$ScriptBlock,
|
||||
$ArgumentList
|
||||
)
|
||||
|
||||
#Configure max thread count for RunspacePool.
|
||||
$maxthreads = [int]$env:NUMBER_OF_PROCESSORS
|
||||
|
||||
#Create a new session state for parsing variables ie hashtable into our runspace.
|
||||
$hashVars = New-object System.Management.Automation.Runspaces.SessionStateVariableEntry -ArgumentList 'sync',$sync,$Null
|
||||
$InitialSessionState = [System.Management.Automation.Runspaces.InitialSessionState]::CreateDefault()
|
||||
|
||||
#Add the variable to the RunspacePool sessionstate
|
||||
$InitialSessionState.Variables.Add($hashVars)
|
||||
|
||||
#Add functions
|
||||
$functions = Get-ChildItem function:\ | Where-Object {$_.name -like "*winutil*" -or $_.name -like "*WPF*"}
|
||||
foreach ($function in $functions){
|
||||
$functionDefinition = Get-Content function:\$($function.name)
|
||||
$functionEntry = New-Object System.Management.Automation.Runspaces.SessionStateFunctionEntry -ArgumentList $($function.name), $functionDefinition
|
||||
|
||||
# And add it to the iss object
|
||||
$initialSessionState.Commands.Add($functionEntry)
|
||||
}
|
||||
|
||||
#Create our runspace pool. We are entering three parameters here min thread count, max thread count and host machine of where these runspaces should be made.
|
||||
$script:runspace = [runspacefactory]::CreateRunspacePool(1,$maxthreads,$InitialSessionState, $Host)
|
||||
|
||||
|
||||
#Crate a PowerShell instance.
|
||||
$script:powershell = [powershell]::Create()
|
||||
|
||||
#Open a RunspacePool instance.
|
||||
$script:runspace.Open()
|
||||
|
||||
#Add Scriptblock and Arguments to runspace
|
||||
$script:powershell.AddScript($ScriptBlock)
|
||||
$script:powershell.AddArgument($ArgumentList)
|
||||
$script:powershell.RunspacePool = $script:runspace
|
||||
|
||||
#Run our RunspacePool.
|
||||
$script:handle = $script:powershell.BeginInvoke()
|
||||
|
||||
#Cleanup our RunspacePool threads when they are complete ie. GC.
|
||||
if ($script:handle.IsCompleted)
|
||||
{
|
||||
$script:powershell.EndInvoke($script:handle)
|
||||
$script:powershell.Dispose()
|
||||
$script:runspace.Dispose()
|
||||
$script:runspace.Close()
|
||||
[System.GC]::Collect()
|
||||
}
|
||||
}
|
24
functions/public/Invoke-WPFTab.ps1
Normal file
24
functions/public/Invoke-WPFTab.ps1
Normal file
@ -0,0 +1,24 @@
|
||||
function Invoke-WPFTab {
|
||||
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
Sole purpose of this fuction reduce duplicated code for switching between tabs.
|
||||
|
||||
#>
|
||||
|
||||
Param ($ClickedTab)
|
||||
$Tabs = Get-Variable WPFTab?BT
|
||||
$TabNav = Get-Variable WPFTabNav
|
||||
$x = [int]($ClickedTab -replace "WPFTab","" -replace "BT","") - 1
|
||||
|
||||
0..($Tabs.Count -1 ) | ForEach-Object {
|
||||
|
||||
if ($x -eq $psitem){
|
||||
$TabNav.value.Items[$psitem].IsSelected = $true
|
||||
}
|
||||
else{
|
||||
$TabNav.value.Items[$psitem].IsSelected = $false
|
||||
}
|
||||
}
|
||||
}
|
30
functions/public/Invoke-WPFUltimatePerformance.ps1
Normal file
30
functions/public/Invoke-WPFUltimatePerformance.ps1
Normal file
@ -0,0 +1,30 @@
|
||||
Function Invoke-WPFUltimatePerformance {
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
PlaceHolder
|
||||
|
||||
#>
|
||||
param($State)
|
||||
Try{
|
||||
$guid = "e9a42b02-d5df-448d-aa00-03f14749eb61"
|
||||
|
||||
if($state -eq "Enabled"){
|
||||
Write-Host "Adding Ultimate Performance Profile"
|
||||
[scriptblock]$command = {powercfg -duplicatescheme $guid}
|
||||
|
||||
}
|
||||
if($state -eq "Disabled"){
|
||||
Write-Host "Removing Ultimate Performance Profile"
|
||||
[scriptblock]$command = {powercfg -delete $guid}
|
||||
}
|
||||
|
||||
$output = Invoke-Command -ScriptBlock $command
|
||||
if($output -like "*does not exist*"){
|
||||
throw [GenericException]::new('Failed to modify profile')
|
||||
}
|
||||
}
|
||||
Catch{
|
||||
Write-Warning $psitem.Exception.Message
|
||||
}
|
||||
}
|
45
functions/public/Invoke-WPFUpdatesdefault.ps1
Normal file
45
functions/public/Invoke-WPFUpdatesdefault.ps1
Normal file
@ -0,0 +1,45 @@
|
||||
function Invoke-WPFUpdatesdefault {
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
PlaceHolder
|
||||
|
||||
#>
|
||||
If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU")) {
|
||||
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Force | Out-Null
|
||||
}
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "NoAutoUpdate" -Type DWord -Value 0
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "AUOptions" -Type DWord -Value 3
|
||||
If (!(Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config")) {
|
||||
New-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config" -Force | Out-Null
|
||||
}
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config" -Name "DODownloadMode" -Type DWord -Value 1
|
||||
|
||||
$services = @(
|
||||
"BITS"
|
||||
"wuauserv"
|
||||
)
|
||||
|
||||
foreach ($service in $services) {
|
||||
# -ErrorAction SilentlyContinue is so it doesn't write an error to stdout if a service doesn't exist
|
||||
|
||||
Write-Host "Setting $service StartupType to Automatic"
|
||||
Get-Service -Name $service -ErrorAction SilentlyContinue | Set-Service -StartupType Automatic
|
||||
}
|
||||
Write-Host "Enabling driver offering through Windows Update..."
|
||||
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Device Metadata" -Name "PreventDeviceMetadataFromNetwork" -ErrorAction SilentlyContinue
|
||||
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching" -Name "DontPromptForWindowsUpdate" -ErrorAction SilentlyContinue
|
||||
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching" -Name "DontSearchWindowsUpdate" -ErrorAction SilentlyContinue
|
||||
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching" -Name "DriverUpdateWizardWuSearchEnabled" -ErrorAction SilentlyContinue
|
||||
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" -Name "ExcludeWUDriversInQualityUpdate" -ErrorAction SilentlyContinue
|
||||
Write-Host "Enabling Windows Update automatic restart..."
|
||||
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "NoAutoRebootWithLoggedOnUsers" -ErrorAction SilentlyContinue
|
||||
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "AUPowerManagement" -ErrorAction SilentlyContinue
|
||||
Write-Host "Enabled driver offering through Windows Update"
|
||||
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "BranchReadinessLevel" -ErrorAction SilentlyContinue
|
||||
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "DeferFeatureUpdatesPeriodInDays" -ErrorAction SilentlyContinue
|
||||
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "DeferQualityUpdatesPeriodInDays " -ErrorAction SilentlyContinue
|
||||
Write-Host "================================="
|
||||
Write-Host "--- Updates Set to Default ---"
|
||||
Write-Host "================================="
|
||||
}
|
32
functions/public/Invoke-WPFUpdatesdisable.ps1
Normal file
32
functions/public/Invoke-WPFUpdatesdisable.ps1
Normal file
@ -0,0 +1,32 @@
|
||||
function Invoke-WPFUpdatesdisable {
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
PlaceHolder
|
||||
|
||||
#>
|
||||
If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU")) {
|
||||
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Force | Out-Null
|
||||
}
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "NoAutoUpdate" -Type DWord -Value 1
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "AUOptions" -Type DWord -Value 1
|
||||
If (!(Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config")) {
|
||||
New-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config" -Force | Out-Null
|
||||
}
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config" -Name "DODownloadMode" -Type DWord -Value 0
|
||||
|
||||
$services = @(
|
||||
"BITS"
|
||||
"wuauserv"
|
||||
)
|
||||
|
||||
foreach ($service in $services) {
|
||||
# -ErrorAction SilentlyContinue is so it doesn't write an error to stdout if a service doesn't exist
|
||||
|
||||
Write-Host "Setting $service StartupType to Disabled"
|
||||
Get-Service -Name $service -ErrorAction SilentlyContinue | Set-Service -StartupType Disabled
|
||||
}
|
||||
Write-Host "================================="
|
||||
Write-Host "--- Updates ARE DISABLED ---"
|
||||
Write-Host "================================="
|
||||
}
|
43
functions/public/Invoke-WPFUpdatessecurity.ps1
Normal file
43
functions/public/Invoke-WPFUpdatessecurity.ps1
Normal file
@ -0,0 +1,43 @@
|
||||
function Invoke-WPFUpdatessecurity {
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
PlaceHolder
|
||||
|
||||
#>
|
||||
Write-Host "Disabling driver offering through Windows Update..."
|
||||
If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Device Metadata")) {
|
||||
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Device Metadata" -Force | Out-Null
|
||||
}
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Device Metadata" -Name "PreventDeviceMetadataFromNetwork" -Type DWord -Value 1
|
||||
If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching")) {
|
||||
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching" -Force | Out-Null
|
||||
}
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching" -Name "DontPromptForWindowsUpdate" -Type DWord -Value 1
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching" -Name "DontSearchWindowsUpdate" -Type DWord -Value 1
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching" -Name "DriverUpdateWizardWuSearchEnabled" -Type DWord -Value 0
|
||||
If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate")) {
|
||||
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" | Out-Null
|
||||
}
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" -Name "ExcludeWUDriversInQualityUpdate" -Type DWord -Value 1
|
||||
Write-Host "Disabling Windows Update automatic restart..."
|
||||
If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU")) {
|
||||
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Force | Out-Null
|
||||
}
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "NoAutoRebootWithLoggedOnUsers" -Type DWord -Value 1
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "AUPowerManagement" -Type DWord -Value 0
|
||||
Write-Host "Disabled driver offering through Windows Update"
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "BranchReadinessLevel" -Type DWord -Value 20
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "DeferFeatureUpdatesPeriodInDays" -Type DWord -Value 365
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "DeferQualityUpdatesPeriodInDays " -Type DWord -Value 4
|
||||
|
||||
$ButtonType = [System.Windows.MessageBoxButton]::OK
|
||||
$MessageboxTitle = "Set Security Updates"
|
||||
$Messageboxbody = ("Recommended Update settings loaded")
|
||||
$MessageIcon = [System.Windows.MessageBoxImage]::Information
|
||||
|
||||
[System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon)
|
||||
Write-Host "================================="
|
||||
Write-Host "-- Updates Set to Recommended ---"
|
||||
Write-Host "================================="
|
||||
}
|
40
functions/public/Invoke-WPFtweaksbutton.ps1
Normal file
40
functions/public/Invoke-WPFtweaksbutton.ps1
Normal file
@ -0,0 +1,40 @@
|
||||
function Invoke-WPFtweaksbutton {
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
PlaceHolder
|
||||
|
||||
#>
|
||||
|
||||
if($sync.ProcessRunning){
|
||||
$msg = "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"
|
||||
|
||||
Set-WinUtilDNS -DNSProvider $WPFchangedns.text
|
||||
|
||||
Invoke-WPFRunspace -ArgumentList $Tweaks -ScriptBlock {
|
||||
param($Tweaks)
|
||||
|
||||
$sync.ProcessRunning = $true
|
||||
|
||||
Foreach ($tweak in $tweaks){
|
||||
Invoke-WinUtilTweaks $tweak
|
||||
}
|
||||
|
||||
$sync.ProcessRunning = $false
|
||||
Write-Host "================================="
|
||||
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)
|
||||
}
|
||||
}
|
190
functions/public/Invoke-WPFundoall.ps1
Normal file
190
functions/public/Invoke-WPFundoall.ps1
Normal file
@ -0,0 +1,190 @@
|
||||
function Invoke-WPFundoall {
|
||||
<#
|
||||
|
||||
.DESCRIPTION
|
||||
PlaceHolder
|
||||
|
||||
#>
|
||||
|
||||
if($sync.ProcessRunning){
|
||||
$msg = "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"
|
||||
|
||||
Invoke-WPFRunspace -ArgumentList $Tweaks -ScriptBlock {
|
||||
param($Tweaks)
|
||||
|
||||
$sync.ProcessRunning = $true
|
||||
|
||||
Foreach ($tweak in $tweaks){
|
||||
Invoke-WinUtilTweaks $tweak -undo $true
|
||||
}
|
||||
|
||||
$sync.ProcessRunning = $false
|
||||
Write-Host "=================================="
|
||||
Write-Host "--- Undo 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)
|
||||
}
|
||||
|
||||
<#
|
||||
|
||||
Write-Host "Creating Restore Point in case something bad happens"
|
||||
Enable-ComputerRestore -Drive "$env:SystemDrive"
|
||||
Checkpoint-Computer -Description "RestorePoint1" -RestorePointType "MODIFY_SETTINGS"
|
||||
|
||||
Write-Host "Enabling Telemetry..."
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection" -Name "AllowTelemetry" -Type DWord -Value 1
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection" -Name "AllowTelemetry" -Type DWord -Value 1
|
||||
Write-Host "Enabling Wi-Fi Sense"
|
||||
Set-ItemProperty -Path "HKLM:\Software\Microsoft\PolicyManager\default\WiFi\AllowWiFiHotSpotReporting" -Name "Value" -Type DWord -Value 1
|
||||
Set-ItemProperty -Path "HKLM:\Software\Microsoft\PolicyManager\default\WiFi\AllowAutoConnectToWiFiSenseHotspots" -Name "Value" -Type DWord -Value 1
|
||||
Write-Host "Enabling Application suggestions..."
|
||||
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "ContentDeliveryAllowed" -Type DWord -Value 1
|
||||
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "OemPreInstalledAppsEnabled" -Type DWord -Value 1
|
||||
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "PreInstalledAppsEnabled" -Type DWord -Value 1
|
||||
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "PreInstalledAppsEverEnabled" -Type DWord -Value 1
|
||||
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SilentInstalledAppsEnabled" -Type DWord -Value 1
|
||||
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SubscribedContent-338387Enabled" -Type DWord -Value 1
|
||||
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SubscribedContent-338388Enabled" -Type DWord -Value 1
|
||||
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SubscribedContent-338389Enabled" -Type DWord -Value 1
|
||||
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SubscribedContent-353698Enabled" -Type DWord -Value 1
|
||||
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SystemPaneSuggestionsEnabled" -Type DWord -Value 1
|
||||
If (Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent") {
|
||||
Remove-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent" -Recurse -ErrorAction SilentlyContinue
|
||||
}
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent" -Name "DisableWindowsConsumerFeatures" -Type DWord -Value 0
|
||||
Write-Host "Enabling Activity History..."
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Name "EnableActivityFeed" -Type DWord -Value 1
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Name "PublishUserActivities" -Type DWord -Value 1
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Name "UploadUserActivities" -Type DWord -Value 1
|
||||
Write-Host "Enable Location Tracking..."
|
||||
If (Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\location") {
|
||||
Remove-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\location" -Recurse -ErrorAction SilentlyContinue
|
||||
}
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\location" -Name "Value" -Type String -Value "Allow"
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Sensor\Overrides\{BFA794E4-F964-4FDB-90F6-51056BFE4B44}" -Name "SensorPermissionState" -Type DWord -Value 1
|
||||
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\lfsvc\Service\Configuration" -Name "Status" -Type DWord -Value 1
|
||||
Write-Host "Enabling automatic Maps updates..."
|
||||
Set-ItemProperty -Path "HKLM:\SYSTEM\Maps" -Name "AutoUpdateEnabled" -Type DWord -Value 1
|
||||
Write-Host "Enabling Feedback..."
|
||||
If (Test-Path "HKCU:\SOFTWARE\Microsoft\Siuf\Rules") {
|
||||
Remove-Item -Path "HKCU:\SOFTWARE\Microsoft\Siuf\Rules" -Recurse -ErrorAction SilentlyContinue
|
||||
}
|
||||
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Siuf\Rules" -Name "NumberOfSIUFInPeriod" -Type DWord -Value 0
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection" -Name "DoNotShowFeedbackNotifications" -Type DWord -Value 0
|
||||
Write-Host "Enabling Tailored Experiences..."
|
||||
If (Test-Path "HKCU:\SOFTWARE\Policies\Microsoft\Windows\CloudContent") {
|
||||
Remove-Item -Path "HKCU:\SOFTWARE\Policies\Microsoft\Windows\CloudContent" -Recurse -ErrorAction SilentlyContinue
|
||||
}
|
||||
Set-ItemProperty -Path "HKCU:\SOFTWARE\Policies\Microsoft\Windows\CloudContent" -Name "DisableTailoredExperiencesWithDiagnosticData" -Type DWord -Value 0
|
||||
Write-Host "Disabling Advertising ID..."
|
||||
If (Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\AdvertisingInfo") {
|
||||
Remove-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\AdvertisingInfo" -Recurse -ErrorAction SilentlyContinue
|
||||
}
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\AdvertisingInfo" -Name "DisabledByGroupPolicy" -Type DWord -Value 0
|
||||
Write-Host "Allow Error reporting..."
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\Windows Error Reporting" -Name "Disabled" -Type DWord -Value 0
|
||||
Write-Host "Allowing Diagnostics Tracking Service..."
|
||||
Stop-Service "DiagTrack" -WarningAction SilentlyContinue
|
||||
Set-Service "DiagTrack" -StartupType Manual
|
||||
Write-Host "Allowing WAP Push Service..."
|
||||
Stop-Service "dmwappushservice" -WarningAction SilentlyContinue
|
||||
Set-Service "dmwappushservice" -StartupType Manual
|
||||
Write-Host "Allowing Home Groups services..."
|
||||
Stop-Service "HomeGroupListener" -WarningAction SilentlyContinue
|
||||
Set-Service "HomeGroupListener" -StartupType Manual
|
||||
Stop-Service "HomeGroupProvider" -WarningAction SilentlyContinue
|
||||
Set-Service "HomeGroupProvider" -StartupType Manual
|
||||
Write-Host "Enabling Storage Sense..."
|
||||
New-Item -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy" | Out-Null
|
||||
Write-Host "Allowing Superfetch service..."
|
||||
Stop-Service "SysMain" -WarningAction SilentlyContinue
|
||||
Set-Service "SysMain" -StartupType Manual
|
||||
Write-Host "Setting BIOS time to Local Time instead of UTC..."
|
||||
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\TimeZoneInformation" -Name "RealTimeIsUniversal" -Type DWord -Value 0
|
||||
Write-Host "Enabling Hibernation..."
|
||||
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Session Manager\Power" -Name "HibernteEnabled" -Type Dword -Value 1
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FlyoutMenuSettings" -Name "ShowHibernateOption" -Type Dword -Value 1
|
||||
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Personalization" -Name "NoLockScreen" -ErrorAction SilentlyContinue
|
||||
|
||||
Write-Host "Hiding file operations details..."
|
||||
If (Test-Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager") {
|
||||
Remove-Item -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager" -Recurse -ErrorAction SilentlyContinue
|
||||
}
|
||||
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager" -Name "EnthusiastMode" -Type DWord -Value 0
|
||||
Write-Host "Showing Task View button..."
|
||||
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "ShowTaskViewButton" -Type DWord -Value 1
|
||||
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\People" -Name "PeopleBand" -Type DWord -Value 1
|
||||
|
||||
Write-Host "Changing default Explorer view to Quick Access..."
|
||||
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "LaunchTo" -Type DWord -Value 0
|
||||
|
||||
Write-Host "Unrestricting AutoLogger directory"
|
||||
$autoLoggerDir = "$env:PROGRAMDATA\Microsoft\Diagnosis\ETLLogs\AutoLogger"
|
||||
icacls $autoLoggerDir /grant:r SYSTEM:`(OI`)`(CI`)F | Out-Null
|
||||
|
||||
Write-Host "Enabling and starting Diagnostics Tracking Service"
|
||||
Set-Service "DiagTrack" -StartupType Automatic
|
||||
Start-Service "DiagTrack"
|
||||
|
||||
Write-Host "Hiding known file extensions"
|
||||
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "HideFileExt" -Type DWord -Value 1
|
||||
|
||||
Write-Host "Reset Local Group Policies to Stock Defaults"
|
||||
# cmd /c secedit /configure /cfg %windir%\inf\defltbase.inf /db defltbase.sdb /verbose
|
||||
cmd /c RD /S /Q "%WinDir%\System32\GroupPolicyUsers"
|
||||
cmd /c RD /S /Q "%WinDir%\System32\GroupPolicy"
|
||||
cmd /c gpupdate /force
|
||||
# Considered using Invoke-GPUpdate but requires module most people won't have installed
|
||||
|
||||
Write-Host "Adjusting visual effects for appearance..."
|
||||
Set-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name "DragFullWindows" -Type String -Value 1
|
||||
Set-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name "MenuShowDelay" -Type String -Value 400
|
||||
Set-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name "UserPreferencesMask" -Type Binary -Value ([byte[]](158, 30, 7, 128, 18, 0, 0, 0))
|
||||
Set-ItemProperty -Path "HKCU:\Control Panel\Desktop\WindowMetrics" -Name "MinAnimate" -Type String -Value 1
|
||||
Set-ItemProperty -Path "HKCU:\Control Panel\Keyboard" -Name "KeyboardDelay" -Type DWord -Value 1
|
||||
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "ListviewAlphaSelect" -Type DWord -Value 1
|
||||
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "ListviewShadow" -Type DWord -Value 1
|
||||
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "TaskbarAnimations" -Type DWord -Value 1
|
||||
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\VisualEffects" -Name "VisualFXSetting" -Type DWord -Value 3
|
||||
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\DWM" -Name "EnableAeroPeek" -Type DWord -Value 1
|
||||
Remove-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name "HungAppTimeout" -ErrorAction SilentlyContinue
|
||||
Write-Host "Restoring Clipboard History..."
|
||||
Remove-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Clipboard" -Name "EnableClipboardHistory" -ErrorAction SilentlyContinue
|
||||
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Name "AllowClipboardHistory" -ErrorAction SilentlyContinue
|
||||
Write-Host "Enabling Notifications and Action Center"
|
||||
Remove-Item -Path HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Force
|
||||
Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications" -Name "ToastEnabled"
|
||||
Write-Host "Restoring Default Right Click Menu Layout"
|
||||
Remove-Item -Path "HKCU:\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}" -Recurse -Confirm:$false -Force
|
||||
|
||||
Write-Host "Reset News and Interests"
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Feeds" -Name "EnableFeeds" -Type DWord -Value 1
|
||||
# Remove "News and Interest" from taskbar
|
||||
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Feeds" -Name "ShellFeedsTaskbarViewMode" -Type DWord -Value 0
|
||||
Write-Host "Done - Reverted to Stock Settings"
|
||||
|
||||
Write-Host "Essential Undo Completed"
|
||||
|
||||
$ButtonType = [System.Windows.MessageBoxButton]::OK
|
||||
$MessageboxTitle = "Undo All"
|
||||
$Messageboxbody = ("Done")
|
||||
$MessageIcon = [System.Windows.MessageBoxImage]::Information
|
||||
|
||||
[System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon)
|
||||
|
||||
Write-Host "================================="
|
||||
Write-Host "--- Undo All is Finished ---"
|
||||
Write-Host "================================="
|
||||
#>
|
||||
}
|
Reference in New Issue
Block a user