刷新/重新启动PowerShell会话w/out退出

shr*_*ish 24 powershell session restart

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

man*_*lds 13

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

  • 术语“C:\Users\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。在 line:1 char:2 + 。<<<< $profile + CategoryInfo : ObjectNotFound: (C:\Users\nrp023...ell_profile.ps1:String) [], CommandNotFoundException + FullQualifiedErrorId : CommandNotFoundException (3认同)
  • 这不会以任何方式重置实际的会话变量、加载的模块等。 (2认同)
  • 这不会刷新会话。您定义的任何变量仍将存在于先前的命令中。 (2认同)

Tho*_*Lee 5

@manojlds的回答是正确的,但最终可能会抛出错误.例如,如果您在配置文件中定义了新的PSDrive,则重新点源可能会导致错误.

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

另一件事 - 让配置文件变得缓慢而谨慎.在我看来,虽然配置文件确实需要发展,但这种演变通常应该很慢.因人而异!


Bad*_*Bad 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
Run Code Online (Sandbox Code Playgroud)

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

  • `start powershell` 是这里的真正答案,但请注意,您将丢失窗口设置。 (4认同)

nmb*_*ell 5

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

Invoke-Command { & "powershell.exe" } -NoNewScope # PowerShell 5
Invoke-Command { & "pwsh.exe"       } -NoNewScope # PowerShell 7
Run Code Online (Sandbox Code Playgroud)

或者更长但更强大的命令,以下内容应该可以跨版本正常工作:

Get-Process -Id $PID | Select-Object -ExpandProperty Path | ForEach-Object { Invoke-Command { & "$_" } -NoNewScope }
Run Code Online (Sandbox Code Playgroud)

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