在运行Enable-PsSession
,Invoke-command
等远程处理命令时,我们需要提供这些命令的凭据。
我不希望每次执行这些命令时都提供凭据。
还可以说我将用户名存储在变量&在执行命令时使用变量。我也想为密码这样做。我能这样做吗?
例如:
Invoke-Command -ComputerName mycomputer -ScriptBlock { Get-ChildItem C:\ } -credential mydomain\administrator
所以这里我每次都在执行这些命令时提供密码。
命令应该如何使用用户名&密码自动从变量&其他一些机制?
答案 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,则在运行命令时不必输入凭据。
您可以做的是,您可以使用存储的服务帐户凭据创建计划任务,并允许用户(或仅自己)访问以运行任务。
或者您可以在Windows凭据管理器中存储凭据,这意味着它们是使用Windows用户加密的。
https://gist.github.com/toburger/2947424
但是,凭借凭据管理器解决方案,任何能够在您的上下文中运行脚本的用户都能够以明文提取密码。
但这不是问题,如果您只是自己使用它,或者每个运行脚本的管理员都是从他自己的用户上下文中这样做的。
答案 3 :(得分:0)
任何需要密码的自动化脚本都是有缺陷的。其他答案中的评论表明反转安全字符串是多么容易。
$cred = get-credential mydomain\me
$cred | export-clixml credfile.xml
$cred=import-xmlcli \hidden\credfile.xml
enter-pssession -computername server -credential $cred
这就是我所做的。