我正在Windows8.1机器上编写一个PowerShell脚本。在尝试使用New-Object cmdlet创建PSCredential对象时,出现以下错误:
New-Object :找不到"PSCredential“和参数计数"2”的重载。
在另一台Windows8.1机器上运行完全相同的脚本对我来说很好。我还验证了这两台计算机运行的是相同版本的PowerShell 4.0
这两台机器都安装了相同的.NET框架4.0。
你知道为什么会发生这种情况吗?我该如何解决这个问题?
$userPassword = ConvertTo-SecureString -String "MyPassword" -AsPlainText -Force
$userCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "myUserName", $userPassword经过进一步的测试,我发现了问题所在。对于我的函数,我打算从用户那里获取用户名和密码,但如果用户决定跳过这些输入参数,还会提供默认值。
为此,我在parameters部分添加了以下代码行
[string][ValidateNotNullOrEmpty()] $userPassword = "myPassword",似乎问题在于,我在参数中将其定义为字符串,但后来尝试将其定义为SecureString,这导致了问题。
删除参数中的字符串属性解决了这个问题。
发布于 2014-04-11 14:24:40
在这种情况下,您可能需要检查参数类型。在这个特定的示例中,输入参数被声明为一个字符串。但是,来自ConvertTo-SecureString的结果返回一个SecureString。
在这种情况下,错误消息有点误导人。问题不是因为没有带有2个参数的构造函数,而是因为$userPassword SecureString.声明为 String ,但后来更改为
[string][ValidateNotNullOrEmpty()] $userPassword = "myPassword",
$userPassword = ConvertTo-SecureString -String $userPassword -AsPlainText -Force
$userCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "myUserName", $userPassword发布于 2015-04-25 07:30:03
还要记住,如果除了运行命令(或脚本)的人的当前凭据之外,您不需要特定的凭据,则可以使用一行代码跳过所有这些操作:
$Cred = Get-Credential弹出窗口将提示您输入用户名和密码。就像这样,您已经在一个变量中捕获了您的凭据,您可以在命令行中使用该变量,也可以在脚本中使用它来提示用户输入他们的凭据。
https://stackoverflow.com/questions/22970505
复制相似问题