PowerShell脚本如何检测管理员权限并使用带指定后缀的管理员账号重运行
PowerShell 自动提权重运行脚本(适配固定后缀管理员账号场景)
实现功能
- 自动检测当前PowerShell会话是否具备管理员权限
- 权限不足时自动弹出凭证输入框,默认展示带
.A后缀的管理员账号选项 - 验证通过后自动以管理员权限重运行当前脚本,无需手动右键选择管理员身份启动
完整代码
# 检测当前是否为管理员权限运行 $currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent()) $isAdmin = $currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) if (-not $isAdmin) { # 筛选本地所有带.A后缀的启用状态管理员账号,域环境可替换为Get-ADUser的对应筛选逻辑 $adminAccounts = Get-LocalUser | Where-Object { $_.Name -like "*.A" -and $_.Enabled } | Select-Object -ExpandProperty Name $defaultUser = $adminAccounts.Count -gt 0 ? $adminAccounts[0] : "" # 弹出凭证输入框 $adminCred = Get-Credential -Message "请输入带.A后缀的管理员凭证以继续运行脚本" -UserName $defaultUser if (-not $adminCred) { Write-Host "未获取到有效管理员凭证,脚本退出" exit 1 } # 以管理员权限重启当前脚本,PowerShell 5.1请将pwsh替换为powershell Start-Process pwsh -ArgumentList "-NoExit -File `"$($MyInvocation.MyCommand.Path)`"" -Credential $adminCred -Verb RunAs # 退出当前普通权限进程 exit 0 } # 下方放置你的业务脚本逻辑 Write-Host "当前已获得管理员权限,开始执行业务逻辑"
注意事项
- 若使用PowerShell 5.1及更早版本,将代码中的
pwsh替换为powershell即可 - 不需要保留重运行后的旧会话窗口的话,可以删除
-NoExit参数 - 域环境下需要筛选域内带.A后缀的管理员账号时,将
Get-LocalUser替换为对应域账号查询命令即可
内容的提问来源于stack exchange,提问作者Fluffarmy223
相关产品推荐
相关产品推荐

