2016-07-30 2 views
2

빈 사용자 이름으로 PSCredential을 만들어야합니다.빈 사용자 이름으로 PSCredential 만들기

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

위의 코드를 실행하면 예외가 발생합니다.

새로운-개체 : 예외 호출 "이"인수 (들) ".ctor는": "처리하지 인수 인수 의 값이 때문에 수"사용자 이름의 userName ". 유효하지 않습니다이의 값을 변경합니다" " 인수를 선택하고 작업을 다시 실행하십시오. "

비어있는 사용자 이름으로 PSCredential을 만들고 비밀번호 만 어떻게 만들 수 있습니까?

+2

'PSCredential' 개체를 만들 때 사용자 이름을 제공해야합니다. 사용자 이름에 대해 하나의 공백과 같은 것을 제공 할 수 있지만 '$ null'또는 빈 문자열은 유효하지 않습니다. –

+1

조금 궁금합니다. 왜 비어있는 사용자 이름으로 자격증 명이 필요합니까? – JPBlanc

답변

1

당신이 발견 한 (그리고 질문에 대한 댓글에 Ansgar Wiechers 노트로), 직접 the [System.Management.Automation.PSCredential] constructor that accepts username and password separately에 빈 이름 (빈 문자열 또는 $null)을 제공 할 수있다.

당신은 UserNamePassword 속성 (PSv3 +)와 사용자 지정 개체 ([pscustomobject] 인스턴스)를 전달하여, the constructor that accepts a [psobject] instance를 사용하여이 문제를 해결할 수 있습니다

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

참고 [0] 결과에 적용 출력 개체가 [securestring] ([System.Security.SecureString]) 인스턴스로 올바르게 인식되는 데 필요한 ConvertTo-SecureString 호출 (이 트릭은 이 아니며 당신이 중간 변수를 사용한다면, 질문에서와 같이). 왜 이것이 필요한지 정확히 알지 못합니다. 아마도 출력은 기본적으로 콜렉션으로 처리됩니다. 특별히 알고 있으면 우리에게 말해주십시오.

주의 사항는 :

  • 는 두 생성자의 형태가 같은 데이터 필드를 설정하는 것이 감안할 때, 객체 기반의 생성자와 빈 사용자 이름을 설정하는 기능은 버그 수이 향후 수정 될 수 있습니다. 의도 한 동작이 무엇인지 알 수 없습니다.

  • 결과 자격 증명 객체가 의도 한대로 작동하는지 확실하지 않습니다.
    예를 들어 $Credential.GetNetworkCredential()은 사용자 이름이없는 경우 실패합니다.

관련 문제