Files
Disassembler e3f790adae v3.9, 2020-04-02
- Add "Uninstall OpenSSH Client" (thx @TheRandomLabs)
- Add "Install OpenSSH Server" (thx @TheRandomLabs)
- Add "Enable Developer Mode" (thx @RobDesideri)
- Add "Disable Automatic Restart Sign-on" (thx @Dvorak-Stepan)
- Add "Uninstall Windows Hello Face"
- Add "Uninstall Math Recognizer"
- Add "Uninstall PowerShell Integrated Scripting Environment"
- Update a bunch of tweaks to be compatible with 2004 and "N" editions
- Update bloatware removal tweaks
- Update or clarify comments for tweaks possibly breaking interoperability in some scenarios
2020-04-02 11:33:01 +02:00

60 lines
2.2 KiB
PowerShell

##########
# Win 10 / Server 2016 / Server 2019 Initial Setup Script - Main execution loop
# Author: Disassembler <disassembler@dasm.cz>
# Version: v3.9, 2020-04-02
# Source: https://github.com/Disassembler0/Win10-Initial-Setup-Script
##########
# Relaunch the script with administrator privileges
Function RequireAdmin {
If (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]"Administrator")) {
Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`" $PSCommandArgs" -Verb RunAs
Exit
}
}
$tweaks = @()
$PSCommandArgs = @()
Function AddOrRemoveTweak($tweak) {
If ($tweak[0] -eq "!") {
# If the name starts with exclamation mark (!), exclude the tweak from selection
$script:tweaks = $script:tweaks | Where-Object { $_ -ne $tweak.Substring(1) }
} ElseIf ($tweak -ne "") {
# Otherwise add the tweak
$script:tweaks += $tweak
}
}
# Parse and resolve paths in passed arguments
$i = 0
While ($i -lt $args.Length) {
If ($args[$i].ToLower() -eq "-include") {
# Resolve full path to the included file
$include = Resolve-Path $args[++$i] -ErrorAction Stop
$PSCommandArgs += "-include `"$include`""
# Import the included file as a module
Import-Module -Name $include -ErrorAction Stop
} ElseIf ($args[$i].ToLower() -eq "-preset") {
# Resolve full path to the preset file
$preset = Resolve-Path $args[++$i] -ErrorAction Stop
$PSCommandArgs += "-preset `"$preset`""
# Load tweak names from the preset file
Get-Content $preset -ErrorAction Stop | ForEach-Object { AddOrRemoveTweak($_.Split("#")[0].Trim()) }
} ElseIf ($args[$i].ToLower() -eq "-log") {
# Resolve full path to the output file
$log = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($args[++$i])
$PSCommandArgs += "-log `"$log`""
# Record session to the output file
Start-Transcript $log
} Else {
$PSCommandArgs += $args[$i]
# Load tweak names from command line
AddOrRemoveTweak($args[$i])
}
$i++
}
# Call the desired tweak functions
$tweaks | ForEach-Object { Invoke-Expression $_ }