shr*_*ish 24 powershell session restart
我一直在调整我的PowerShell配置文件中的一些脚本,它已经很烦人退出PowerShell然后重新启动它所以它将加载我对我的配置文件中的脚本所做的任何更改.是否可以在不退出的情况下重新启动powershell会话?
man*_*lds 13
您可以. $profile再次获取配置文件.
@manojlds的回答是正确的,但最终可能会抛出错误.例如,如果您在配置文件中定义了新的PSDrive,则重新点源可能会导致错误.
另一种方法是首先启动powershell,然后通过键入PowerShell立即启动另一个版本.我在嵌套控制台中对我的配置文件进行了更改,退出,然后重新运行PowerShell以测试更新的配置文件.
另一件事 - 让配置文件变得缓慢而谨慎.在我看来,虽然配置文件确实需要发展,但这种演变通常应该很慢.因人而异!
您可以创建一个简单的函数并将其添加到您的$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 中不可用)默认情况下)然后它将完成工作......
这将在同一个控制台窗口中启动一个新会话,重新加载您的配置文件:
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)
当然,您将丢失上一个会话中的所有变量等。