我正在Windows 8.1机器上编写PowerShell脚本.尝试使用New-Object cmdlet创建PSCredential对象时,出现此错误:
New-Object:找不到"PSCredential"的重载和参数count:"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
Run Code Online (Sandbox Code Playgroud)
经过一些测试后,我发现了问题所在.对于我的功能,我打算从用户那里获取用户名和密码,但如果用户决定跳过这些输入参数,也会提供默认值.
为此我通过在参数部分添加以下行来实现它
[string][ValidateNotNullOrEmpty()] $userPassword = "myPassword",
Run Code Online (Sandbox Code Playgroud)
似乎问题是我在参数中将它定义为[String]但后来试图成为SecureString,这导致了问题.
删除参数中的[String]属性解决了问题.
xen*_*rse 46
在这种情况下,您可能需要检查参数类型.在此特定示例中,输入参数被声明为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
Run Code Online (Sandbox Code Playgroud)
如果您引用安全字符串对象,也会发生这种情况:
执行这个
$secPassword = ConvertTo-SecureString "mypassword" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ("myusername", "$secPassword")
Run Code Online (Sandbox Code Playgroud)
将返回提到的错误。
然而
$secPassword = ConvertTo-SecureString "mypassword" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ("myusername", $secPassword)
Run Code Online (Sandbox Code Playgroud)
将会成功。
| 归档时间: |
|
| 查看次数: |
44998 次 |
| 最近记录: |