如何在脚本包含重启新实例时退出shell?

How to exit shell when the script contains restarting a new instance?

在脚本的开头,我添加了一段代码以确保 shell run with full admin privileges:

# Running with full admin privileges
param([switch]$Elevated)

function Test-Admin {
    $currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
    $currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
}

if ((Test-Admin) -eq $false)  {
    if ($elevated) {
        # tried to elevate, did not work, aborting
    } else {
        Start-Process pwsh -Verb RunAs -ArgumentList ('-noprofile -noexit -file "{0}" -elevated' -f ($myinvocation.MyCommand.Definition))
    }
    exit
}

# Other stuff below...

之后是普通脚本(Other stuff below 部分)。问题是,我想在脚本完成后自动关闭 shell window。在我添加完整权限代码之前,将 exit 放在脚本底部可以正常工作,但现在不行了。我不明白为什么,因为本节中的其他所有内容都可以正常工作。

通常脚本会在结束时自动退出。 尝试从参数列表中省略 -noexit 参数并删除脚本底部的 exit。 对我来说,用 -noexit 调用脚本并将 exit 放在它的末尾是没有意义的。没有这些,所有这些都会自动工作。

如果你想检查脚本编写过程中发生了什么,你可以把例如。最后是一个 timeout /t 90 命令,因此您有 90 秒的时间在自动关闭之前检查输出。