使用空用户名创建PSCredential

时间:2016-07-30 20:38:58

标签: powershell

我需要使用空用户名创建PSCredential。

Setting.all

当我运行上面的代码时,我得到一个例外。

  

New-Object:使用“2”参数调用“.ctor”的异常:“由于参数的值,无法处理参数   “userName”无效。更改“userName”参数的值并再次运行该操作。“

如何使用空用户名创建PSCredential,并且只有密码?

1 个答案:

答案 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()在没有用户名的情况下失败。