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?
Vous pouvez simplement faire . $profile
pour générer à nouveau le profil.
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 !!
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 ...
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.
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
}