Как перезагрузить 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/

Другие вопросы по тегам