如何在脚本包含重启新实例时退出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 秒的时间在自动关闭之前检查输出。
在脚本的开头,我添加了一段代码以确保 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 秒的时间在自动关闭之前检查输出。