将密码硬编码到PowerShell的“New-PSSession”中

22

我有一个脚本用于获取和设置给定用户在其他计算机上的Windows环境变量。是否可能为此用户硬编码密码,以便我每次运行脚本时不必输入密码?

我的脚本大致如下:

$s5 = New-PSSession -computername testauto2, testauto3 -Credential
Domain\testautouser

invoke-command -session $s5[0] -scriptblock {[Environment]::GetEnvironmentVariable("TestBrowser", "user")}

一些提示在这里:http://powershell.com/cs/blogs/tobias/archive/2010/10/22/encrypting-passwords.aspx - CB.
2个回答

29

没错 - 只要你对安全隐患(即密码在某个文件中)感到舒适,你就可以完全这样做...

下面是一个示例:

 $pw = convertto-securestring -AsPlainText -Force -String <insert pw here>
 $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "Domain\User",$pw
 $session = new-pssession -computername <computer> -credential $cred

无法工作。手动输入的相同密码可以正常使用,但以这种方式输入不会被接受。 - Brian Knoblauch
抱歉问一个愚蠢的问题,但我该如何执行变量“session”?我在终端中键入了“session”,并收到了消息“session不被识别为cmdlet名称”。 - Raul Chiarella

9

我在类似的情况下使用过这种方法。虽然它并不完美,但相比于在文件中硬编码密码,它让我更加放心。我在第一次运行时读取并存储密码,然后在之后从DPAPI加密的文件中读取。通常我会从内部网络上的共享位置运行脚本,并将加密后的密码文件存储在我的本地机器的私有文件夹中。

$user = "Domain\testautouser"
$passwdFile = "$env:USERPROFILE\myscript-$user"
if ((Test-Path $passwdFile) -eq $false) {
  $cred = new-object system.management.automation.pscredential $user,
        (read-host -assecurestring -prompt "Enter a password:")
    $cred.Password | ConvertFrom-SecureString | Set-Content $passwdFile
}
else {
  $cred = new-object system.management.automation.pscredential $user,
        (Get-Content $passwdFile | ConvertTo-SecureString)
}

2
我认为这是一个很好的补充,可以稍微缓解安全方面的担忧。 - Joe Johnston
同样不起作用。即使文件确实存在并包含密码,输入面板也总是弹出。 - Brian Knoblauch
首先需要设置一系列服务,而且你应该将密码加密到文件中并进行相应的检索。这种方法不能在默认设置中使用。 - Mike Q

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接