Windows Setup

This post describes how to setup all the needed programms on a new computer:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<#
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|SetContentPathbackupFile -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 (userPathlike"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 (machinePathlike"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 (agentServiceandagentService.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:ChocolateyToolsLocationand(TestPathenv: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=Continueif(notenv:ChocolateyInstall) { message=@("TheChocolateyInstallenvironmentvariablewasnotfound.""Chocolateyisnotdetectedasinstalled.Nothingtodo.")join"n"WriteWarningmessage 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 backupFileEncodingUTF8ForcewarningMessage = @" 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 (agentServiceandagentService.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))RemoveItemPath$env:ChocolateyToolsLocationWhatIfRecurseForceforeach(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

Leave a Reply