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