Как перезагрузить PowerShell после установки пошгита из скрипта?
У меня проблемы с тем, чтобы найти способ заставить работать git и пошгить после установки его через скрипт с использованием шоколада, не закрывая консоль powershell.
Вот как выглядит мой сценарий.
Function InstallChocolatey {
iwr https://chocolatey.org/install.ps1 -UseBasicParsing | iex
refreshenv #needed to make poshgit install succesfully without restarting Powershell
Write-Output "Chocolatey installed and configured."
}
Function InstallSoftware {
choco install git --params='/NoShellIntegration' -y
choco install poshgit -y
. $profile #reload profile
Write-Output "Software installed and profile reloaded"
}
InstallChocolatey
InstallSoftware
Когда я закрываю Powershell и перезагружаю его, все работает как положено. Но так как мой сценарий позже должен продолжать выполнять git, я действительно хотел бы найти решение, чтобы оно работало без закрытия консоли.
Из того, что я нашел на Stackru и других сайтах, использующих
. $profile
должен перезагрузить профиль. Но, к сожалению, в моем случае это никак не сказывается. Я попытался использовать refreshenv снова.
Мой файл профиля в настоящее время содержит только одну строку
Import-Module 'C:\tools\poshgit\dahlbyk-posh-git-a4faccd\src\posh-git.psd1'
Я также попытался добавить -force в конце строки, но ничего не изменилось.
Я довольно новичок в Powershell, поэтому, пожалуйста, потерпите меня...:)
2 ответа
Благодаря приведенным выше комментариям я смог заставить его работать без перезапуска PowerShell (см. Скрипт ниже)!
Ключевые элементы, необходимые для его работы:
Обновите переменные окружения после установки Chocolatey и Git/Posh Git
refreshenv
Для того, чтобы заставить Git работать без перезапуска PS, временно добавьте Git в путь
$env:path+='C:\Program Files\Git\cmd'
и последнее, но не менее важное: перезагрузите Posh Git Profile (как предложено @4c74356b41)
. C:\tools\poshgit\dahlbyk-posh-git-a4faccd\profile.example.ps1
Полный скрипт (улучшения приветствуются!):
Function InstallChocolatey {
iwr https://chocolatey.org/install.ps1 -UseBasicParsing | iex
#choco feature enable -n autoUninstaller
refreshenv
Write-Output "Chocolatey installed."
}
Function InstallSoftware {
choco install git --params='/NoShellIntegration' -y
$env:path+='C:\Program Files\Git\cmd'
Write-Output "Git installed"
choco install poshgit -y
refreshenv
Write-Output "Posh Git installed"
}
Function WriteSSHKeys { #Writing SSH keys to the user directory
}
Function SetupSSH {
. C:\tools\poshgit\dahlbyk-posh-git-a4faccd\profile.example.ps1
}
InstallChocolatey
InstallSoftware
WriteSSHKeys
SetupSSH
Только это сработало для меня.
$Env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
Источник: https://shellgeek.com/powershell-refresh-environment-variables/