web-dev-qa-db-fra.com

Actualisation / redémarrage de la session PowerShell sans quitter

J'ai peaufiné certains des scripts de mon profil PowerShell et il est ennuyeux de quitter PowerShell puis de le redémarrer pour qu'il charge toutes les modifications que j'ai apportées aux scripts de mon profil. Est-il possible de redémarrer la session PowerShell sans quitter?

25
shreddish

Vous pouvez simplement faire . $profile pour générer à nouveau le profil.

13
manojlds

La réponse de @manojlds est juste, mais cela pourrait finir par générer des erreurs. Par exemple, si vous avez défini un nouveau PSDrive dans votre profil, le redistribution peut entraîner des erreurs.

Une autre approche consiste à démarrer d'abord PowerShell, puis à démarrer immédiatement une autre version à l'intérieur en tapant simplement PowerShell. J'apporte les modifications à mon profil dans la console imbriquée, quitte, puis réexécute PowerShell pour tester le profil mis à jour.

Une autre chose - faites des changements de profil lentement et soigneusement. À mon avis, même si les profils doivent évoluer, cette évolution devrait généralement être lente. YMMV !!

5
Thomas Lee

Vous pouvez créer une fonction simple et l'ajouter à votre $profile (ou créez un module puis importez-le dans '$ profile'), par exemple:

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

Remarque: Bien que ce ne soit pas exactement ce que vous avez écrit dans le titre de votre question "sans quitter", mais si, en substance, votre intention initiale était d'avoir une sorte de redémarrage de la commande Host PowerShell (qui n'est pas disponible dans PS par défaut) alors il fera le travail ...

4
Bad

Cela va démarrer une nouvelle session, en rechargeant votre profil, dans la même fenêtre de console:

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

Vous perdrez bien sûr toutes vos variables, etc. de la session précédente.

0
nimbell

Voici une extension de la réponse de @ Bad. Cela va maintenant gérer ISE (car je l'utilise tout le temps).

L'idée est que si vous êtes dans ISE, il redémarrera ISE. Si vous êtes dans PowerShell ordinaire, il redémarrera PowerShell ordinaire. Get-PSHostProcessInfo renvoie des informations sur la session PowerShell en cours qui vous permettent de déterminer si vous exécutez ISE ou non.

function Restart-PowerShell
{
    if((Get-PSHostProcessInfo).ProcessName.Contains('powershell_ise'))
    {
        Start-Process 'powershell_ise.exe'
    } else {
        Start-Process 'powershell.exe'
    }
    exit
}
0
Kolob Canyon