New-Object:无法找到" PSCredential"和参数计数:" 2"

时间:2014-04-09 18:02:34

标签: .net powershell

我正在Windows 8.1计算机上编写PowerShell脚本。尝试使用New-Object cmdlet创建PSCredential对象时,出现此错误:

New-Object:无法找到" PSCredential"和参数计数:" 2"。

在另一台Windows 8.1计算机上运行完全相同的脚本对我来说很好。我还验证了两台机器都运行相同版本的PowerShell 4.0

两台计算机都安装了相同的.NET Framework 4.0。

知道为什么会这样,以及如何解决这个问题?

$userPassword = ConvertTo-SecureString -String "MyPassword" -AsPlainText -Force
$userCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "myUserName", $userPassword

经过一些测试,我发现了问题。对于我的功能,我打算从用户那里获取用户名和密码,但如果用户决定跳过这些输入参数,也会提供默认值。

为此我通过在参数部分

中添加以下行来实现它
[string][ValidateNotNullOrEmpty()] $userPassword = "myPassword",

似乎问题是我在参数中将它定义为[String],但后来尝试成为SecureString,这导致了问题。

删除参数中的[String]属性解决了问题。

2 个答案:

答案 0 :(得分:33)

在这种情况下,您可能需要检查参数类型。在此特定示例中,输入参数被声明为String。但是,ConvertTo-SecureString的结果返回一个SecureString。

在这种情况下,错误消息有点误导。问题不在于因为没有带有2个参数的构造函数,而是因为$ userPassword被声明为String但后来被更改为SecureString。

[string][ValidateNotNullOrEmpty()] $userPassword = "myPassword",

$userPassword = ConvertTo-SecureString -String $userPassword -AsPlainText -Force
$userCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "myUserName", $userPassword

答案 1 :(得分:0)

另外请记住,如果您不需要运行命令(或脚本)的人的当前凭据以外的特定凭据,则可以使用单行删除所有这些凭据:

$Cred = Get-Credential

然后弹出窗口会提示您输入用户名和密码。就像那样,您已经在可以在命令行中使用的变量中捕获了凭据,或者您可以在脚本中使用它来提示用户输入凭据。