Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function Restart-Host
- {
- [CmdletBinding(SupportsShouldProcess,ConfirmImpact='High')]
- Param(
- [switch]$AsAdministrator,
- [switch]$Force
- )
- $proc = Get-Process -Id $PID
- $cmdArgs = [Environment]::GetCommandLineArgs() | Select-Object -Skip 1
- $params = @{ FilePath = $proc.Path }
- if ($AsAdministrator) { $params.Verb = 'runas' }
- if ($cmdArgs) { $params.ArgumentList = $cmdArgs }
- if ($Force -or $PSCmdlet.ShouldProcess($proc.Name,"Restart the console"))
- {
- if ($host.Name -eq 'Windows PowerShell ISE Host' -and $psISE.PowerShellTabs.Files.IsSaved -contains $false)
- {
- if ($Force -or $PSCmdlet.ShouldProcess('Unsaved work detected?','Unsaved work detected. Save changes?','Confirm'))
- {
- foreach ($IseTab in $psISE.PowerShellTabs)
- {
- $IseTab.Files | ForEach-Object {
- if ($_.IsUntitled -and !$_.IsSaved)
- {
- $_.SaveAs($_.FullPath,[System.Text.Encoding]::UTF8)
- }
- elseif(!$_.IsSaved)
- {
- $_.Save()
- }
- }
- }
- }
- else
- {
- foreach ($IseTab in $psISE.PowerShellTabs)
- {
- $unsavedFiles = $IseTab.Files | Where-Object IsSaved -eq $false
- $unsavedFiles | ForEach-Object {$IseTab.Files.Remove($_,$true)}
- }
- }
- }
- Start-Process @params
- $proc.CloseMainWindow()
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement