Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Test 2024 03 21 #1755

Merged
merged 21 commits into from
Mar 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ winutil.pdb
# Folder config file
[Dd]esktop.ini

# Ignore Generated XAML Files
xaml/inputApp.xaml
xaml/inputFeatures.xaml
xaml/inputTweaks.xaml

# Executables and Configs
winget.msixbundle
pester.ps1
Expand Down
11 changes: 7 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,14 @@ Winutil must be run in Admin mode because it performs system-wide tweaks. To ach
#### Simple way

```
iwr -useb https://christitus.com/win | iex
irm https://christitus.com/win | iex
```
Courtesy of the issue raised at: [#144](/../../issues/144)

or by executing:
```
irm https://christitus.com/win | iex
iwr -useb https://christitus.com/win | iex
```
Courtesy of the issue raised at: [#144](/../../issues/144)

if for some reason this site is not reachable from your country please try running it directly from github

Expand Down Expand Up @@ -97,7 +98,9 @@ If you are still having issues try changing your DNS provider to 1.1.1.1 || 1.0.

- Essential Tweaks: Offers a collection of essential tweaks aimed at improving system performance, privacy, and resource utilization. These tweaks include creating a system restore point, disabling telemetry, Wi-Fi Sense, setting services to manual, disabling location tracking, and HomeGroup, among others.

- Misc. Tweaks: Encompasses a range of various tweaks to further optimize the system. These tweaks include enabling/disabling power throttling, enabling num lock on startup, removing Cortana and Edge, disabling User Account Control (UAC), notification panel, and configuring TPM during updates, among others.
- Advanced Tweaks: Encompasses a range of various advanced power user tweaks to further optimize the system. These tweaks include removing OneDrive and Edge, disabling User Account Control (UAC), notification panel, among others.

- Toggles: Adds easy to use, one click shortcuts for toggling dark mode, NumLock on startup, file extensions, sticky keys, among others.

- Additional Tweaks: Introduces various other tweaks such as enabling dark mode, changing DNS settings, adding an Ultimate Performance mode, and creating shortcuts for WinUtil tools. These tweaks provide users with additional customization options to tailor their system to their preferences.

Expand Down
24 changes: 24 additions & 0 deletions config/applications.json
Original file line number Diff line number Diff line change
Expand Up @@ -535,6 +535,14 @@
"link": "https://www.mozilla.org/en-US/firefox/new/",
"winget": "Mozilla.Firefox"
},
"WPFInstallfirefoxesr": {
"category": "Browsers",
"choco": "FirefoxESR",
"content": "Firefox ESR",
"description": "Mozilla Firefox is an open-source web browser known for its customization options, privacy features, and extensions. Firefox ESR (Extended Support Release) receives major updates every 42 weeks with minor updates such as crash fixes, security fixes and policy updates as needed, but at least every four weeks.",
"link": "https://www.mozilla.org/en-US/firefox/new/",
"winget": "Mozilla.Firefox.ESR"
},
"WPFInstallflameshot": {
"category": "Multimedia Tools",
"choco": "flameshot",
Expand All @@ -543,6 +551,14 @@
"link": "https://flameshot.org/",
"winget": "Flameshot.Flameshot"
},
"WPFInstalllightshot": {
"category": "Multimedia Tools",
"choco": "lightshot",
"content": "Lightshot (Screenshots)",
"description": "Ligthshot is an Easy-to-use, light-weight screenshot software tool, where you can optionally edit your screenshots using different tools, share them via Internet and/or save to disk, and customize the available options.",
"link": "https://app.prntscr.com/",
"winget": "Skillbrains.Lightshot"
},
"WPFInstallfloorp": {
"category": "Browsers",
"choco": "na",
Expand Down Expand Up @@ -2270,5 +2286,13 @@
"description": "pyenv for Windows is a simple python version management tool. It lets you easily switch between multiple versions of Python.",
"link": "https://pyenv-win.github.io/pyenv-win/",
"winget": "na"
},
"WPFInstalltightvnc": {
"category": "Utilities",
"choco": "TightVNC",
"content": "TightVNC",
"description": "TightVNC is a free and Open Source remote desktop software that lets you access and control a computer over the network. With its intuitive interface, you can interact with the remote screen as if you were sitting in front of it. You can open files, launch applications, and perform other actions on the remote desktop almost as if you were physically there",
"link": "https://www.tightvnc.com/",
"winget": "GlavSoft.TightVNC"
}
}
18 changes: 18 additions & 0 deletions config/tweaks.json
Original file line number Diff line number Diff line change
Expand Up @@ -2527,6 +2527,15 @@
"category": "z__Advanced Tweaks - CAUTION",
"panel": "1",
"Order": "a031_",
"registry": [
{
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters",
"Name": "DisabledComponents",
"Value": "255",
"OriginalValue": "0",
"Type": "DWord"
}
],
"InvokeScript": [
"Disable-NetAdapterBinding -Name \"*\" -ComponentID ms_tcpip6"
],
Expand All @@ -2540,6 +2549,15 @@
"category": "z__Advanced Tweaks - CAUTION",
"panel": "1",
"Order": "a030_",
"registry": [
{
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters",
"Name": "DisabledComponents",
"Value": "0",
"OriginalValue": "0",
"Type": "DWord"
}
],
"InvokeScript": [
"Enable-NetAdapterBinding -Name \"*\" -ComponentID ms_tcpip6"
],
Expand Down
2 changes: 1 addition & 1 deletion functions/private/Get-Oscdimg.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ function Get-Oscdimg {
<#

.DESCRIPTION
This function will get oscdimg file for from github Release foldersand put it into env:temp
This function will download oscdimg file from github Release folders and put it into env:temp folder

.EXAMPLE
Get-Oscdimg
Expand Down
23 changes: 23 additions & 0 deletions functions/private/Get-WinUtilWingetLatest.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
function Get-WinUtilWingetLatest {
<#
.SYNOPSIS
Uses GitHub API to check for the latest release of Winget.
.DESCRIPTION
This function grabs the latest version of Winget and returns the download path to Install-WinUtilWinget for installation.
#>

Try{
# Grabs the latest release of Winget from the Github API for the install process.
$response = Invoke-RestMethod -Uri "https://api.github.com/repos/microsoft/Winget-cli/releases/latest" -Method Get -ErrorAction Stop
$latestVersion = $response.tag_name #Stores version number of latest release.
$licenseWingetUrl = $response.assets.browser_download_url[0] #Index value for License file.
Write-Host "Latest Version:`t$($latestVersion)`n"
$assetUrl = $response.assets.browser_download_url[2] #Index value for download URL.
Invoke-WebRequest -Uri $licenseWingetUrl -OutFile $ENV:TEMP\License1.xml
# The only pain is that the msixbundle for winget-cli is 246MB. In some situations this can take a bit, with slower connections.
Invoke-WebRequest -Uri $assetUrl -OutFile $ENV:TEMP\Microsoft.DesktopAppInstaller.msixbundle
}
Catch{
throw [WingetFailedInstall]::new('Failed to get latest Winget release and license')
}
}
29 changes: 29 additions & 0 deletions functions/private/Get-WinUtilWingetPrerequisites.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
function Get-WinUtilWingetPrerequisites {
<#
.SYNOPSIS
Downloads the Winget Prereqs.
.DESCRIPTION
Downloads Prereqs for Winget. Version numbers are coded as variables and can be updated as uncommonly as Microsoft updates the prereqs.
#>

# I don't know of a way to detect the prereqs automatically, so if someone has a better way of defining these, that would be great.
# Microsoft.VCLibs version rarely changes, but for future compatibility I made it a variable.
$versionVCLibs = "14.00"
$fileVCLibs = "https://aka.ms/Microsoft.VCLibs.x64.${versionVCLibs}.Desktop.appx"
# Write-Host "$fileVCLibs"
# Microsoft.UI.Xaml version changed recently, so I made the version numbers variables.
$versionUIXamlMinor = "2.8"
$versionUIXamlPatch = "2.8.6"
$fileUIXaml = "https://github.com/microsoft/microsoft-ui-xaml/releases/download/v${versionUIXamlPatch}/Microsoft.UI.Xaml.${versionUIXamlMinor}.x64.appx"
# Write-Host "$fileUIXaml"

Try{
Write-Host "Downloading Microsoft.VCLibs Dependency..."
Invoke-WebRequest -Uri $fileVCLibs -OutFile $ENV:TEMP\Microsoft.VCLibs.x64.Desktop.appx
Write-Host "Downloading Microsoft.UI.Xaml Dependency...`n"
Invoke-WebRequest -Uri $fileUIXaml -OutFile $ENV:TEMP\Microsoft.UI.Xaml.x64.appx
}
Catch{
throw [WingetFailedInstall]::new('Failed to install prerequsites')
}
}
5 changes: 4 additions & 1 deletion functions/private/Install-WinUtilProgramWinget.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,10 @@ Function Install-WinUtilProgramWinget {

Write-Progress -Activity "$manage Applications" -Status "$manage $Program $($x + 1) of $count" -PercentComplete $($x/$count*100)
if($manage -eq "Installing"){
Start-Process -FilePath winget -ArgumentList "install -e --accept-source-agreements --accept-package-agreements --scope=machine --silent $Program" -NoNewWindow -Wait
# --scope=machine when installing non-UWP apps with winget fails with error code 0x80070005.
# Removed argument while testing new Winget install method.
# Open issue on winget-cli github repo: https://github.com/microsoft/winget-cli/issues/3936
Start-Process -FilePath winget -ArgumentList "install -e --accept-source-agreements --accept-package-agreements --silent $Program" -NoNewWindow -Wait
}
if($manage -eq "Uninstalling"){
Start-Process -FilePath winget -ArgumentList "uninstall -e --accept-source-agreements --purge --force --silent $Program" -NoNewWindow -Wait
Expand Down
48 changes: 28 additions & 20 deletions functions/private/Install-WinUtilWinget.ps1
Original file line number Diff line number Diff line change
@@ -1,26 +1,16 @@
function Get-LatestHash {
$shaUrl = ((Invoke-WebRequest $apiLatestUrl -UseBasicParsing | ConvertFrom-Json).assets | Where-Object { $_.name -match '^Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.txt$' }).browser_download_url

$shaFile = Join-Path -Path $tempFolder -ChildPath 'Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.txt'
$WebClient.DownloadFile($shaUrl, $shaFile)

Get-Content $shaFile
}

function Install-WinUtilWinget {

<#

.SYNOPSIS
Installs Winget if it is not already installed
Installs Winget if it is not already installed.

.DESCRIPTION
This function will download the latest version of winget and install it. If winget is already installed, it will do nothing.
This function will download the latest version of Winget and install it. If Winget is already installed, it will do nothing.
#>
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
if (Test-WinUtilPackageManager -Winget) {
# Checks if Winget executable exists and if the Windows Version is 1809 or higher
Write-Host "Winget Already Installed"
return
}
Expand All @@ -34,17 +24,35 @@ function Install-WinUtilWinget {
}

if (($ComputerInfo.WindowsVersion) -lt "1809") {
# Checks if Windows Version is too old for winget
# Checks if Windows Version is too old for Winget
Write-Host "Winget is not supported on this version of Windows (Pre-1809)"
return
}

Write-Host "Running Alternative Installer and Direct Installing"
Start-Process -Verb runas -FilePath powershell.exe -ArgumentList "choco install winget"

Write-Host "Winget Installed"
if((Get-Command -Name choco -ErrorAction Ignore)) {
# Checks if Chocolatey is present (In case it didn't install properly), and installs Winget with choco, if so.
Write-Host "Chocolatey detected. Installing Winget via Chocolatey"
Start-Process -Verb runas -FilePath powershell.exe -ArgumentList "choco install winget-cli"
Write-Host "Winget Installed"
Write-Output "Refreshing Environment Variables...`n"
$ENV:PATH = [System.Environment]::GetEnvironmentVariable("Path", "Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path", "User")
}
Else {
# If Chocolatey doesn't exist, it will install Winget through more manual means.
# Used part of my own script with some modification: ruxunderscore/windows-initialization
Write-Host "Downloading Winget Prerequsites"
Get-WinUtilWingetPrerequisites
Write-Host "Downloading Winget and License File"
Get-WinUtilWingetLatest
Write-Host "Installing Winget w/ Prerequsites"
Add-AppxProvisionedPackage -Online -PackagePath $ENV:TEMP\Microsoft.DesktopAppInstaller.msixbundle -DependencyPackagePath $ENV:TEMP\Microsoft.VCLibs.x64.Desktop.appx, $ENV:TEMP\Microsoft.UI.Xaml.x64.appx -LicensePath $ENV:TEMP\License1.xml
Write-Host "Winget Installed"
# Winget only needs a refresh of the environment variables to be used.
Write-Output "Refreshing Environment Variables...`n"
$ENV:PATH = [System.Environment]::GetEnvironmentVariable("Path", "Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path", "User")
}
}
Catch{
throw [WingetFailedInstall]::new('Failed to install')
}
}
}
4 changes: 2 additions & 2 deletions functions/private/Invoke-MicroWin-Helper.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ function Copy-ToUSB([string] $fileToCopy)
Write-Progress -Activity "Copying File" -Status "Progress" -PercentComplete $completed -CurrentOperation ("{0:N2} MB / {1:N2} MB" -f ($_.BytesTransferred / 1MB), ($totalSize / 1MB))
}

Write-Host "File copied to Ventoy drive $($volume.DriveLette)"
Write-Host "File copied to Ventoy drive $($volume.DriveLetter)"
return
}
}
Expand Down Expand Up @@ -377,7 +377,7 @@ function New-Unattend {
# Replace the placeholder text with the Specialize pass
$unattend = $unattend.Replace("<#REPLACEME#>", $specPass).Trim()
}
$unattend | Out-File -FilePath "$env:temp\unattend.xml" -Force
$unattend | Out-File -FilePath "$env:temp\unattend.xml" -Force -Encoding utf8
}

function New-CheckInstall {
Expand Down
2 changes: 1 addition & 1 deletion functions/private/Invoke-WinUtilGPU.ps1
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
function Invoke-GPUCheck {
$gpuInfo = Get-WmiObject Win32_VideoController
$gpuInfo = Get-CimInstance Win32_VideoController

foreach ($gpu in $gpuInfo) {
$gpuName = $gpu.Name
Expand Down
2 changes: 1 addition & 1 deletion functions/private/Update-WinUtilProgramWinget.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Function Update-WinUtilProgramWinget {
$host.ui.RawUI.WindowTitle = """Winget Install"""

Start-Transcript $ENV:TEMP\winget-update.log -Append
winget upgrade --all
winget upgrade --all --accept-source-agreements --accept-package-agreements --scope=machine --silent

}

Expand Down
20 changes: 14 additions & 6 deletions functions/public/Invoke-WPFMicrowin.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,16 @@ public class PowerManagement {
try {

Write-Host "Mounting Windows image. This may take a while."
dism /mount-image /imagefile:$mountDir\sources\install.wim /index:$index /mountdir:$scratchDir
Write-Host "Mounting complete! Performing removal of applications..."
Mount-WindowsImage -ImagePath "$mountDir\sources\install.wim" -Index $index -Path "$scratchDir"
if ($?)
{
Write-Host "Mounting complete! Performing removal of applications..."
}
else
{
Write-Host "Could not mount image. Exiting..."
return
}

if ($injectDrivers)
{
Expand Down Expand Up @@ -299,13 +307,13 @@ public class PowerManagement {
Write-Host "Cleanup complete."

Write-Host "Unmounting image..."
dism /unmount-image /mountdir:$scratchDir /commit
Dismount-WindowsImage -Path $scratchDir -Save
}

try {

Write-Host "Exporting image into $mountDir\sources\install2.wim"
dism /Export-Image /SourceImageFile:"$mountDir\sources\install.wim" /SourceIndex:$index /DestinationImageFile:"$mountDir\sources\install2.wim" /compress:max
Export-WindowsImage -SourceImagePath "$mountDir\sources\install.wim" -SourceIndex $index -DestinationImagePath "$mountDir\sources\install2.wim" -CompressionType "Max"
Write-Host "Remove old '$mountDir\sources\install.wim' and rename $mountDir\sources\install2.wim"
Remove-Item "$mountDir\sources\install.wim"
Rename-Item "$mountDir\sources\install2.wim" "$mountDir\sources\install.wim"
Expand All @@ -319,7 +327,7 @@ public class PowerManagement {

# Next step boot image
Write-Host "Mounting boot image $mountDir\sources\boot.wim into $scratchDir"
dism /mount-image /imagefile:"$mountDir\sources\boot.wim" /index:2 /mountdir:"$scratchDir"
Mount-WindowsImage -ImagePath "$mountDir\sources\boot.wim" -Index 2 -Path "$scratchDir"

if ($injectDrivers)
{
Expand Down Expand Up @@ -365,7 +373,7 @@ public class PowerManagement {
reg unload HKLM\zSYSTEM

Write-Host "Unmounting image..."
dism /unmount-image /mountdir:$scratchDir /commit
Dismount-WindowsImage -Path $scratchDir -Save

Write-Host "Creating ISO image"

Expand Down
Loading
Loading