This post describes how to setup all the needed programms on a new computer:
<#
Script to install Various Programms
#>
#Check if Chocolatey is already installed, when not install it
function Install-Chocolatey {
<#
.SYNOPSIS
Insure Chocolatey is installed
.DESCRIPTION
Check if Chocolatey is installed. If not, then install it.
.EXAMPLE
Install-Chocolatey
#>
[CmdletBinding(SupportsShouldProcess = $True)]
param ()
$testchoco = powershell choco -v
if(-not($testchoco)){
Write-Output "Seems Chocolatey is not installed, installing now"
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
}
else{
Write-Output "Chocolatey Version $testchoco is already installed"
}
}
function UnInstall-Chocolatey {
<#
.SYNOPSIS
IUnintstal chocolatey
.DESCRIPTION
Check if Chocolatey is installed. If then uninstall it.
.EXAMPLE
UnInstall-Chocolatey
#>
[CmdletBinding(SupportsShouldProcess = $True)]
param ()
$testchoco = powershell choco -v
if(-not($testchoco)){
Write-Output "Chocolatey is not installed"
}
else{
$VerbosePreference = 'Continue'
if (-not $env:ChocolateyInstall) {
$message = @(
"The ChocolateyInstall environment variable was not found."
"Chocolatey is not detected as installed. Nothing to do."
) -join "`n"
Write-Warning $message
return
}
if (-not (Test-Path $env:ChocolateyInstall)) {
$message = @(
"No Chocolatey installation detected at '$env:ChocolateyInstall'."
"Nothing to do."
) -join "`n"
Write-Warning $message
return
}
<#
Using the .NET registry calls is necessary here in order to preserve environment variables embedded in PATH values;
Powershell's registry provider doesn't provide a method of preserving variable references, and we don't want to
accidentally overwrite them with absolute path values. Where the registry allows us to see "
entry, PowerShell's registry provider only sees "C:\Windows", for example.
#>
$userKey = [Microsoft.Win32.Registry]::CurrentUser.OpenSubKey('Environment')
$userPath = $userKey.GetValue('PATH', [string]::Empty, 'DoNotExpandEnvironmentNames').ToString()
$machineKey = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey('SYSTEM\ControlSet001\Control\Session Manager\Environment\')
machinePath=machineKey.GetValue('PATH', [string]::Empty, 'DoNotExpandEnvironmentNames').ToString()
$backupPATHs = @(
"User PATH: $userPath"
"Machine PATH: $machinePath"
)
$backupFile = "C:\PATH_backups_ChocolateyUninstall.txt"
backupPATHs|Set−Content−PathbackupFile -Encoding UTF8 -Force
$warningMessage = @"
This could cause issues after reboot where nothing is found if something goes wrong.
In that case, look at the backup file for the original PATH values in '$backupFile'.
"@
if (userPath−like"∗env:ChocolateyInstall*") {
Write-Verbose "Chocolatey Install location found in User Path. Removing..."
Write-Warning $warningMessage
$newUserPATH = @(
$userPath -split [System.IO.Path]::PathSeparator |
Where-Object { −and_ -ne "$env:ChocolateyInstall\bin" }
) -join [System.IO.Path]::PathSeparator
# NEVER use [Environment]::SetEnvironmentVariable() for PATH values; see https://github.com/dotnet/corefx/issues/36449
# This issue exists in ALL released versions of .NET and .NET Core as of 12/19/2019
$userKey.SetValue('PATH', $newUserPATH, 'ExpandString')
}
if (machinePath−like"∗env:ChocolateyInstall*") {
Write-Verbose "Chocolatey Install location found in Machine Path. Removing..."
Write-Warning $warningMessage
$newMachinePATH = @(
$machinePath -split [System.IO.Path]::PathSeparator |
Where-Object { −and_ -ne "$env:ChocolateyInstall\bin" }
) -join [System.IO.Path]::PathSeparator
# NEVER use [Environment]::SetEnvironmentVariable() for PATH values; see https://github.com/dotnet/corefx/issues/36449
# This issue exists in ALL released versions of .NET and .NET Core as of 12/19/2019
$machineKey.SetValue('PATH', $newMachinePATH, 'ExpandString')
}
# Adapt for any services running in subfolders of ChocolateyInstall
$agentService = Get-Service -Name chocolatey-agent -ErrorAction SilentlyContinue
if (agentService−andagentService.Status -eq 'Running') {
$agentService.Stop()
}
# TODO: add other services here
Remove-Item -Path $env:ChocolateyInstall -Recurse -Force -WhatIf
'ChocolateyInstall', 'ChocolateyLastPathUpdate' | ForEach-Object {
foreach ($scope in 'User', 'Machine') {
[Environment]::SetEnvironmentVariable(,[string]::Empty,scope)
}
}
$machineKey.Close()
$userKey.Close()
if (env:ChocolateyToolsLocation−and(Test−Pathenv:ChocolateyToolsLocation)) {
Remove-Item -Path $env:ChocolateyToolsLocation -WhatIf -Recurse -Force
}
foreach ($scope in 'User', 'Machine') {
[Environment]::SetEnvironmentVariable('ChocolateyToolsLocation', [string]::Empty, $scope)
}
}
}
Install-Chocolatey
#Install the different apps
Write-Output "Installing apps"
#The following command this makes sure that we do not always have to type in yes (https://stackoverflow.com/questions/29873439/how-do-i-update-all-chocolatey-applications-without-confirmation)
choco feature enable -n=allowGlobalConfirmation
choco install adobereader
choco install anki
choco install beyondcompare
choco install drawio
choco install dropbox
choco install Firefox --params "/NoTaskbarShortcut /NoDesktopShortcut"
choco install foxitreader
choco install git
choco install gnucash
choco install littlebigmouse
choco install logitech-options
choco install logitechgaming
choco install miktex
choco install miniconda3
choco install mobaxterm #Used to make a remote connection to OST server
choco install nextcloud-client
choco install obs-studio.install
choco install obs-virtualcam
choco install putty.install
choco install texstudio
choco install vscode --params "/NoDesktopIcon /NoQuicklaunchIcon"
choco install vscode-codespellchecker
choco install vscode-powershell
choco install vscode-python
choco install whatsapp
choco install winrar
choco install winscp
<#
Script to install Various Programms
#>
#Check if Chocolatey is already installed, when not install it
function Install-Chocolatey {
<#
.SYNOPSIS
Insure Chocolatey is installed
.DESCRIPTION
Check if Chocolatey is installed. If not, then install it.
.EXAMPLE
Install-Chocolatey
#>
[CmdletBinding(SupportsShouldProcess = True)]param()testchoco = powershell choco -v
if(-not($testchoco)){
Write-Output "Seems Chocolatey is not installed, installing now"
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
}
else{
Write-Output "Chocolatey Version $testchoco is already installed"
}
}
function UnInstall-Chocolatey {
<#
.SYNOPSIS
IUnintstal chocolatey
.DESCRIPTION
Check if Chocolatey is installed. If then uninstall it.
.EXAMPLE
UnInstall-Chocolatey
#>
[CmdletBinding(SupportsShouldProcess = True)]param()testchoco = powershell choco -v
if(-not($testchoco)){
Write-Output "Chocolatey is not installed"
}
else{
VerbosePreference=′Continue′if(−notenv:ChocolateyInstall) {
message=@("TheChocolateyInstallenvironmentvariablewasnotfound.""Chocolateyisnotdetectedasinstalled.Nothingtodo.")−join"‘n"Write−Warningmessage
return
}
if (-not (Test-Path env:ChocolateyInstall)) {
$message = @(
"No Chocolatey installation detected at '$env:ChocolateyInstall'."
"Nothing to do."
) -join "`n"
Write-Warning $message
return
}
<#
Using the .NET registry calls is necessary here in order to preserve environment variables embedded in PATH values;
Powershell's registry provider doesn't provide a method of preserving variable references, and we don't want to
accidentally overwrite them with absolute path values. Where the registry allows us to see "
entry, PowerShell's registry provider only sees "C:\Windows", for example.
#>userKey = [Microsoft.Win32.Registry]::CurrentUser.OpenSubKey('Environment') userPath=userKey.GetValue('PATH', [string]::Empty, 'DoNotExpandEnvironmentNames').ToString() machineKey=[Microsoft.Win32.Registry]::LocalMachine.OpenSubKey(′SYSTEM\ControlSet001\Control\SessionManager\Environment\')machinePath = machineKey.GetValue(′PATH′,[string]::Empty,′DoNotExpandEnvironmentNames′).ToString()backupPATHs = @( "User PATH: userPath""MachinePATH:machinePath" ) backupFile="C:\PATHbackupsChocolateyUninstall.txt"backupPATHs | Set-Content -Path backupFile−EncodingUTF8−ForcewarningMessage = @" This could cause issues after reboot where nothing is found if something goes wrong. In that case, look at the backup file for the original PATH values in 'backupFile′."@if(userPath -like "*env:ChocolateyInstall*") {
Write-Verbose "Chocolatey Install location found in User Path. Removing..."
Write-Warning $warningMessage
$newUserPATH = @(
$userPath -split [System.IO.Path]::PathSeparator |
Where-Object { $_ -and $_ -ne "$env:ChocolateyInstall\bin" }
) -join [System.IO.Path]::PathSeparator
# NEVER use [Environment]::SetEnvironmentVariable() for PATH values; see https://github.com/dotnet/corefx/issues/36449
# This issue exists in ALL released versions of .NET and .NET Core as of 12/19/2019
$userKey.SetValue('PATH', $newUserPATH, 'ExpandString')
}
if (machinePath -like "*env:ChocolateyInstall*") {
Write-Verbose "Chocolatey Install location found in Machine Path. Removing..."
Write-Warning $warningMessage
$newMachinePATH = @(
$machinePath -split [System.IO.Path]::PathSeparator |
Where-Object { $_ -and $_ -ne "$env:ChocolateyInstall\bin" }
) -join [System.IO.Path]::PathSeparator
# NEVER use [Environment]::SetEnvironmentVariable() for PATH values; see https://github.com/dotnet/corefx/issues/36449
# This issue exists in ALL released versions of .NET and .NET Core as of 12/19/2019
$machineKey.SetValue('PATH', $newMachinePATH, 'ExpandString')
}
# Adapt for any services running in subfolders of ChocolateyInstallagentService = Get-Service -Name chocolatey-agent -ErrorAction SilentlyContinue if (agentService−andagentService.Status -eq 'Running') { agentService.Stop()
}
# TODO: add other services here
Remove-Item -Pathenv:ChocolateyInstall -Recurse -Force -WhatIf 'ChocolateyInstall', 'ChocolateyLastPathUpdate' | ForEach-Object { foreach (scope in 'User', 'Machine') {
[Environment]::SetEnvironmentVariable($_, [string]::Empty, $scope)
}
}machineKey.Close() userKey.Close()if(env:ChocolateyToolsLocation -and (Test-Path env:ChocolateyToolsLocation))Remove−Item−Path$env:ChocolateyToolsLocation−WhatIf−Recurse−Forceforeach(scope in 'User', 'Machine') { [Environment]::SetEnvironmentVariable('ChocolateyToolsLocation', [string]::Empty, $scope) } } } Install-Chocolatey #Install the different apps Write-Output "Installing apps" #The following command this makes sure that we do not always have to type in yes (https://stackoverflow.com/questions/29873439/how-do-i-update-all-chocolatey-applications-without-confirmation) choco feature enable -n=allowGlobalConfirmation choco install adobereader choco install anki choco install beyondcompare choco install drawio choco install dropbox choco install Firefox --params "/NoTaskbarShortcut /NoDesktopShortcut" choco install foxitreader choco install git choco install gnucash choco install littlebigmouse choco install logitech-options choco install logitechgaming choco install miktex choco install miniconda3 choco install mobaxterm #Used to make a remote connection to OST server choco install nextcloud-client choco install obs-studio.install choco install obs-virtualcam choco install putty.install choco install texstudio choco install vscode --params "/NoDesktopIcon /NoQuicklaunchIcon" choco install vscode-codespellchecker choco install vscode-powershell choco install vscode-python choco install whatsapp choco install winrar choco install winscp
$message = @(
"No Chocolatey installation detected at '$env:ChocolateyInstall'."
"Nothing to do."
) -join "`n"
Write-Warning $message
return
}
<#
Using the .NET registry calls is necessary here in order to preserve environment variables embedded in PATH values;
Powershell's registry provider doesn't provide a method of preserving variable references, and we don't want to
accidentally overwrite them with absolute path values. Where the registry allows us to see "
entry, PowerShell's registry provider only sees "C:\Windows", for example.
#>userKey = [Microsoft.Win32.Registry]::CurrentUser.OpenSubKey('Environment') userPath=userKey.GetValue('PATH', [string]::Empty, 'DoNotExpandEnvironmentNames').ToString() machineKey=[Microsoft.Win32.Registry]::LocalMachine.OpenSubKey(′SYSTEM\ControlSet001\Control\SessionManager\Environment\')machinePath = machineKey.GetValue(′PATH′,[string]::Empty,′DoNotExpandEnvironmentNames′).ToString()backupPATHs = @( "User PATH: userPath""MachinePATH:machinePath" ) backupFile="C:\PATHbackupsChocolateyUninstall.txt"backupPATHs | Set-Content -Path backupFile−EncodingUTF8−ForcewarningMessage = @" This could cause issues after reboot where nothing is found if something goes wrong. In that case, look at the backup file for the original PATH values in 'backupFile′."@if(userPath -like "*env:ChocolateyInstall*") {
Write-Verbose "Chocolatey Install location found in User Path. Removing..."
Write-Warning $warningMessage
$newUserPATH = @(
$userPath -split [System.IO.Path]::PathSeparator |
Where-Object { $_ -and $_ -ne "$env:ChocolateyInstall\bin" }
) -join [System.IO.Path]::PathSeparator
# NEVER use [Environment]::SetEnvironmentVariable() for PATH values; see https://github.com/dotnet/corefx/issues/36449
# This issue exists in ALL released versions of .NET and .NET Core as of 12/19/2019
$userKey.SetValue('PATH', $newUserPATH, 'ExpandString')
}
if (machinePath -like "*env:ChocolateyInstall*") {
Write-Verbose "Chocolatey Install location found in Machine Path. Removing..."
Write-Warning $warningMessage
$newMachinePATH = @(
$machinePath -split [System.IO.Path]::PathSeparator |
Where-Object { $_ -and $_ -ne "$env:ChocolateyInstall\bin" }
) -join [System.IO.Path]::PathSeparator
# NEVER use [Environment]::SetEnvironmentVariable() for PATH values; see https://github.com/dotnet/corefx/issues/36449
# This issue exists in ALL released versions of .NET and .NET Core as of 12/19/2019
$machineKey.SetValue('PATH', $newMachinePATH, 'ExpandString')
}
# Adapt for any services running in subfolders of ChocolateyInstallagentService = Get-Service -Name chocolatey-agent -ErrorAction SilentlyContinue if (agentService−andagentService.Status -eq 'Running') { agentService.Stop()
}
# TODO: add other services here
Remove-Item -Pathenv:ChocolateyInstall -Recurse -Force -WhatIf 'ChocolateyInstall', 'ChocolateyLastPathUpdate' | ForEach-Object { foreach (scope in 'User', 'Machine') {
[Environment]::SetEnvironmentVariable($_, [string]::Empty, $scope)
}
}machineKey.Close() userKey.Close()if(env:ChocolateyToolsLocation -and (Test-Path env:ChocolateyToolsLocation))Remove−Item−Path$env:ChocolateyToolsLocation−WhatIf−Recurse−Forceforeach(scope in 'User', 'Machine') { [Environment]::SetEnvironmentVariable('ChocolateyToolsLocation', [string]::Empty, $scope) } } } Install-Chocolatey #Install the different apps Write-Output "Installing apps" #The following command this makes sure that we do not always have to type in yes (https://stackoverflow.com/questions/29873439/how-do-i-update-all-chocolatey-applications-without-confirmation) choco feature enable -n=allowGlobalConfirmation choco install adobereader choco install anki choco install beyondcompare choco install drawio choco install dropbox choco install Firefox --params "/NoTaskbarShortcut /NoDesktopShortcut" choco install foxitreader choco install git choco install gnucash choco install littlebigmouse choco install logitech-options choco install logitechgaming choco install miktex choco install miniconda3 choco install mobaxterm #Used to make a remote connection to OST server choco install nextcloud-client choco install obs-studio.install choco install obs-virtualcam choco install putty.install choco install texstudio choco install vscode --params "/NoDesktopIcon /NoQuicklaunchIcon" choco install vscode-codespellchecker choco install vscode-powershell choco install vscode-python choco install whatsapp choco install winrar choco install winscp
<# Script to install Various Programms #> #Check if Chocolatey is already installed, when not install it function Install-Chocolatey { <# .SYNOPSIS Insure Chocolatey is installed .DESCRIPTION Check if Chocolatey is installed. If not, then install it. .EXAMPLE Install-Chocolatey #> [CmdletBinding(SupportsShouldProcess = $True)] param () $testchoco = powershell choco -v if(-not($testchoco)){ Write-Output "Seems Chocolatey is not installed, installing now" Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) } else{ Write-Output "Chocolatey Version $testchoco is already installed" } } function UnInstall-Chocolatey { <# .SYNOPSIS IUnintstal chocolatey .DESCRIPTION Check if Chocolatey is installed. If then uninstall it. .EXAMPLE UnInstall-Chocolatey #> [CmdletBinding(SupportsShouldProcess = $True)] param () $testchoco = powershell choco -v if(-not($testchoco)){ Write-Output "Chocolatey is not installed" } else{ $VerbosePreference = 'Continue' if (-not $env:ChocolateyInstall) { $message = @( "The ChocolateyInstall environment variable was not found." "Chocolatey is not detected as installed. Nothing to do." ) -join "`n" Write-Warning $message return } if (-not (Test-Path $env:ChocolateyInstall)) { $message = @( "No Chocolatey installation detected at '$env:ChocolateyInstall'." "Nothing to do." ) -join "`n" Write-Warning $message return } <# Using the .NET registry calls is necessary here in order to preserve environment variables embedded in PATH values; Powershell's registry provider doesn't provide a method of preserving variable references, and we don't want to accidentally overwrite them with absolute path values. Where the registry allows us to see " entry, PowerShell's registry provider only sees "C:\Windows", for example. #> $userKey = [Microsoft.Win32.Registry]::CurrentUser.OpenSubKey('Environment') $userPath = $userKey.GetValue('PATH', [string]::Empty, 'DoNotExpandEnvironmentNames').ToString() $machineKey = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey('SYSTEM\ControlSet001\Control\Session Manager\Environment\') $machinePath = $machineKey.GetValue('PATH', [string]::Empty, 'DoNotExpandEnvironmentNames').ToString() $backupPATHs = @( "User PATH: $userPath" "Machine PATH: $machinePath" ) $backupFile = "C:\PATH_backups_ChocolateyUninstall.txt" $backupPATHs | Set-Content -Path $backupFile -Encoding UTF8 -Force $warningMessage = @" This could cause issues after reboot where nothing is found if something goes wrong. In that case, look at the backup file for the original PATH values in '$backupFile'. "@ if ($userPath -like "*$env:ChocolateyInstall*") { Write-Verbose "Chocolatey Install location found in User Path. Removing..." Write-Warning $warningMessage $newUserPATH = @( $userPath -split [System.IO.Path]::PathSeparator | Where-Object { $_ -and $_ -ne "$env:ChocolateyInstall\bin" } ) -join [System.IO.Path]::PathSeparator # NEVER use [Environment]::SetEnvironmentVariable() for PATH values; see https://github.com/dotnet/corefx/issues/36449 # This issue exists in ALL released versions of .NET and .NET Core as of 12/19/2019 $userKey.SetValue('PATH', $newUserPATH, 'ExpandString') } if ($machinePath -like "*$env:ChocolateyInstall*") { Write-Verbose "Chocolatey Install location found in Machine Path. Removing..." Write-Warning $warningMessage $newMachinePATH = @( $machinePath -split [System.IO.Path]::PathSeparator | Where-Object { $_ -and $_ -ne "$env:ChocolateyInstall\bin" } ) -join [System.IO.Path]::PathSeparator # NEVER use [Environment]::SetEnvironmentVariable() for PATH values; see https://github.com/dotnet/corefx/issues/36449 # This issue exists in ALL released versions of .NET and .NET Core as of 12/19/2019 $machineKey.SetValue('PATH', $newMachinePATH, 'ExpandString') } # Adapt for any services running in subfolders of ChocolateyInstall $agentService = Get-Service -Name chocolatey-agent -ErrorAction SilentlyContinue if ($agentService -and $agentService.Status -eq 'Running') { $agentService.Stop() } # TODO: add other services here Remove-Item -Path $env:ChocolateyInstall -Recurse -Force -WhatIf 'ChocolateyInstall', 'ChocolateyLastPathUpdate' | ForEach-Object { foreach ($scope in 'User', 'Machine') { [Environment]::SetEnvironmentVariable($_, [string]::Empty, $scope) } } $machineKey.Close() $userKey.Close() if ($env:ChocolateyToolsLocation -and (Test-Path $env:ChocolateyToolsLocation)) { Remove-Item -Path $env:ChocolateyToolsLocation -WhatIf -Recurse -Force } foreach ($scope in 'User', 'Machine') { [Environment]::SetEnvironmentVariable('ChocolateyToolsLocation', [string]::Empty, $scope) } } } Install-Chocolatey #Install the different apps Write-Output "Installing apps" #The following command this makes sure that we do not always have to type in yes (https://stackoverflow.com/questions/29873439/how-do-i-update-all-chocolatey-applications-without-confirmation) choco feature enable -n=allowGlobalConfirmation choco install adobereader choco install anki choco install beyondcompare choco install drawio choco install dropbox choco install Firefox --params "/NoTaskbarShortcut /NoDesktopShortcut" choco install foxitreader choco install git choco install gnucash choco install littlebigmouse choco install logitech-options choco install logitechgaming choco install miktex choco install miniconda3 choco install mobaxterm #Used to make a remote connection to OST server choco install nextcloud-client choco install obs-studio.install choco install obs-virtualcam choco install putty.install choco install texstudio choco install vscode --params "/NoDesktopIcon /NoQuicklaunchIcon" choco install vscode-codespellchecker choco install vscode-powershell choco install vscode-python choco install whatsapp choco install winrar choco install winscp