2016-07-30 2 views
2

Мне нужно создать PSCredential с пустым именем пользователя.Создайте PSCredential с пустым именем пользователя

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

Когда я запускаю вышеуказанный код, я получаю исключение.

New-Object: Исключение вызова «.ctor» с „2“ аргумент (ы): «не может обработать аргумент, так как значение аргумента „имя_пользователя“. Не является действительным Измените значение в„Имя пользователя“ аргумент и снова запустить операцию. "

Как создать PSCredential с пустым именем пользователя и иметь только пароль?

+2

Вы должны указать имя пользователя при создании объекта 'PSCredential'. Вы можете предоставить что-то вроде одного пробела для имени пользователя, но «$ null» или пустая строка недействительны. –

+1

Мне немного любопытно, почему вам нужны учетные данные с пустым именем пользователя? – JPBlanc

ответ

1

Как вы обнаружили (и как Ansgar Wiechers отмечает в комментариях по этому вопросу), вы не можете напрямую предоставить пустое имя (пустую строку или $null) в the [System.Management.Automation.PSCredential] constructor that accepts username and password separately.

Вы можете обойти эту проблему с помощью 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]) (этот трюк не n если вы используете промежуточную переменную, как в вопросе). Я не совсем уверен, почему это необходимо; возможно, выход по умолчанию рассматривается как коллекция; если вы знаете конкретно, расскажите нам.

Предостережение:

  • Учитывая, что два конструктора форм устанавливают же поля данных, возможность установить пустое имя пользователя с объектом на основе конструктора может быть ошибки, которые могут быть исправлены в будущем - я не знаю, что такое предполагаемое поведение.

  • Непонятно, работает ли результирующий учетный объект в соответствии с назначением.
    Например, $Credential.GetNetworkCredential() сбой при отсутствии имени пользователя.

Смежные вопросы