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

时间:2017-01-09 12:26:05

标签: powershell credentials

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

你能否提出你的答案来解决这个问题?

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

错误讯息:

  

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

2 个答案:

答案 0 :(得分:7)

您的第一个语句使populateList(node) if(node == null) return populateList(node->left) if (node->left == null && node->right == null) pushToList(node) return populateList(node->right) 成为$secpasswd类型的变量。因此,使用第二个语句创建的[string]对象会自动转换为字符串。因为这两个陈述

SecureString

实际上与

相同
[string]$secpasswd = "something"
$secpasswd = ConvertTo-SecureString -String "something" -AsPlainText -Force

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

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

[string]

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

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

答案 1 :(得分:0)

如果为安全字符串定义了数据类型,则不会出现此错误。

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