如何在PowerShell 7中提示UAC并将输入的密码保存为变量?

ztmd8pv5  于 2023-01-13  发布在  Shell
关注(0)|答案(1)|浏览(118)

我有一个简单的脚本来创建一个计划任务,如下所示:

$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 Admin -Password $password -RunLevel Highest

如何提示UAC并捕获用户在UAC提示符中输入的密码作为$password变量以在脚本中使用?

elcex8rz

elcex8rz1#

  • 使用Get-Credential请求目标用户的凭据,这将返回一个[pscredential]示例。
  • 然后,您可以在该对象上调用.GetNetworkCredential().Password,以获取存储在该[pscredential]对象中的密码的 * 纯文本 * 表示形式。
  • 需要说明的是,出于安全原因,* 通常 * 应避免这种情况;但是,Register-ScheduledTask要求传递纯文本密码。
    • 验证 * 凭据是否(a)* 原则上 * 有效 (即用户名/密码组合正确) 以及 *(b)是否能够运行 * 提升 * 需要额外的工作。
  • (a)可以通过this MIT-licensed Gist中的Test-WinCredential辅助函数实现
  • 假设您已经查看了链接的源代码以确保其安全,您可以直接下载并在当前会话中定义它,如下所示(有关如何在未来会话中使用它的说明将打印出来):
irm https://gist.github.com/mklement0/83e8e6a2b39ecec7b0a14a8e631769ce/raw/Test-WinCredential.ps1 | iex
  • (b)可以通过使用Get-LocalGroupMember检查指定的凭据是否引用本地Administrators组中的用户来实现。我 * 认为 * 这意味着具有使用提升运行的权限-如果我错了,请告诉我。

注:

  • 我只在本地非域环境中测试了以下内容。
  • 域环境可能需要调整
# Prompt for an administrator's credentials and verify that they are valid.
do {
    $cred = Get-Credential -Message 'Please specify an administrator''s credentials: '
    if (-not $cred) { Write-Warning 'Aborted by user request.'; exit 2 }
    if (-not (Test-WinCredential $cred)) {
        Write-Warning "The specified username-password combination isn't valid. Please try again."
    }
    elseif (-not (Get-LocalGroupMember -ErrorAction Ignore Administrators $cred.UserName)) {
        Write-Warning "User $($cred.UserName) is not a member of the local Administrators group. Please try again."
    } else {
        break # OK
    }
} while ($true)

# $cred.UserName now contains the username.
# Obtain the password as plain text.
# Note: This should generally be avoided.
$plainTextPassword = $cred.GetNetworkCredential().Password

相关问题