44

我一直在调整我的 PowerShell 配置文件中的一些脚本,退出 powershell 然后重新启动它很烦人,所以它会加载我对我的配置文件中的脚本所做的任何更改。是否可以在不退出的情况下重新启动 powershell 会话?

4

5 回答 5

22

您可以. $profile再次获取配置文件。

于 2012-07-18T16:40:01.193 回答
6

@manojlds 的回答是正确的,但最终可能会引发错误。例如,如果您在配置文件中定义了一个新的 PSDrive,那么重新点源它可能会导致错误。

另一种方法是首先启动 powershell,然后通过键入 PowerShell 立即启动另一个版本。我在嵌套控制台中对我的配置文件进行了更改,退出,然后重新运行 PowerShell 以测试更新的配置文件。

另一件事 - 缓慢而谨慎地更改配置文件。在我看来,虽然配置文件确实需要发展,但这种发展通常应该是缓慢的。嗯嗯!!

于 2012-07-18T18:50:47.977 回答
6

这将在同一个控制台窗口中启动一个新会话,重新加载您的配置文件:

Invoke-Command { & "powershell.exe" } -NoNewScope # PowerShell 5
Invoke-Command { & "pwsh.exe"       } -NoNewScope # PowerShell 7

或者更长但更健壮的命令,以下应该可以跨版本正常工作:

Get-Process -Id $PID | Select-Object -ExpandProperty Path | ForEach-Object { Invoke-Command { & "$_" } -NoNewScope }

当然,您将丢失前一会话中的所有变量等。

于 2020-03-08T22:25:28.343 回答
5

您可以制作一个简单的函数并将其添加到您的$profile(或制作一个模块然后导入到'$profile'),例如:

function Restart-PowerShell{
    Start-Process PowerShell # Launch PowerShell host in new window
    exit # Exit existing PowerShell host window
}
# Add any alias if you want, for ex. rps (rp already occupied by "Remove-ItemProperty”)
Set-Alias -Name rps -Value Restart-PowerShell

注意:虽然这可能与您在“w/out exiting”问题的标题中所写的不完全一样,但如果实质上您的初衷是有某种重启 PowerShell 主机命令(这在 PS 中不可用默认情况下)然后它将完成工作......

于 2017-02-04T12:09:24.420 回答
0

这是对@Bad 答案的扩展。这将处理 ISE(因为我一直使用它)。

这个想法是,如果您在 ISE 中,它将重新启动 ISE。如果您使用的是普通 PowerShell,它将重新启动普通 PowerShell。Get-PSHostProcessInfo返回有关当前 PowerShell 会话的信息,可让您确定您是否正在运行 ISE。

function Restart-PowerShell
{
    if((Get-PSHostProcessInfo).ProcessName.Contains('powershell_ise'))
    {
        Start-Process 'powershell_ise.exe'
    } else {
        Start-Process 'powershell.exe'
    }
    exit
}
于 2018-08-15T20:18:43.807 回答