web-dev-qa-db-ja.com

終了せずにPowerShellセッションを更新/再起動する

PowerShellプロファイルの一部のスクリプトを微調整していて、Powershellを終了して再起動するのが面倒なので、プロファイル内のスクリプトに加えた変更をロードします。終了せずにPowerShellセッションを再起動することは可能ですか?

25
shreddish

あなたはただ行うことができます. $profileは、プロファイルを再度ソースします。

13
manojlds

@manojldsの答えは正しいですが、エラーがスローされる可能性があります。たとえば、プロファイルに新しいPSDriveを定義した場合、それを再ドットソーシングするとエラーが発生する可能性があります。

別のアプローチは、最初にPowerShellを起動し、次にPowerShellと入力するだけですぐに別のバージョンを起動することです。ネストされたコンソールでプロファイルを変更し、終了してからPowerShellを再実行して、更新されたプロファイルをテストします。

別のこと-プロファイルの変更はゆっくりと慎重に行ってください。私の考えでは、プロファイルは進化する必要がありますが、その進化は通常遅いはずです。 YMMV !!

5
Thomas Lee

簡単な関数を作成して$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

注:これは、質問のタイトルに「終了しない」と書いたものとは正確には異なる場合がありますが、実質的に、元々の目的は、何らかの種類のPowerShellホストの再起動コマンド(PSでは使用できない)にすることでした。デフォルトでは)それから仕事をします...

4
Bad

これにより、同じコンソールウィンドウで新しいセッションが開始され、プロファイルがリロードされます。

Invoke-Command { & "powershell.exe" } -NoNewScope

もちろん、前のセッションからすべての変数などが失われます。

0
nimbell

これが@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
}
0
Kolob Canyon