From 0e7453508544e4026277a168bd4eb9a9888df90f Mon Sep 17 00:00:00 2001 From: Brennen Raimer Date: Fri, 28 Feb 2020 08:49:52 -0500 Subject: [PATCH 1/4] add setup.ps1 and git.inf --- git.inf | 19 +++++++++++++++++++ setup.ps1 | 14 ++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 git.inf create mode 100644 setup.ps1 diff --git a/git.inf b/git.inf new file mode 100644 index 0000000..82989ad --- /dev/null +++ b/git.inf @@ -0,0 +1,19 @@ +[Setup] +Lang=default +Dir=C:\Program Files\Git +Group=Git +NoIcons=0 +SetupType=default +Components=gitlfs,assoc,consolefont,autoupdate +Tasks= +EditorOption=VisualStudioCode +CustomEditorPath= +PathOption=Cmd +SSHOption=OpenSSH +TortoiseOption=false +CURLOption=WinSSL +CRLFOption=LFOnly +BashTerminalOption=MinTTY +PerformanceTweaksFSCache=Enabled +UseCredentialManager=Enabled +EnableSymlinks=Disabled diff --git a/setup.ps1 b/setup.ps1 new file mode 100644 index 0000000..10c6f2f --- /dev/null +++ b/setup.ps1 @@ -0,0 +1,14 @@ +#Setup Miniconda +$miniconda_url = "https://repo.anaconda.com/miniconda/Miniconda3-latest-Windows-x86_64.exe" +$miniconda_installer = $miniconda_url.split('/')[-1] +#Silent mode command line flags: https://docs.anaconda.com/anaconda/install/silent-mode/ +$miniconda_install_params = '/S', '/D="$HOME\Miniconda3"', '/InstallationType=JustMe', '/RegisterPython=0', '/AddToPath=0' +Invoke-WebRequest $miniconda_url -OutFile $miniconda_installer +Invoke-Expression "& .\$miniconda_installer $miniconda_install_params" +#Remove-Item ".\$miniconda_installer" +Invoke-Expression "& '$HOME\Miniconda3\Scripts\conda.exe init'" + +$git_url = Invoke-WebRequest "https://git-scm.com/download/win" | Select-Object -ExpandProperty Links | Where-Object innerText -like "64-bit Git for Windows Setup" | Select-Object -ExpandProperty href +$git_installer = $git_url.split('/')[-1] +Invoke-WebRequest $git_url -OutFile $git_installer +Invoke-Expression "& .\$git_installer " \ No newline at end of file From 5ed817aabbad588184ca8993af3f01f6994d1c6c Mon Sep 17 00:00:00 2001 From: Brennen Raimer Date: Fri, 28 Feb 2020 15:47:25 -0500 Subject: [PATCH 2/4] checkpoint commit: i need a break --- setup.ps1 | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/setup.ps1 b/setup.ps1 index 10c6f2f..9c05006 100644 --- a/setup.ps1 +++ b/setup.ps1 @@ -1,3 +1,9 @@ +#Weird stuff happens with IE compatibility mode set, especially if you're working remotely. Temporarily turn off compatibility mode for intranet sites +$reg_path = "HKCU:\SOFTWARE\Microsoft\Internet Explorer\BrowserEmulation" +$cur_compat_mode = Get-ItemProperty -Path $reg_path -Name IntranetCompatibilityMode | Select-Object -ExpandProperty IntranetCompatibilityMode +New-ItemProperty -Path $reg_path -Name IntranetCompatibilityMode -Value 0 -Force | Out-Null +#now that compatibility mode is off temporarily, we can scrape the web + #Setup Miniconda $miniconda_url = "https://repo.anaconda.com/miniconda/Miniconda3-latest-Windows-x86_64.exe" $miniconda_installer = $miniconda_url.split('/')[-1] @@ -6,9 +12,14 @@ $miniconda_install_params = '/S', '/D="$HOME\Miniconda3"', '/InstallationType=Ju Invoke-WebRequest $miniconda_url -OutFile $miniconda_installer Invoke-Expression "& .\$miniconda_installer $miniconda_install_params" #Remove-Item ".\$miniconda_installer" -Invoke-Expression "& '$HOME\Miniconda3\Scripts\conda.exe init'" +$conda_exe = "$HOME\Miniconda3\Scripts\conda.exe" +Invoke-Expression "& $conda_exe init" + +#Setup Visual Studio Code + +$vscode_url = "https://aka.ms/win32-x64-user-stable" $git_url = Invoke-WebRequest "https://git-scm.com/download/win" | Select-Object -ExpandProperty Links | Where-Object innerText -like "64-bit Git for Windows Setup" | Select-Object -ExpandProperty href $git_installer = $git_url.split('/')[-1] Invoke-WebRequest $git_url -OutFile $git_installer -Invoke-Expression "& .\$git_installer " \ No newline at end of file +Invoke-Expression "& .\$git_installer /VERYSILENT /LOADINF=.\git.inf" From 051899e7f2b7608fd9dd7221156a7bd3bc78ef6a Mon Sep 17 00:00:00 2001 From: Brennen Raimer Date: Fri, 13 Mar 2020 12:01:00 -0400 Subject: [PATCH 3/4] added check to prevent double installation of conda --- setup.ps1 | 50 +++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 39 insertions(+), 11 deletions(-) diff --git a/setup.ps1 b/setup.ps1 index 9c05006..b731554 100644 --- a/setup.ps1 +++ b/setup.ps1 @@ -4,19 +4,47 @@ $cur_compat_mode = Get-ItemProperty -Path $reg_path -Name IntranetCompatibilityM New-ItemProperty -Path $reg_path -Name IntranetCompatibilityMode -Value 0 -Force | Out-Null #now that compatibility mode is off temporarily, we can scrape the web -#Setup Miniconda -$miniconda_url = "https://repo.anaconda.com/miniconda/Miniconda3-latest-Windows-x86_64.exe" -$miniconda_installer = $miniconda_url.split('/')[-1] -#Silent mode command line flags: https://docs.anaconda.com/anaconda/install/silent-mode/ -$miniconda_install_params = '/S', '/D="$HOME\Miniconda3"', '/InstallationType=JustMe', '/RegisterPython=0', '/AddToPath=0' -Invoke-WebRequest $miniconda_url -OutFile $miniconda_installer -Invoke-Expression "& .\$miniconda_installer $miniconda_install_params" -#Remove-Item ".\$miniconda_installer" -$conda_exe = "$HOME\Miniconda3\Scripts\conda.exe" -Invoke-Expression "& $conda_exe init" +$default_install_paths = $HOME, $env:LOCALAPPDATA, $env:ProgramFiles + +$conda_installed = $default_install_paths | ForEach-Object -Process { Get-ChildItem | Where-Object -Property "Name" -Like -Value "*conda*" } + +$install_miniconda = -not $conda_installed + +if ($conda_installed) { + write-host " + Found some files that indicate you may already have an Anaconda/Miniconda environment installed. + + $($default_install_paths | + ForEach-Object -Process {Get-ChildItem | + Where-Object -Property "Name" -Like -Value "*conda*" | + ForEach-Object -Process {$_.FullName | + ForEach-Object -Process {$_ + "`n "} + } + } + ) + + Installing Miniconda on top of it may have unintended side-effects of breaking your existing installation. + " + $user_input = (Read-Host -Prompt "Continue Installation of Miniconda anyway? [yes|(no)] ").ToLower() + $install_miniconda = ("y","yes") -contains $user_input +} + +if ($install_miniconda) { + #Setup Miniconda + $miniconda_url = "https://repo.anaconda.com/miniconda/Miniconda3-latest-Windows-x86_64.exe" + $miniconda_installer = $miniconda_url.split('/')[-1] + + #Silent mode command line flags: https://docs.anaconda.com/anaconda/install/silent-mode/ + $miniconda_install_params = '/S', '/D="$HOME\Miniconda3"', '/InstallationType=JustMe', '/RegisterPython=0', '/AddToPath=0' + Invoke-WebRequest $miniconda_url -OutFile $miniconda_installer + Invoke-Expression "& .\$miniconda_installer $miniconda_install_params" + #Remove-Item ".\$miniconda_installer" + $conda_exe = "$HOME\Miniconda3\Scripts\conda.exe" + #Make conda accessible from any/all shells + Invoke-Expression "& $conda_exe init --all" +} #Setup Visual Studio Code - $vscode_url = "https://aka.ms/win32-x64-user-stable" $git_url = Invoke-WebRequest "https://git-scm.com/download/win" | Select-Object -ExpandProperty Links | Where-Object innerText -like "64-bit Git for Windows Setup" | Select-Object -ExpandProperty href From 640be9cbc107d1e9b0140af13b955ae0193c1e6c Mon Sep 17 00:00:00 2001 From: Brennen Raimer Date: Fri, 13 Mar 2020 13:46:34 -0400 Subject: [PATCH 4/4] finished initial draft of script, needs testing --- README.md | 4 +++- setup.ps1 | 50 ++++++++++++++++++++++++++++++-------------------- vscode.inf | 6 ++++++ 3 files changed, 39 insertions(+), 21 deletions(-) create mode 100644 vscode.inf diff --git a/README.md b/README.md index 82e7459..3b7ea79 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ # Python-Environment-Setup -This script will setup Miniconda, Visual Studio Code, and Git for you \ No newline at end of file +This script will setup Miniconda, Visual Studio Code, and Git for you + +To run this setup script, from a command line, change to the directory that contains the script and run `powershell -File .\setup.ps1` diff --git a/setup.ps1 b/setup.ps1 index b731554..693d248 100644 --- a/setup.ps1 +++ b/setup.ps1 @@ -4,33 +4,28 @@ $cur_compat_mode = Get-ItemProperty -Path $reg_path -Name IntranetCompatibilityM New-ItemProperty -Path $reg_path -Name IntranetCompatibilityMode -Value 0 -Force | Out-Null #now that compatibility mode is off temporarily, we can scrape the web -$default_install_paths = $HOME, $env:LOCALAPPDATA, $env:ProgramFiles +$default_install_paths = $HOME, $env:ProgramFiles -$conda_installed = $default_install_paths | ForEach-Object -Process { Get-ChildItem | Where-Object -Property "Name" -Like -Value "*conda*" } +Write-Host "Checking for existing installations of Anaconda or Miniconda. This may take a few minutes..." +$conda_installed = $default_install_paths | ForEach-Object -Process {Get-ChildItem -Recurse -File -Force -Filter conda.exe -ErrorAction SilentlyContinue | Select-Object -First 1} -$install_miniconda = -not $conda_installed +$install_miniconda = -Not $conda_installed if ($conda_installed) { write-host " - Found some files that indicate you may already have an Anaconda/Miniconda environment installed. - - $($default_install_paths | - ForEach-Object -Process {Get-ChildItem | - Where-Object -Property "Name" -Like -Value "*conda*" | - ForEach-Object -Process {$_.FullName | - ForEach-Object -Process {$_ + "`n "} - } - } - ) - + You appear to have Anaconda or Miniconda installed already. Installing Miniconda on top of it may have unintended side-effects of breaking your existing installation. " $user_input = (Read-Host -Prompt "Continue Installation of Miniconda anyway? [yes|(no)] ").ToLower() $install_miniconda = ("y","yes") -contains $user_input } +else{ + Write-Host "No Anaconda or Miniconda installation detected.`n" +} if ($install_miniconda) { #Setup Miniconda + Write-Host "Installing Miniconda...`n`n" $miniconda_url = "https://repo.anaconda.com/miniconda/Miniconda3-latest-Windows-x86_64.exe" $miniconda_installer = $miniconda_url.split('/')[-1] @@ -44,10 +39,25 @@ if ($install_miniconda) { Invoke-Expression "& $conda_exe init --all" } -#Setup Visual Studio Code -$vscode_url = "https://aka.ms/win32-x64-user-stable" +if (-Not (Test-Path "$HOME\AppData\Local\Programs\Microsoft VS Code\Code.exe")){ + #Setup Visual Studio Code + Write-Host "Installing Microsoft Visual Studio Code...`n`n" + $vscode_url = "https://aka.ms/win32-x64-user-stable" + ((Invoke-WebRequest -Method Head $vscode_url).Headers["Content-Disposition"]) -match '"(.+)"' | Out-Null + $vscode_installer = $Matches[1] + Invoke-WebRequest $vscode_url -OutFile $vscode_installer + Invoke-Expression "& .\$vscode_installer /VERYSILENT /LOADINF=.\vscode.inf" +} -$git_url = Invoke-WebRequest "https://git-scm.com/download/win" | Select-Object -ExpandProperty Links | Where-Object innerText -like "64-bit Git for Windows Setup" | Select-Object -ExpandProperty href -$git_installer = $git_url.split('/')[-1] -Invoke-WebRequest $git_url -OutFile $git_installer -Invoke-Expression "& .\$git_installer /VERYSILENT /LOADINF=.\git.inf" + + +if ((Test-Path "$env:LOCALAPPDATA\Programs\Git\bin\git.exe") -or (Test-Path "$env:ProgramFiles\Git\bin\git.exe")){ + Write-Host "Installing Git...`n`n" + $git_url = Invoke-WebRequest "https://git-scm.com/download/win" | Select-Object -ExpandProperty Links | Where-Object innerText -like "64-bit Git for Windows Setup" | Select-Object -ExpandProperty href + $git_installer = $git_url.split('/')[-1] + Invoke-WebRequest $git_url -OutFile $git_installer + Invoke-Expression "& .\$git_installer /VERYSILENT /LOADINF=.\git.inf" +} + +#restore IE compatibility mode setting +New-ItemProperty -Path $reg_path -Name IntranetCompatibilityMode -Value $cur_compat_mode -Force | Out-Null diff --git a/vscode.inf b/vscode.inf new file mode 100644 index 0000000..20afa5c --- /dev/null +++ b/vscode.inf @@ -0,0 +1,6 @@ +[Setup] +Lang=english +Dir=%LOCALAPPDATA%\Programs\Microsoft VS Code +Group=Visual Studio Code +NoIcons=0 +Tasks=desktopicon,addcontextmenufiles,addcontextmenufolders,associatewithfiles,addtopath