2

所以基本上我想编写一个 Powershell 脚本,它将为 Windows Server Backup 导出最近 1 天的备份日志,将信息格式化为一个漂亮的小表格,然后 SMTP 将其发送到客户本地 Exchange 之外的外部位置。我有一个可以用于此目的的智能主机,以及凭据等。

但我不想将 UN 和 Password 以纯文本形式存储在 Powershell 中,或者让脚本使用纯文本形式的凭据运行。

有没有解决的办法?

干杯!

4

1 回答 1

3

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

如果您按照他对上述问题本身的评论中的链接,这与@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. 在磁盘上有一个带有密码的文件,即使它是一个加密的字符串,也可能不符合人们的喜好。没有使用第三方密码管理系统,这是对使用带有明文文件的文件系统安全性的明显改进。你知道它会发生...

更多信息:

于 2016-01-23T23:04:09.113 回答