17

在运行诸如等远程命令Enable-PsSession时,Invoke-command我们需要为这些命令提供凭据。

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

还可以说我将用户名存储在变量中并在执行命令时使用该变量。我也想为密码执行此操作。我可以这样做吗?

例如:

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

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

命令应该如何从变量和其他机制中自动获取用户名和密码?

4

4 回答 4

27

你可以做:

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

进而:

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

请记住,密码$cred很容易以明文形式恢复!

于 2013-08-05T08:58:51.883 回答
13

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

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
于 2016-03-01T15:00:52.203 回答
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

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

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

于 2013-08-06T10:27:22.967 回答
2

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

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

这就是我所做的。

于 2021-05-04T01:11:22.543 回答