2012-12-21 48 views
0

所以基本上我想要写一个PowerShell脚本将出口价值为Windows服务器备份备份日志的最后1天,格式化信息成一个可爱的小桌子,然后SMTP发送它到客户本地Exchange外部的外部位置。我有一个可用于此目的的智能主机,以及凭证等。我如何避免保存用户名和密码在PowerShell脚本

但我不想以纯文本形式在Powershell中存储UN和密码,或让脚本以纯文本形式运行凭据。

有没有办法解决这个问题?

干杯!

+0

你打算如何运行它?手动,作为计划任务?有了手册,你可以要求输入(并使用'-assecurestring'来“隐藏”密码输入)。使用任务计划程序,您可以分配凭据来运行作业/任务,因此只需在配置时输入您的帐户信息即可。考虑创建一个非个人帐户,对这样的脚本拥有有限权限。 –

+3

请参阅此SO问题的答案:http://stackoverflow.com/questions/13842611/how-to-pass-credentials-to-rename-command/13844113#13844113 –

回答

0

我设法通过采取密码作为安全字符串,并将其保存,作为一个“加密的标准字符串”到一个文件名为类似避开类似的问题“帐户用户 .pwd”,其中帐户是与密码关联的帐户的名称,并且用户是生成安全字符串的用户(只有该用户才能够解密该文件)。

这非常类似于@Keith使用,如果你按照上面的问题本身在他的评论的链接方式。下面的方法更容易遵循,因为它不直接与[System.Runtime.InteropServices.Marshal]类相关。

从文件的内容转换的密码后面是更多地参与,但在这里是通过工艺步骤的例子:

# Create credential object by prompting user for data 
$Credential = Get-Credential 

# Encrypt the password to disk 
$Credential.Password | ConvertFrom-SecureString | Out-File Account.User.pwd 

# Now to read it back again... 
$SecureString = Get-Content Account.User.pwd | ConvertTo-SecureString 

# Create credential object programmatically 
$NewCred = New-Object System.Management.Automation.PSCredential("Account",$SecureString) 

# Reveal the password! 
$NewCred.GetNetworkCredential().Password 

思考这个办法:

  1. 抵制诱惑在最后一步将密码转储到变量中,以防止其在内存中以明文方式悬停(直到变量被丢弃)。每次从PSCredential进行转换都不需要花费太多打字费用。
  2. 只有生成该文件的用户才能读取它;如果多个用户需要访问共享帐户的密码,则每个用户都必须生成这样的文件(因此建议使用文件命名)。
  3. 这不需要仅限于密码。您想要加密到磁盘的任何字符串都可以用作原始凭证对象中的“密码”。数据库连接字符串,尤指那些使用用户名和密码的人,想起​​...
  4. 使用文件系统安全性/ ACL将不需要的人员从pwd文件中删除。
  5. 使用密码在磁盘上创建文件,即使它是一个加密的字符串,可能不符合人们的喜好。短期使用第三方密码管理系统,这是使用文件系统的安全性有明确的文本文件,一个明显的改善。你知道发生了...

的更多信息:

相关问题