Last active
September 26, 2025 02:21
-
-
Save ionred/cb99efb1040070809f4dfc877e5b59fd to your computer and use it in GitHub Desktop.
BasicAppInstall.txt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Description: Basic App Install | |
| # Author: BC 2022-10-02 | |
| # | |
| # Install boxstarter: | |
| # . { iwr -useb http://boxstarter.org/bootstrapper.ps1 } | iex; get-boxstarter -Force | |
| # | |
| # You might need to set: Set-ExecutionPolicy RemoteSigned | |
| # | |
| # Install-BoxstarterPackage -PackageName <URL-TO-RAW-GIST> -Credential (Get-Credential) | |
| # | |
| # Learn more: http://boxstarter.org/Learn/WebLauncher | |
| # Updates: | |
| # 2025-09-25 - Added checks to set active public networks to private and make system locally pingable | |
| $Boxstarter.RebootOk = $true # Allow reboots? | |
| $Boxstarter.NoPassword = $false # Is this a machine with no login password? | |
| $Boxstarter.AutoLogin = $true # Save my password securely and auto-login after a reboot | |
| $computername = "FC-WS-OFC1" | |
| #Update-ExecutionPolicy -Policy Unrestricted | |
| #Set-ExecutionPolicy -ExecutionPolicy Unrestricted | |
| Disable-MicrosoftUpdate | |
| if ((test-path c:\ProgramData\Boxstarter\BoxstarterShell.ps1) -eq $false) { | |
| . { Invoke-WebRequest -useb http://boxstarter.org/bootstrapper.ps1 } | Invoke-Expression | |
| Get-Boxstarter -Force | |
| refreshenv | |
| choco feature enable -n allowGlobalConfirmation | |
| } | |
| #Set current ACTIVE ipv4 networks to private: | |
| $PublicNetworks = Get-NetConnectionProfile -NetworkCategory Public -IPv4Connectivity Internet -ErrorAction SilentlyContinue; | |
| if ($PublicNetworks) { | |
| Write-BoxstarterMessage "Found active networks not set to private!" -color red; | |
| Select-Object -InputObject $PublicNetworks -Property Name, InterfaceAlias, NetworkCategory, IPv4Connectivity; | |
| Set-NetConnectionProfile -NetworkCategory Private; | |
| } | |
| # Make system locally pingable on private networks: | |
| $RulesToChange = Get-NetFirewallRule -Name FPS-ICMP*-ERQ-In | Where-Object {$_.Profile -ne "Private" -or $_.Enabled -eq "False" } ; | |
| if ($RulesToChange) { | |
| Write-BoxstarterMessage "Found ICMP Firewall Rules not set to private-only and/or enabled!"; | |
| $RulesToChange | Select-Object -Property Name, Enabled, Profile; | |
| $RulesToChange | Set-NetFirewallRule -Enabled True -Profile Private; | |
| } | |
| #get chocolatey ready | |
| $chocoTemp = "c:\temp\chocolatey" | |
| $tools = @( | |
| "microsoft-windows-terminal", | |
| "notepadplusplus", | |
| "sysinternals", | |
| "7zip", | |
| "curl", | |
| "dotnetcore-runtime", | |
| "python3", | |
| "bind-toolsonly", | |
| "Everything", | |
| "procexp", | |
| "Sudo", | |
| "au", | |
| "checksum", | |
| "hwmonitor", | |
| "rsync", | |
| "rufus", | |
| "es", | |
| "sumatrapdf", | |
| "yubikey-manager", | |
| "powertoys" | |
| ) | |
| $apps = @( | |
| "visualstudiocode", | |
| "googlechrome", | |
| "putty", | |
| "ublockorigin-chrome", | |
| "brave", | |
| "discord", | |
| "filezilla", | |
| "foxitreader", | |
| "github-desktop", | |
| "paint.net", | |
| "pia", | |
| "steam", | |
| "veracrypt", | |
| "vlc", | |
| "plex", | |
| "cpu-z", | |
| "sabnzbd", | |
| "gimp", | |
| "epicgameslauncher", | |
| "kdiff3", | |
| "ubisoft-connect", | |
| "autoruns") | |
| $appxPkg = @( | |
| "Microsoft.BingFinance", | |
| "Microsoft.3DBuilder", | |
| "Microsoft.BingNews", | |
| "Microsoft.BingSports", | |
| "Microsoft.BingWeather", | |
| "Microsoft.CommsPhone", | |
| "Microsoft.Getstarted", | |
| "Microsoft.WindowsMaps", | |
| "*MarchofEmpires*", | |
| "*Minecraft*", | |
| "Microsoft.OneConnect", | |
| "Microsoft.WindowsPhone", | |
| "Microsoft.Office.Sway", | |
| "Microsoft.XboxApp", | |
| "Microsoft.XboxIdentityProvider", | |
| "Microsoft.XboxGameOverlay", | |
| "Microsoft.XboxGamingOverlay", | |
| "Microsoft.NetworkSpeedTest", | |
| "Microsoft.FreshPaint", | |
| "Microsoft.Print3D", | |
| "Microsoft.People*", | |
| "Microsoft.Microsoft3DViewer", | |
| "Microsoft.MixedReality.Portal*", | |
| "*Skype*", | |
| "*Autodesk*", | |
| "*BubbleWitch*", | |
| "king.com*", | |
| "G5*", | |
| "*Dell*", | |
| "*Facebook*", | |
| "*Keeper*", | |
| "*Netflix*", | |
| "*Twitter*", | |
| "*Plex*", | |
| "*.Duolingo-LearnLanguagesforFree", | |
| "*.AdobePhotoshopExpress", | |
| "MicrosoftTeams" | |
| ) | |
| $codeExtensions = @( | |
| "ms-vscode.PowerShell", | |
| "streetsidesoftware.code-spell-checker", | |
| "ms-vscode-remote.remote-wsl", | |
| "vscode-icons-team.vscode-icons", | |
| "visualstudioexptteam.vscodeintellicode", | |
| "ms-azuretools.vscode-docker", | |
| "pkief.material-icon-theme", | |
| "christian-kohler.path-intellisense", | |
| "zhuangtongfa.material-theme", | |
| "ms-python.python", | |
| "ms-python.vscode-pylance", | |
| "vsls-contrib.gistfs", | |
| "VisualStudioExptTeam.intellicode-api-usage-examples" | |
| ) | |
| $psModules = @( | |
| "AppVeyorBYOC" | |
| ) | |
| $exclusionPaths = @( | |
| "C:\ProgramData\chocolatey", | |
| "C:\tools\NirLauncher", | |
| "C:\temp\chocolatey" | |
| ) | |
| $wingetPackages = @( | |
| "9PMMSR1CGPWG", #HEIF Image Extensions | |
| "9n4wgh0z6vhq" # HEVC Video Extensions from Device Manufacturer | |
| ) | |
| if (Get-UAC) { | |
| Write-BoxstarterMessage "Disabling UAC" | |
| Disable-UAC | |
| } | |
| #Per Gary, this can speed up lookups | |
| if (choco config get cacheLocation --limit-output -ne $chocoTemp) { | |
| choco config set cacheLocation c:\temp\chocolatey | |
| } | |
| #Remove Windows Store Packages | |
| $appxPkg | ForEach-Object { | |
| Get-AppxPackage $_ | ForEach-Object { | |
| Write-BoxstarterMessage "Removing $_" | |
| Remove-AppxPackage $_ | |
| } | |
| } | |
| #Show Hidden Files | |
| if ((Test-Path c:\temp\hiddenEnabled.a) -eq $false) { | |
| Write-BoxstarterMessage "Showing Hidden Files" | |
| Set-WindowsExplorerOptions -EnableShowHiddenFilesFoldersDrives -EnableShowProtectedOSFiles -EnableShowFileExtensions | |
| New-Item "c:\temp\hiddenEnabled.a" -ItemType File -Force | |
| } | |
| #Create Defender Exclusions | |
| $currentExclusions = Get-MpPreference | Select-Object -ExpandProperty ExclusionPath | |
| if (@(Compare-Object -ReferenceObject $currentExclusions -DifferenceObject $exclusionPaths).Length -ne 0) { | |
| Write-BoxstarterMessage "Whitelisting Folders" | |
| $exclusionPaths | ForEach-Object { Add-MpPreference -ExclusionPath $_ } | |
| } | |
| #Remove Chat Button From from Windows 11 taskbar | |
| Set-ItemProperty HKCU:Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name TaskbarMn -Value 0 | |
| #Remove Widgets Button from Windows 11 taskbar | |
| set-ItemProperty HKCU:Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name TaskbarDa -Value 0 | |
| #Remove TaskView Button From from Windows 11 taskbar | |
| Set-ItemProperty HKCU:Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name ShowTaskViewButton -Value 0 | |
| #Left Alight buttons on Windows 11 taskbar | |
| Set-ItemProperty HKCU:Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name TaskbarAl -Value 0 | |
| #Get Chocolatey Installed Packages | |
| ##Removed this clean line because of issues with boxstarter | |
| ##$currentlyInstalledPackages = (choco list --lo --id-only --limit-output) | |
| $currentlyInstalledPackages = @($(Get-ChildItem "${env:ChocolateyInstall}/lib/*/*.nuspec") | Foreach-Object { | |
| [xml]$nuspec = Get-Content $_.FullName | |
| $nuspec.package.metadata.id | |
| }) | |
| #Install Tools First | |
| $missingPackages = $null | |
| Write-BoxstarterMessage "tools:" | |
| Write-BoxstarterMessage "$tools" | |
| Write-BoxstarterMessage "curpkgs:" | |
| Write-BoxstarterMessage "$currentlyInstalledPackages" | |
| Write-BoxstarterMessage "missingTools" | |
| $missingPackages = $tools | select-object -Unique | Compare-Object $currentlyInstalledPackages | Where-Object { $_.SideIndicator -eq "=>" } | Select-Object -ExpandProperty inputobject | |
| if ($missingPackages.Count -gt 0) { | |
| Write-BoxstarterMessage "Missing Tools Found" | |
| Write-BoxstarterMessage "$missingPackages" | |
| $missingPackages | foreach-object { | |
| choco install $_ | |
| } | |
| } | |
| #Install Apps | |
| $missingPackages = $null | |
| $missingPackages = $apps | select-object -Unique | Compare-Object $currentlyInstalledPackages | Where-Object { $_.SideIndicator -eq "=>" } | Select-Object -ExpandProperty inputobject | |
| if ($missingPackages.Count -gt 0) { | |
| Write-BoxstarterMessage "Missing Apps Found" | |
| Write-BoxstarterMessage "$missingPackages" | |
| $missingPackages | foreach-object { | |
| choco install $_ | |
| } | |
| } | |
| remove-ItemProperty HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\ -Name Discord | |
| remove-ItemProperty HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\ -Name Steam | |
| #Install Stuff that is being picky and can't go in a piped value because of chocolatey's weird stuff with quotes | |
| if ($null -eq (choco list git.install --lo --limit-output )) { | |
| choco install git.install -params "'/GitAndUnixToolsOnPath /WindowsTerminal /NoShellIntegration /editor:Notepad++'" | |
| } | |
| if ($null -eq (choco list nirlauncher --lo --limit-output )) { | |
| choco install nirlauncher --params "'/Sysinternals'" | |
| } | |
| function Download-AppxPackage { | |
| [CmdletBinding()] | |
| param ( | |
| [Parameter(Mandatory=$true)] [string]$ProductID | |
| ) | |
| process { | |
| $path = "c:\temp" | |
| $WebResponse = Invoke-WebRequest -Method 'POST' -Uri 'https://store.rg-adguard.net/api/GetFiles' -Body "type=ProductId&url=$productID&ring=Retail&lang=en-US" -ContentType 'application/x-www-form-urlencoded' | |
| $LinksMatch = $WebResponse.Links | where { $_ -like '*_x64*.appx*' } | |
| $DownloadLinks = $LinksMatch.href -replace '&', '&' | |
| #$DownloadLinks | |
| Invoke-WebRequest -Uri "$DownloadLinks" -OutFile "$Path\$productID.appx" | |
| Add-AppxPackage "$Path\$productID.appx" | |
| Remove-Item "$Path\$productID.appx" -Force | |
| } | |
| } | |
| #Install Winget Packages | |
| if ($wingetPackages -ne $null) { | |
| $wingetPackages | foreach-object { | |
| #all winget apps are from windows store and currently the winget store option | |
| #is broken and returning server error (if you get one at all) | |
| #utilizing download-appxpackage function to temporarily replace | |
| #winget install $_ --accept-package-agreements --accept-source-agreements | |
| Download-AppxPackage $_ | |
| } | |
| } | |
| #--- Visual Studio Code Extensions | |
| refreshenv | |
| $currentlyInstalledCodeExtensions = (code --list-extensions) | |
| $missingExtensions = $null | |
| $missingExtensions = $codeExtensions | select-object -Unique | Compare-Object $currentlyInstalledCodeExtensions | Where-Object { $_.SideIndicator -eq "=>" } | Select-Object -ExpandProperty inputobject | |
| if ($missingExtensions.Count -gt 0) { | |
| Write-BoxstarterMessage "Missing VS Code Extensions Found" | |
| Write-BoxstarterMessage "$missingExtensions" | |
| $missingExtensions | foreach-object { | |
| code --install-extension $_ | |
| } | |
| } | |
| #Install Powershell Packages | |
| Install-PackageProvider -Name NuGet -Force | |
| $currentPSModule = Get-Module -ListAvailable | Select-Object -ExpandProperty name | |
| $missingModules = $null | |
| $missingModules = $psModules | select-object -Unique | Compare-Object $currentPSModule | Where-Object { $_.SideIndicator -eq "=>" } | Select-Object -ExpandProperty inputobject | |
| if ($missingModules.Count -gt 0) { | |
| Write-BoxstarterMessage "Missing PowerShell Packages" | |
| Write-BoxstarterMessage "$missingModules" | |
| $missingModules | foreach-object { | |
| Install-Module $_ -Force | |
| } | |
| } | |
| Write-BoxstarterMessage "Installing SSH Client" | |
| Add-WindowsCapability -Online -Name 'OpenSSH.Client~~~~0.0.1.0' | |
| #Configure GIT | |
| $gitHubConfig = @{ | |
| "user.name" = "ionred"; | |
| "user.email" = "[email protected]" | |
| "safe.directory" = "D:/git/chocolatey-packages"; | |
| "credential.helper" = "store"; | |
| "core.editor" = "'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin" | |
| } | |
| $gitHubConfig.GetEnumerator() | ForEach-Object { if ($gitCurrentConfig -notcontains "$($_.name)=$($_.value)") { git config --global $_.name $_.value } } | |
| Write-BoxstarterMessage "Installing Windows Sandbox" | |
| Enable-WindowsOptionalFeature -FeatureName "Containers-DisposableClientVM" -All -Online | |
| Write-BoxstarterMessage "Installing Windows Subsystem for Linux" | |
| wsl.exe --install | |
| Write-BoxstarterMessage "Enabling UAC" | |
| Enable-UAC | |
| Write-BoxstarterMessage "Enabling Microsoft Update" | |
| Enable-MicrosoftUpdate | |
| Write-BoxstarterMessage "Enabling Windows Update" | |
| Install-WindowsUpdate -AcceptEula -GetUpdatesFromMS | |
| if ($env:computername -ne $computername) { | |
| Write-BoxstarterMessage "Renaming Computer to $computername" | |
| Rename-Computer -NewName $computername | |
| } | |
| Write-BoxstarterMessage "Opening Driver Pages" | |
| Start-Process "https://www.amd.com/en/support/graphics/radeon-500-series/radeon-rx-500-series/radeon-rx-580" | |
| Start-Process "https://www.asrock.com/MB/AMD/B450M%20Pro4-F/index.asp#Download" | |
| $Boxstarter.RebootOk = $false # Allow reboots? |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment