Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to refresh the environment of a PowerShell session after a Chocolatey install without needing to open a new session

I am writing automated script for cloning GitHub source code to local machine.
I failed after installing Git in my script, it asked for close/open powershell.
So I am not able to clone code automatic after installing Git.

Here is my code:

iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))  choco install -y git  refreshenv  Start-Sleep -Seconds 15   git clone --mirror https://${username}:${password}@$hostname/${username}/$Projectname.git D:\GitTemp -q 2>&1 | %{ "$_" }  

Error:

git : The term 'git' is not recognized as the name of a cmdlet,        function, script file, or operable program.        Check the spelling of the name, or if a path was included,        verify that the path is correct and try again. 

Please let me what should I put for reboot PowerShell without exiting?

like image 548
Priya Rani Avatar asked Oct 15 '17 18:10

Priya Rani


People also ask

What does Refreshenv do in Powershell?

refreshenv (an alias for Update-SessionEnvironment ) is generally the right command to use to update the current session with environment-variable changes after a choco install ... command.

How do I reload system variables in Windows?

2. Refresh Environment Variables via Command Prompt (CMD) Step 1: In the Start menu, search for Command Prompt and run it as an administrator. Step 2: Type the command: “set PATH = c” (without quotation marks), press the enter key, and restart the Command Prompt.


1 Answers

You have a bootstrapping problem:

  • refreshenv (an alias for Update-SessionEnvironment) is generally the right command to use to update the current session with environment-variable changes after a choco install ... command.

  • However, immediately after installing Chocolatey itself, refreshenv / Update-SessionEnvironment themselves are only available in future PowerShell sessions, because loading these commands happens via code added to profile $PROFILE, based on environment variable $env:ChocolateyInstall.

That said, you should be able to emulate what Chocolatey does when $PROFILE is sourced in future sessions in order to be able to use refreshenv / Update-SessionEnvironment right away, immediately after installing Chocolatey:

iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))  choco install -y git  # Make `refreshenv` available right away, by defining the $env:ChocolateyInstall # variable and importing the Chocolatey profile module. # Note: Using `. $PROFILE` instead *may* work, but isn't guaranteed to. $env:ChocolateyInstall = Convert-Path "$((Get-Command choco).Path)\..\.."    Import-Module "$env:ChocolateyInstall\helpers\chocolateyProfile.psm1"  # refreshenv is now an alias for Update-SessionEnvironment # (rather than invoking refreshenv.cmd, the *batch file* for use with cmd.exe) # This should make git.exe accessible via the refreshed $env:PATH, so that it # can be called by name only. refreshenv  # Verify that git can be called. git --version 

Note: The original solution used . $PROFILE instead of Import-Module ... to load the Chocolatey profile, relying on Chocolatey to have updated $PROFILE already at that point. However, ferventcoder points out that this updating of $PROFILE doesn't always happen, so it cannot be relied upon.

like image 128
mklement0 Avatar answered Oct 03 '22 11:10

mklement0