我正在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]属性解决了问题。
答案 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
然后弹出窗口会提示您输入用户名和密码。就像那样,您已经在可以在命令行中使用的变量中捕获了凭据,或者您可以在脚本中使用它来提示用户输入凭据。