2013-08-05 100 views
8

在运行像Enable-PsSession远程调用命令,Invoke-command等,我们需要提供这些命令的凭据。PowerShell远程与凭证

我不想在执行这些命令时每次都提供证书。

而且可以说我在执行命令中使用的变量存储在变量&的用户名。我也想为密码做这个。我可以这样做吗?

如:

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

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

如何从命令&自动获取用户名密码&其他一些机制?

回答

13

你可以这样做:

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

然后:

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

请记住,在$cred密码是明文轻松恢复!

2

如果没有明确指定,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

加密所有内容。创建一个调用解密信息的对象作为密码。使用它这样的:

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