导入密码-credential

Import Password -credential

我正在尝试将文件发送到电子邮件。 我找到了这段代码并且有效 但我想自动添加密码 有什么解决办法吗??


$MyEmail = "tests21@gmail.com"
$Password = "TEST2132"
$SMTP= "smtp.gmail.com"
$To = "TEST212@gmail.com"
$Subject = "LOG FILE!"
$Creds = (Get-Credential -Credential "$MyEmail") 
$attachment = "C:\TEST.txt" 
Start-Sleep 2

Send-MailMessage -To $to -From $MyEmail -Subject $Subject -Attachment $attachment -SmtpServer $SMTP -Credential $Creds -UseSsl -Port 587 -DeliveryNotificationOption never

不安全的方法

以下是从密码字符串创建凭据对象的方法。

# Some email credentials
$username = 'Username'
$password = 'Password' | ConvertTo-SecureString -AsPlainText -Force
$Creds = [PSCredential]::New($username,$password)

正如评论中指出的那样,直接在脚本中设置密码是不安全的,因为任何可以访问脚本的人都会看到密码。

秘密管理模块方法

此方法需要一些准备工作,但在我看来是最好的方法,因为密码是从秘密保险库中检索的,而不是在您的脚本中随时可用。

先决条件

模块

安装以下模块

Install-Module Microsoft.PowerShell.SecretManagement
Install-Module SecretManagement.JustinGrote.CredMan

保险库

创建一个保管库来存储电子邮件凭据,并可能在将来存储许多其他凭据。

Register-SecretVault -ModuleName SecretManagement.JustinGrote.CredMan -Name 'Default'

将凭据保存到保管库中。

$username = 'Username'
$password = 'Password' | ConvertTo-SecureString -AsPlainText -Force
$Creds = [PSCredential]::New($username, $password)
Set-Secret -Name 'SomeEmailCreds' -Secret $Creds -Vault Default

如何使用

满足每个先决条件后,您可以使用 Get-Secret 语句从本地保管库获取凭据。 Set-Secret 不应出现在您的脚本中,只有在您需要在某个时候更新凭据时才应使用它。

$Creds = Get-Secret -Vault Default -Name 'SomeEmailCreds'

备注

请注意,保险库是“每个用户”和“每台机器”,因此它应该在用户和机器上创建,运行 来自。

SecretManagement 除了 Justin Grote 的 CredsMan 之外还有其他模块,它使用各种不同的保险库,因此有 Azure 密钥保险库、1password 等的实现