【问题标题】:Create a PSCredential with empty username使用空用户名创建 PSCredential
【发布时间】:2016-07-30 20:38:58
【问题描述】:

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

$Password = ConvertTo-SecureString -AsPlainText -Force -String 'a'
$Credential = New-Object -TypeName PSCredential -ArgumentList '', $Password

当我运行上面的代码时,我得到了一个异常。

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

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

【问题讨论】:

  • 创建PSCredential 对象时必须提供用户名。您可以为用户名提供一个空格,但$null 或空字符串无效。
  • 我有点好奇,为什么,你需要一个空用户名的凭证?
  • 它不会工作。 pscredential 需要用户名和密码。用户名不能为空

标签: powershell


【解决方案1】:

正如您所发现的(正如Ansgar Wiechers 在对该问题的评论中指出的那样),您不能直接向the [System.Management.Automation.PSCredential] constructor that accepts username and password separately 提供空用户名(空字符串或$null)。

您可以通过使用the constructor that accepts a [psobject] instance 来解决这个问题,方法是传递带有UserNamePassword 属性的自定义对象[pscustomobject] 实例)和Password 属性(PSv3+):

$Credential = New-Object PSCredential -ArgumentList ([pscustomobject] @{ 
  UserName = '';
  Password = (ConvertTo-SecureString -AsPlainText -Force -String 'a')[0]
})

注意[0] 应用于ConvertTo-SecureString 调用的结果,这是正确识别输出对象为[securestring] ([System.Security.SecureString]) 实例所必需的(这个技巧不是如果您使用中间变量,则需要,如问题中所示)。我不完全确定为什么这是必要的;也许默认情况下输出在这里被视为 collection;如果您具体知道,请告诉我们。

注意事项

  • 鉴于两个构造函数表单设置相同数据字段,使用基于对象的构造函数设置空用户名的能力可能是一个错误将来可能会修复 - 我不知道预期的行为是什么。

  • 我不清楚生成的凭据对象是否按预期工作。
    例如,$Credential.GetNetworkCredential() 在没有用户名的情况下失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-29
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 2013-08-15
    • 1970-01-01
    相关资源
    最近更新 更多