【发布时间】:2012-07-17 18:22:40
【问题描述】:
我一直在调整我的 PowerShell 配置文件中的一些脚本,退出 powershell 然后重新启动它很烦人,因此它会加载我对我的配置文件中的脚本所做的任何更改。是否可以在不退出的情况下重新启动 powershell 会话?
【问题讨论】:
-
这只适用于ISE
标签: session powershell restart
我一直在调整我的 PowerShell 配置文件中的一些脚本,退出 powershell 然后重新启动它很烦人,因此它会加载我对我的配置文件中的脚本所做的任何更改。是否可以在不退出的情况下重新启动 powershell 会话?
【问题讨论】:
标签: session powershell restart
您可以通过 . $profile 再次获取配置文件。
【讨论】:
@manojlds 的回答是正确的,但最终可能会引发错误。例如,如果您在个人资料中定义了一个新的 PSDrive,那么重新点源它可能会导致错误。
另一种方法是首先启动 powershell,然后通过键入 PowerShell 立即启动另一个版本。我在嵌套控制台中对我的配置文件进行了更改,退出,然后重新运行 PowerShell 以测试更新的配置文件。
另一件事 - 缓慢而谨慎地更改个人资料。在我看来,虽然配置文件确实需要发展,但这种发展通常应该是缓慢的。 YMMV!!
【讨论】:
powershell(<yourcommandhere>)
这将在同一个控制台窗口中启动一个新会话,重新加载您的个人资料:
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 中可用)然后它将完成工作......
【讨论】:
start powershell 是真正的答案,但请注意您将丢失窗口设置。
这是对@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
}
【讨论】:
if ((Get-Process -id $pid).ProcessName.contains("powershell_ise"))...,或者有点不同:if ($host.Name -imatch "ise")...