New-Object:找不到"PSCredential"的重载和参数计数:"2"

kat*_*van 2 powershell credentials

我希望将电子邮件发送给多个收件人,同时我也不想提示输入用户名和密码.所以我使用了下面的字符串转换,但后来我面临以下错误消息.

你能否建议你的答案来纠正这个问题?

[string] [ValidateNotNullOrEmpty()] $secpasswd = "Q$$777LV"
$secpasswd = ConvertTo-SecureString -String "Q$$777LV" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential (“test”, $secpasswd)
Run Code Online (Sandbox Code Playgroud)

错误信息:

New-Object:找不到"PSCredential"的重载和参数计数:"2"

Ans*_*ers 7

您的第一个语句$secpasswd生成类型的变量[string].因此,SecureString使用第二个语句创建的对象会自动转换为字符串.正因为如此,这两个陈述

[string]$secpasswd = "something"
$secpasswd = ConvertTo-SecureString -String "something" -AsPlainText -Force
Run Code Online (Sandbox Code Playgroud)

实际上是一样的

$secpasswd = 'System.Security.SecureString'
Run Code Online (Sandbox Code Playgroud)

由于PSCredential构造函数需要一个字符串和一个SecureString对象,而不是两个字符串,因此会抛出您观察到的错误.

要解决此问题,请不要强制变量为类型[string]:

[ValidateNotNullOrEmpty()]$secpasswd = "something"
$secpasswd = ConvertTo-SecureString -String $secpasswd -AsPlainText -Force
$mycreds = New-Object Management.Automation.PSCredential ("test", $secpasswd)
Run Code Online (Sandbox Code Playgroud)

或者为明文和安全字符串密码使用不同的变量:

[string][ValidateNotNullOrEmpty()]$passwd = "something"
$secpasswd = ConvertTo-SecureString -String $passwd -AsPlainText -Force
$mycreds = New-Object Management.Automation.PSCredential ("test", $secpasswd)
Run Code Online (Sandbox Code Playgroud)