web-dev-qa-db-ja.com

Chocolateyのインストール後、新しいセッションを開く必要なしにPowerShellセッションの環境を更新する方法

ローカルマシンにGitHubソースコードを複製するための自動スクリプトを書いています。
スクリプトにGitをインストールした後、Powershellを閉じる/開くよう要求されました。
Gitをインストールした後、コードを自動的に複製できません。

これが私のコードです:

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 | %{ "$_" } 

エラー:

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.

終了せずにPowerShellを再起動するにはどうすればよいですか?

17
Priya Rani

ブートストラップの問題があります:

  • refreshenv(_Update-SessionEnvironment_のエイリアス)は一般的に _choco install ..._コマンドの後に環境変数の変更で現在のセッションを更新するために使用する正しいコマンドです。

  • ただし、-Chocolatey自体をインストールした直後refreshenv/_Update-SessionEnvironment_自体はfuture PowerShellセッションでのみ使用できます。これらのコマンドのロードは、プロファイル_$PROFILE_、環境変数_$env:ChocolateyInstall_に基づく。

そうは言っても、インストール直後にrefreshenv/_$PROFILE_を使用できるようにするために、将来のセッションで_Update-SessionEnvironment_が供給されたときにChocolateyが何を行うかemulateできるはずです。チョコレート:

_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.
$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
_

注:元のソリューションでは、Chocolateyプロファイルをロードするために_. $PROFILE_ではなく_Import-Module ..._を使用し、Chocolateyがその時点ですでに_$PROFILE_を更新していることに依存していました。ただし、 ferventcoder は、この_$PROFILE_の更新が発生しないことを示していますalwaysは発生しないため、信頼できません。

12
mklement0

pdate-SessionEnvironment を試して使用できます。

Chocolateyパッケージのインストール中に発生した可能性のある環境変数の変更で現在のPowerShellセッションの環境変数を更新します。

その変更がチョコレートコールの後も有効かどうかをテストします。

そうでない場合、1つの簡単な回避策は、少なくともgitを呼び出すために絶対パスを使用することです。

To PowershellからGitを呼び出す

new-item -path alias:git -value 'C:\Program Files\Git\bin\git.exe'

その後、試すことができます:

git clone --mirror https://${username}:${password}@$hostname/${username}/$Projectname.git D:\GitTemp -q 2>&1 | %{ "$_" } 
1
VonC