Skip to content

Instantly share code, notes, and snippets.

@lediur
Last active September 14, 2019 10:30
Show Gist options
  • Save lediur/6222254ed6e31fc70ff0aedee6a34bf8 to your computer and use it in GitHub Desktop.
Save lediur/6222254ed6e31fc70ff0aedee6a34bf8 to your computer and use it in GitHub Desktop.
First-run Windows setup scripts
# Inspired by https://gist.github.com/mivano/2b078f267d3ca1e9996c07085eb59a60
# and personal machine setup scripts
######################
# Configure Chocolatey
######################
choco config set --name=cacheLocation --value=C:\ChocolateyCache
choco feature enable --name=allowGlobalConfirmation
choco feature enable --name=useRememberedArgumentsForUpgrades
##################
# Privacy Settings
##################
# Privacy: Let apps use my advertising ID: Disable
Set-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Name Enabled -Type DWord -Value 0
# To Restore:
#Set-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Name Enabled -Type DWord -Value 1
# Privacy: SmartScreen Filter for Store Apps: Disable
#Set-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\AppHost -Name EnableWebContentEvaluation -Type DWord -Value 0
# To Restore (enable):
Set-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\AppHost -Name EnableWebContentEvaluation -Type DWord -Value 1
# WiFi Sense: HotSpot Sharing: Disable
# Set-ItemProperty -Path HKLM:\Software\Microsoft\PolicyManager\default\WiFi\AllowWiFiHotSpotReporting -Name value -Type DWord -Value 0
# WiFi Sense: Shared HotSpot Auto-Connect: Disable
Set-ItemProperty -Path HKLM:\Software\Microsoft\PolicyManager\default\WiFi\AllowAutoConnectToWiFiSenseHotspots -Name value -Type DWord -Value 0
# Disable Telemetry (requires a reboot to take effect)
# Set-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection -Name AllowTelemetry -Type DWord -Value 0
# Get-Service DiagTrack,Dmwappushservice | Stop-Service | Set-Service -StartupType Disabled
############################
# Personal Preferences on UI
############################
Set-WindowsExplorerOptions `
-EnableShowHiddenFilesFoldersDrives `
-EnableShowFileExtensions `
-DisableOpenFileExplorerToQuickAccess `
-DisableShowRecentFilesInQuickAccess `
-DisableShowFrequentFoldersInQuickAccess
Set-TaskbarOptions `
-Dock Bottom `
-Combine Always `
-AlwaysShowIconsOff `
-Size Large
Set-TaskbarOptions -Lock
Update-ExecutionPolicy RemoteSigned
###############################
# Windows 10 Metro App Removals
# These start commented out so you choose
# Just remove the # (comment in PowerShell) on the ones you want to remove
###############################
# Be gone, heathen!
Get-AppxPackage king.com.CandyCrushSaga | Remove-AppxPackage
# Bing Weather, News, Sports, and Finance (Money):
# Get-AppxPackage Microsoft.BingWeather | Remove-AppxPackage
Get-AppxPackage Microsoft.BingNews | Remove-AppxPackage
Get-AppxPackage Microsoft.BingSports | Remove-AppxPackage
Get-AppxPackage Microsoft.BingFinance | Remove-AppxPackage
# Xbox:
# Get-AppxPackage Microsoft.XboxApp | Remove-AppxPackage
# Windows Phone Companion
Get-AppxPackage Microsoft.WindowsPhone | Remove-AppxPackage
# Solitaire Collection
Get-AppxPackage Microsoft.MicrosoftSolitaireCollection | Remove-AppxPackage
# People
# Get-AppxPackage Microsoft.People | Remove-AppxPackage
# Groove Music
# Get-AppxPackage Microsoft.ZuneMusic | Remove-AppxPackage
# Movies & TV
#Get-AppxPackage Microsoft.ZuneVideo | Remove-AppxPackage
# OneNote
#Get-AppxPackage Microsoft.Office.OneNote | Remove-AppxPackage
# Photos
#Get-AppxPackage Microsoft.Windows.Photos | Remove-AppxPackage
# Sound Recorder
#Get-AppxPackage Microsoft.WindowsSoundRecorder | Remove-AppxPackage
# Mail & Calendar
#Get-AppxPackage microsoft.windowscommunicationsapps | Remove-AppxPackage
# Skype (Metro version)
#Get-AppxPackage Microsoft.SkypeApp | Remove-AppxPackage
##################
# Windows Features
##################
choco install Microsoft-Hyper-V-All --source windowsfeatures
choco install Microsoft-Windows-Subsystem-Linux --source windowsfeatures
#################
# Windows Updates
#################
# Change Windows Updates to "Notify to schedule restart"
# Set-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings -Name UxOption -Type DWord -Value 1
# To Restore (Automatic):
# Set-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings -Name UxOption -Type DWord -Value 0
# Disable P2P Update downlods outside of local network
# Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config -Name DODownloadMode -Type DWord -Value 1
# Set-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization -Name SystemSettingsDownloadMode -Type DWord -Value 3
# To restore (PCs on my local network and PCs on the internet)
# Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config -Name DODownloadMode -Type DWord -Value 3
# Set-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization -Name SystemSettingsDownloadMode -Type DWord -Value 1
# To disable P2P update downloads completely:
# Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config -Name DODownloadMode -Type DWord -Value 0
Install-WindowsUpdate -AcceptEula -GetUpdatesFromMS
##################
# Install packages
##################
# Typefaces
choco install firacode -y
choco install sourcecodepro -y
choco install hackfont -y
choco install dejavufonts -y
choco install inconsolata -y
# choco install lato -y # very noisy
choco install bitstreamverafonts -y
# Tools/Utilities
choco install git -y
choco install git-credential-winstore -y
# choco install gitextensions -y
choco install 7zip -y
# choco install greenshot -y # better screenshots
# choco install carnac -y # http://carnackeys.com/ HUD for keypresses (useful for presentations)
choco install sysinternals -y
choco install putty.install -y
# Languange Runtimes
choco install nodejs -y
choco install miniconda3 -y
choco install jdk8 -y
# Permanently set user paths
[Environment]::SetEnvironmentVariable(
"PATH",
$env:PATH + ";C:\ProgramData\Miniconda3;C:\ProgramData\Miniconda3\Scripts",
[System.EnvironmentVariableTarget]::User
)
# Applications
choco install firefox -y
choco install googlechrome -y
choco install intellijidea-community -y
choco install visualstudiocode -y
# choco install atom -y
choco install sublimetext3 -y
choco install hyper -y
choco install yarn -y
# choco install docker-for-windows -y # should install manually for beta bits
choco install kubernetes-cli -y
# choco install beyondcompare -y
choco install ProcExp -y
choco install poshgit -y
###########################
# Set up powershell profile
###########################
Install-Module z -AllowClobber -Scope CurrentUser
Write-Host "Creating custom $profile.CurrentUserAllHosts for Powershell"
if (!(test-path $profile.CurrentUserAllHosts)) {
New-Item -path $profile.CurrentUserAllHosts -type file -force
}
Add-Content $profile.CurrentUserAllHosts $(Invoke-RestMethod "https://gist.github.com/lediur/6222254ed6e31fc70ff0aedee6a34bf8/raw/profile.ps1")
Add-PoshGitToProfile -AllHosts
Write-Host
#########
# Cleanup
#########
del C:\eula*.txt
del C:\install.*
del C:\vcredist.*
del C:\vc_red.*
del ~\Desktop\*
import-module z
Import-Module 'C:\tools\poshgit\dahlbyk-posh-git-a4faccd\src\posh-git.psd1'
function prompt {
$shortenedPath = (Get-ShortenedPromptPath $((pwd).Path))
$host.UI.RawUI.WindowTitle = ("PS " + $shortenedPath)
$colorHostFg = [ConsoleColor]::White
$colorLocation = [ConsoleColor]::Cyan
if (Test-IsAdmin) {
$colorHostBg = [ConsoleColor]::Red
$host.UI.RawUI.WindowTitle += " (Admin)"
}
else {
$colorHostBg = [ConsoleColor]::Blue
}
$realLASTEXITCODE = $LASTEXITCODE
# Reset color, which can be messed up by Enable-GitColors
# $Host.UI.RawUI.ForegroundColor = $GitPromptSettings.DefaultForegroundColor
Write-Host ([net.dns]::GetHostName().ToLower()) -n -f $colorHostFg -b $colorHostBg
Write-Host "" $shortenedPath -n -f $colorLocation
Write-VcsStatus
$global:LASTEXITCODE = $realLASTEXITCODE
if ($shortenedPath.length -gt 20) {
Write-Host " "
}
else {
Write-Host " " -n
}
return "> "
}
function Get-ShortenedPromptPath([string] $path) {
$loc = $path.Replace($HOME, '~')
return $loc
}
function Test-IsAdmin {
try {
$identity = [Security.Principal.WindowsIdentity]::GetCurrent()
$principal = New-Object Security.Principal.WindowsPrincipal -ArgumentList $identity
return $principal.IsInRole( [Security.Principal.WindowsBuiltInRole]::Administrator )
}
catch {
throw "Failed to determine if the current user has elevated privileges. The error was: '{0}'." -f $_
}
<#
.SYNOPSIS
Checks if the current Powershell instance is running with elevated privileges or not.
.EXAMPLE
PS C:\> Test-IsAdmin
.OUTPUTS
System.Boolean
True if the current Powershell is elevated, false if not.
#>
}
function Write-Centered {
Param( [string] $message,
[string] $fgcolor = "White")
$offsetvalue = [Math]::Round(([Console]::WindowWidth / 2) + ($message.Length / 2))
Write-Host ("{0,$offsetvalue}" -f $message) -ForegroundColor $fgcolor
}
function Show-WelcomeMessage {
Write-Centered ([net.dns]::GetHostName().ToUpper() -replace '(.)', '$1 ') -fgcolor "White"
$current_date = Get-Date -Format 'D'
$current_uptime = (get-date) - ([System.Management.ManagementDateTimeconverter]::ToDateTime((Get-WmiObject win32_operatingsystem).lastbootuptime))
$uptime_string = "Up for " + ("{0:%d}d {1:%h}h {2:%m}m {3:%s}s" -f ($current_uptime, $current_uptime, $current_uptime, $current_uptime))
Write-Centered ($current_date + " | " + $uptime_string) -fgcolor "DarkGray"
Write-Host ""
}
clear
Show-WelcomeMessage
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment