我需要使用空用户名创建PSCredential。
Setting.all
当我运行上面的代码时,我得到一个例外。
New-Object:使用“2”参数调用“.ctor”的异常:“由于参数的值,无法处理参数 “userName”无效。更改“userName”参数的值并再次运行该操作。“
如何使用空用户名创建PSCredential,并且只有密码?
答案 0 :(得分:1)
正如您所发现的那样(以及对该问题的评论中的Ansgar Wiechers注释),您无法直接向the [System.Management.Automation.PSCredential]
constructor that accepts username and password separately提供空用户名(空字符串或$null
)。< / p>
您可以使用the constructor that accepts a [psobject]
instance通过传递带有[pscustomobject]
和UserName
属性的自定义对象(Password
实例)来解决该问题(PSv3 +):
$Credential = New-Object PSCredential -ArgumentList ([pscustomobject] @{
UserName = '';
Password = (ConvertTo-SecureString -AsPlainText -Force -String 'a')[0]
})
请注意[0]
应用于ConvertTo-SecureString
调用的结果,这是将输出对象正确识别为[securestring]
([System.Security.SecureString]
)实例所必需的(此技巧是如果使用中间变量,则需要 not ,如问题所示。我不确定为什么这是必要的;也许输出默认被视为集合;如果您具体了解,请告诉我们
功能
<强>注意事项强>:
鉴于两个构造函数表单设置了相同的数据字段,使用基于对象的构造函数设置空用户名的能力可能是 bug 将来可能会得到修复 - 我不知道预期的行为是什么。
我不清楚生成的凭据对象是否按预期工作
例如,$Credential.GetNetworkCredential()
在没有用户名的情况下失败。