Skip to content

Instantly share code, notes, and snippets.

@tdoumas
Forked from dougwaldron/InstallSoftware.ps1
Last active March 19, 2023 22:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tdoumas/de4486d84c88c3cb54e839a62344e1e4 to your computer and use it in GitHub Desktop.
Save tdoumas/de4486d84c88c3cb54e839a62344e1e4 to your computer and use it in GitHub Desktop.
Install software with winget / automate installation with PowerShell
# 1. Make sure the Microsoft App Installer is installed:
# https://www.microsoft.com/en-us/p/app-installer/9nblggh4nns1
# 2. Edit the list of apps to install.
# 3. Run this script as administrator.
Write-Output "Installing Apps"
$apps = @(
@{name = "7zip.7zip" },
@{name = "Adobe.Acrobat.Reader.64-bit" },
@{name = "Axosoft.GitKraken" },
@{name = "Devolutions.RemoteDesktopManagerFree" },
@{name = "Dropbox.Dropbox" },
@{name = "Git.Git" },
@{name = "GnuPG.Gpg4win" },
@{name = "Google.Chrome" },
@{name = "Greenshot.Greenshot" },
@{name = "Inkscape.Inkscape" },
@{name = "JanDeDobbeleer.OhMyPosh" },
@{name = "JetBrains.Toolbox" },
@{name = "JohnMacFarlane.Pandoc" },
@{name = "KDE.KDiff3" },
# @{name = "Microsoft.AzureDataStudio" }, # Included with SSMS
@{name = "Microsoft.dotnet" },
@{name = "Microsoft.PowerShell" },
@{name = "Microsoft.PowerToys" },
@{name = "Microsoft.SQLServerManagementStudio" }, # Includes AzureDataStudio
@{name = "Microsoft.VisualStudio.2022.Community" },
@{name = "Microsoft.VisualStudioCode" },
@{name = "Microsoft.WindowsTerminal" },
@{name = "Mozilla.Firefox.DeveloperEdition" },
@{name = "Mozilla.Firefox" },
@{name = "NickeManarin.ScreenToGif" },
@{name = "Notepad++.Notepad++" },
@{name = "OpenJS.NodeJS.LTS" },
@{name = "TimKosse.FileZilla.Client" },
@{name = "VideoLAN.VLC" },
@{name = "WinDirStat.WinDirStat" },
@{name = "Zoom.Zoom" }
);
Foreach ($app in $apps) {
$listApp = winget list --exact -q $app.name
if (![String]::Join("", $listApp).Contains($app.name)) {
Write-host "Installing: " $app.name
winget install -e -h --accept-source-agreements --accept-package-agreements --id $app.name
}
else {
Write-host "Skipping: " $app.name " (already installed)"
}
}
# 1. Make sure the Microsoft App Installer is installed:
# https://www.microsoft.com/en-us/p/app-installer/9nblggh4nns1
# 2. Edit the list of apps to install.
# 3. Run this script as administrator.
Write-Output "Installing Apps"
$apps = @(
@{name = "7zip.7zip" },
@{name = "Adobe.Acrobat.Reader.64-bit" },
@{name = "ESET.EndpointAntivirus" },
@{name = "Google.Chrome" },
@{name = "Git.Git" },
@{name = "Logitech.OptionsPlus" },
@{name = "Microsoft.PowerShell" },
@{name = "Microsoft.Teams" },
@{name = "Microsoft.WindowsTerminal" },
@{name = "Microsoft.SQLServerManagementStudio" }, # Includes AzureDataStudio
@{name = "Microsoft.VisualStudioCode" },
@{name = "Microsoft.VisualStudio.2022.Professional" },
@{name = "Mozilla.Firefox" },
@{name = "JanDeDobbeleer.OhMyPosh" },
@{name = "Notepad++.Notepad++" },
@{name = "OpenVPNTechnologies.OpenVPN" }
);
Foreach ($app in $apps) {
$listApp = winget list --exact -q $app.name
if (![String]::Join("", $listApp).Contains($app.name)) {
Write-host "Installing: " $app.name
winget install -e -h --accept-source-agreements --accept-package-agreements --id $app.name
}
else {
Write-host "Skipping: " $app.name " (already installed)"
}
}

Windows released a new command line tool in 2021 for installing software called winget. My verdict is: wow, it's really good!

Using this PowerShell script, within about 10 minutes it had installed over 30 applications with no interaction needed from me.

Here's a quick tutorial on using winget.

  • Winget comes pre-installed on new computers, but if you don't have it, just install the App Installer from the Microsoft Store.
  • winget list shows all applications you currently have installed and labels which ones are available through winget. This is a good way to prepare your own setup script, especially if you're planning to get a new computer.
  • winget search <name of app> to find out if an app you want can be installed through winget.
  • winget install and winget uninstall do exactly what you think.

You can install each app separately using those commands. Or if you want to use the script to automate it, here's how to do that:

  1. Edit the InstallSoftware.ps1 file to include the apps you want.
  2. Start PowerShell as administrator.
  3. If running scripts is blocked (it should be), you can temporarily unblock them with Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process.
  4. Run the script and enjoy!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment