종료하지 않고 PowerShell 세션 새로 고침/다시 시작
PowerShell 프로필의 일부 스크립트를 수정했는데 powershell을 종료한 후 다시 시작하는 것이 귀찮아져서 프로필의 스크립트에 변경 사항이 로드됩니다.종료하지 않고 파워셸 세션을 다시 시작할 수 있습니까?
그냥 하면 됩니다.. $profile
프로파일을 다시 수집할 수 있습니다.
그러면 같은 콘솔 창에서 새 세션이 시작되고 프로필이 다시 로드됩니다.
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 }
물론 이전 세션의 변수 등을 모두 잃게 됩니다.
참고: 이와 같이 같은 창에서 새 세션을 생성하면 상위 프로세스가 백그라운드에서 실행됩니다.일반적으로 창이 닫히면 부모(및 다른 조상)가 종료되므로 문제가 되지 않습니다.그러나 이 문제가 우려되는 경우 프로필에 다음과 같은 내용을 추가할 수 있습니다.
$p = Get-Process -Id $PID
If ($p.Parent.Name -eq $p.Name -and !($p.MainWindowTitle))
{
Stop-Process -Id $p.Parent.Id -Force
}
@manojlds의 대답은 맞지만 결국 오류를 던질 수도 있습니다.예를 들어 프로필에 새 PSD 드라이브를 정의한 경우 다시 소싱하면 오류가 발생할 수 있습니다.
다른 접근 방식은 먼저 PowerShell을 시작한 다음 PowerShell만 입력하면 바로 내부에서 다른 버전을 시작하는 것입니다.중첩된 콘솔에서 프로필을 변경하고 종료한 다음 PowerShell을 다시 실행하여 업데이트된 프로필을 테스트합니다.
또 다른 것은 프로필 변경을 천천히 그리고 조심스럽게 하는 것입니다.제가 보기에 프로파일은 진화가 필요하지만 일반적으로 그 진화는 느려야 합니다.YMMV!!
간단한 기능을 만들어 사용자의 기능에 추가할 수 있습니다.$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 host 명령(기본적으로 PS에서는 사용할 수 없음)을 의도한 것이라면, 이 명령을 실행할 수 있습니다.
@Bad의 답변에 대한 확장 내용입니다.이제 ISE를 처리합니다(항상 사용하기 때문에).
ISE에 있으면 ISE가 재시작됩니다.일반 PowerShell에 있으면 일반 PowerShell을 다시 시작합니다.Get-PSHostProcessInfo
ISE 실행 여부를 확인할 수 있는 현재 PowerShell 세션에 대한 정보를 반환합니다.
function Restart-PowerShell
{
if((Get-PSHostProcessInfo).ProcessName.Contains('powershell_ise'))
{
Start-Process 'powershell_ise.exe'
} else {
Start-Process 'powershell.exe'
}
exit
}
profile.ps1을 .심플타입reload
다시 로드/재시작하기만 하면 됩니다.
function reload-Console {
clear
Write-Host "Reload Console"
Get-Process -Id $PID | Select-Object -ExpandProperty Path | ForEach-Object { Invoke-Command { & "$_" } -NoNewScope }
}
New-Alias reload reload-Console
manojlds의 답변(현재 최고 등급의 답변)은 프로필이 무엇을 하는지에 따라 문제가 있을 수 있습니다(본질적으로 깨끗한 슬레이트에 따라 시작하는 것이 결정되는 경우).하지만 가장 큰 문제는 앨리어싱이 가능한 기능에 넣기가 쉽지 않다는 것이라고 생각합니다.
그래서, 저는 nmbell의 답변과 비슷한 것을 선호하지만, 훨씬 간단합니다.
function Reset-Session {
# store this shell's parent PID for later use
$parentPID = $PID
# get the the path of this shell's executable
$thisExePath = (Get-Process -Id $PID).Path
# start a new shell, same window
Start-Process $thisExePath -NoNewWindow
# stop this shell if it's still alive
Stop-Process -Id $parentPID -Force
}
# optional
Set-Alias -Name reset -Value Reset-Session
리프레시네브
언급URL : https://stackoverflow.com/questions/11546069/refreshing-restarting-powershell-session-w-out-exiting
'sourcecode' 카테고리의 다른 글
ipdb를 실행하는 방법.set_pytest 테스트를 실행하는 동안 마음대로 trace() (0) | 2023.10.21 |
---|---|
휘발성 구조의 부재를 분리하기 위한 쓰기 순서는 보존이 보장됩니까? (0) | 2023.10.21 |
mariadb - 테이블 XXX가 엔진에 없습니다. (0) | 2023.10.21 |
인쇄 미리 보기에 배경색이 표시되지 않음 (0) | 2023.10.21 |
wc_get_products()의 결과를 json 인코딩할 수 없습니다. (0) | 2023.10.21 |