如何在Powershell脚本中存储本地管理员用户名和密码

时间:2019-08-19 20:53:26

标签: powershell

我正在创建一个PowerShell脚本,用户可以运行该脚本来编辑注册表中的条目。我的问题是我无法弄清楚如何在同一脚本中存储本地管理员用户名和密码,以便用户可以双击该脚本并运行它,而不必手动输入用户名和密码。

这是我的代码:

with_items

$username = "testpc\administrator"

$pasword = get-content C:\Users\test1\documents\testpassword.txt $credential = new-object -typename system.management.automation.pscredential

-argumentlist $username, $password

这根本不起作用。请让我知道我在做什么错。

2 个答案:

答案 0 :(得分:2)

通常,我会要求您输入错误,但在这种情况下,我会建议您改错,只是因为您的方法不可接受。

  1. 不要存储脚本中未加密的密码。永远不会。
  2. 不要存储用脚本加密的密码,该密码应由其他人(尤其是特权较少的用户)读取。永远不会!
  3. 去,找出解决问题的其他方法。总是!

在这种情况下,我将看到两个具有给定信息的解决方案:

  1. 更改用户需要更改的注册表项的ACL
  2. 创建一个计划任务,该任务以SYSTEM身份运行。确保用户无法编辑脚本。

答案 1 :(得分:0)

实际上@vrdse是正确的。 您可以使用KEY作为参数创建脚本,并且:

  1. 使用您的用户凭据创建计划的作业,并将脚本添加为任务。

  2. 授予用户执行作业的权限,但不具有编辑或删除权限

  3. 为用户提供了计划作业的快捷方式(或运行脚本),并制作了一个操作文档,以向用户显示如何使用该参数。

我使用明文密码作为临时测试工具,以确保用户无法使用我的脚本(因此,这与您的操作完全相反)。

您可以在执行期间捕获凭证:

$cred = get-gredential -message 'This script needs a real admin user'
Enter-PSSession -Credential $cred -ComputerName 127.0.0.127

您可以建立凭据(不存储特权用户数据):

$user = 'SuchAGreatDomainName\IAmLowPrivilegedUserName'
$Password = 'SuperSecretPassEverybodyKnows'
$secpassword = ConvertTo-SecureString $Password -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($user, $secpassword)
Invoke-RestMethod -Uri $Uri -Credential $Credential