Powershell 使用空用户名创建PSCredential

Powershell 使用空用户名创建PSCredential,powershell,Powershell,我需要创建一个用户名为空的PSCredential $Password = ConvertTo-SecureString -AsPlainText -Force -String 'a' $Credential = New-Object -TypeName PSCredential -ArgumentList '', $Password 当我运行上面的代码时,我得到一个异常 新对象:使用“2”参数调用“.ctor”时发生异常:“无法处理参数,因为参数的值 “用户名”无效。请更改“用户名”参数的值

我需要创建一个用户名为空的PSCredential

$Password = ConvertTo-SecureString -AsPlainText -Force -String 'a'
$Credential = New-Object -TypeName PSCredential -ArgumentList '', $Password
当我运行上面的代码时,我得到一个异常

新对象:使用“2”参数调用“.ctor”时发生异常:“无法处理参数,因为参数的值 “用户名”无效。请更改“用户名”参数的值,然后再次运行该操作

如何创建用户名为空且只有密码的PSCredential?

正如您所发现的(以及问题注释中的注释),您不能直接向用户提供空用户名(空字符串或
$null

您可以通过以下方法解决该问题:使用
UserName
Password
properties(PSv3+)传递自定义对象(
[pscustomobject]
实例):

注意
[0]
应用于
ConvertTo SecureString
调用的结果,这是将输出对象正确识别为
[SecureString]
[System.Security.SecureString]
)实例所必需的(如问题中所述,如果使用中间变量,则不需要此技巧)。我不太清楚为什么这是必要的;在这里,输出可能默认被视为一个集合;如果您明确知道,一定要告诉我们。

注意事项

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

  • 我不清楚生成的凭证对象是否按预期工作。
    例如,
    $Credential.GetNetworkCredential()
    在缺少用户名时失败

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

创建
PSCredential
对象时必须提供用户名。您可以为用户名提供一个空格,但
$null
或空字符串无效。我有点好奇,为什么您需要用户名为空的凭据?