You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell 7中触发UAC并捕获输入密码为变量用于计划任务脚本

实现UAC级别的密码输入捕获并用于计划任务注册

要实现弹出类似UAC风格的密码输入对话框并捕获密码到$password变量,你可以结合系统凭据对话框和权限提升检测来完成,具体步骤如下:

1. 检测并提升脚本权限(触发UAC提示)

如果当前脚本未以管理员身份运行,先触发UAC权限提升提示,确保后续操作具备足够权限:

# 检查是否具备管理员权限
if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
    # 以管理员身份重新启动脚本
    $startInfo = New-Object System.Diagnostics.ProcessStartInfo "PowerShell.exe"
    $startInfo.Arguments = "-NoProfile -ExecutionPolicy Bypass -File `"$($MyInvocation.MyCommand.Path)`""
    $startInfo.Verb = "runas"
    [System.Diagnostics.Process]::Start($startInfo) | Out-Null
    exit
}

2. 弹出密码输入对话框并捕获密码

使用Get-Credential弹出系统原生的凭据输入框(视觉风格与UAC一致,安全可靠),并提取明文密码到$password变量:

# 弹出凭据输入对话框,默认用户为Admin
$credential = Get-Credential -UserName "Admin" -Message "请输入管理员密码以创建计划任务"

# 将SecureString类型的密码转换为明文(Register-ScheduledTask需要明文参数)
$password = [System.Net.NetworkCredential]::new("", $credential.Password).Password

3. 整合原有计划任务脚本

将捕获到的$password变量代入你的原有脚本:

$action = New-ScheduledTaskAction -Execute "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -Argument '-file "File.ps1"'
$trigger = New-ScheduledTaskTrigger -AtStartup
Register-ScheduledTask -Action $action -Trigger $trigger -TaskPath "Tasks" -TaskName "Name" -Description "Description" -User $credential.UserName -Password $password -RunLevel Highest

注意事项

  • Get-Credential的对话框是系统级别的安全对话框,密码不会被脚本以外的程序捕获,安全性有保障。
  • 转换明文密码是因为Register-ScheduledTask的-Password参数仅接受明文格式,完成任务注册后建议立即清空$password变量:$password = $null

内容的提问来源于stack exchange,提问作者user20682592

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 18:45:33