Powershell Remoting凭证

时间:2013-08-05 08:11:53

标签: powershell powershell-v2.0

在运行Enable-PsSessionInvoke-command等远程处理命令时,我们需要提供这些命令的凭据。

我不希望每次执行这些命令时都提供凭据。

还可以说我将用户名存储在变量&在执行命令时使用变量。我也想为密码这样做。我能这样做吗?

例如:

Invoke-Command -ComputerName mycomputer -ScriptBlock { Get-ChildItem C:\ } -credential  mydomain\administrator

所以这里我每次都在执行这些命令时提供密码。

命令应该如何使用用户名&密码自动从变量&其他一些机制?

4 个答案:

答案 0 :(得分:19)

你可以这样做:

$cred = get-credential #fill you credential in the pop-up window

然后:

Invoke-Command -ComputerName mycomputer -ScriptBlock { Get-ChildItem C:\ } -credential $cred

请记住,$cred中的密码可以用明文轻松恢复!

答案 1 :(得分:6)

加密一切。创建一个对象,将解密的信息作为密码。像这样使用它:

read-host -assecurestring | convertfrom-securestring | out-file C:\localdrivespace\username-password-encrypted.txt
$username = "domain\username"
$password = cat C:\localdrivespace\username-password-encrypted.txt | convertto-securestring
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $password

答案 2 :(得分:4)

如果没有明确指定,则Powershell将默认为运行powershell会话的用户的凭据。

因此,如果您在远程计算机上以具有管理权限的用户身份运行Powershell,则在运行命令时不必输入凭据。

您可以做的是,您可以使用存储的服务帐户凭据创建计划任务,并允许用户(或仅自己)访问以运行任务。

http://blogs.technet.com/b/heyscriptingguy/archive/2011/01/12/use-scheduled-tasks-to-run-powershell-commands-on-windows.aspx

或者您可以在Windows凭据管理器中存储凭据,这意味着它们是使用Windows用户加密的。

https://gist.github.com/toburger/2947424

但是,凭借凭据管理器解决方案,任何能够在您的上下文中运行脚本的用户都能够以明文提取密码。

但这不是问题,如果您只是自己使用它,或者每个运行脚本的管理员都是从他自己的用户上下文中这样做的。

答案 3 :(得分:0)

任何需要密码的自动化脚本都是有缺陷的。其他答案中的评论表明反转安全字符串是多么容易。

  • 创建凭证变量:$cred = get-credential mydomain\me
  • 将凭据存储在 xml 导出文件中:$cred | export-clixml credfile.xml
  • 隐藏文件;添加隐藏属性等
  • 在需要时加载凭据:$cred=import-xmlcli \hidden\credfile.xml
  • 执行需要凭据的命令:enter-pssession -computername server -credential $cred

这就是我所做的。