programing

New-Object : "PSCredential" 및 인수 개수 "2"에 대한 오버로드를 찾을 수 없습니다.

itmemos 2023. 10. 29. 19:03
반응형

New-Object : "PSCredential" 및 인수 개수 "2"에 대한 오버로드를 찾을 수 없습니다.

저는 윈도우 8.1 기계에 파워쉘 스크립트를 쓰고 있습니다.New-Object cmdlet을 사용하여 PSC redential 개체를 생성하려고 하면 다음과 같은 오류가 나타납니다.

새 개체 : "PSCredential" 및 인수 개수 "2"에 대한 오버로드를 찾을 수 없습니다.

저는 다른 윈도우 8.1 컴퓨터에서 똑같은 스크립트를 실행해도 괜찮습니다.또한 두 시스템 모두 동일한 버전의 PowerShell 4.0을 실행하고 있음을 확인했습니다.

두 기계가 다 똑같습니다.NET Framework 4.0 설치.

왜 이런 일이 일어나고 있는지 그리고 이 문제를 어떻게 해결할 수 있는지 아세요?

$userPassword = ConvertTo-SecureString -String "MyPassword" -AsPlainText -Force
$userCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "myUserName", $userPassword

몇 번 더 테스트를 해본 결과 문제를 발견했습니다.제 기능을 위해 사용자로부터 사용자 이름과 비밀번호를 가져오되, 사용자가 입력 파라미터를 생략하기로 결정할 경우 기본값을 제공하려고 했습니다.

이를 위해 parameters 섹션에 다음 행을 추가하여 달성하였습니다.

[string][ValidateNotNullOrEmpty()] $userPassword = "myPassword",

파라미터에서 [String]으로 정의했는데 나중에 SecureString이 되려고 해서 문제가 생긴 것 같습니다.

내 파라미터에서 [String] 속성을 제거하면 문제가 해결되었습니다.

이와 같은 상황에서는 파라미터 유형을 확인해 보는 것이 좋습니다.이 예에서는 입력 매개 변수가 String으로 선언되었습니다.그러나 ConvertTo-SecureString의 결과는 SecureString을 반환합니다.

이런 상황에서는 오류 메시지가 조금 오해의 소지가 있습니다.문제는 인수가 2개인 컨스트럭터가 없어서가 아니라 a로 선언되었으나 나중에 로 변경되었기 때문입니다.

[string][ValidateNotNullOrEmpty()] $userPassword = "myPassword",

$userPassword = ConvertTo-SecureString -String $userPassword -AsPlainText -Force
$userCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "myUserName", $userPassword

보안 문자열 개체를 인용하는 경우에도 이러한 상황이 발생합니다.

실행 중

$secPassword = ConvertTo-SecureString "mypassword" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ("myusername", "$secPassword")

는 언급된 오류를 반환합니다.

반면에.

$secPassword = ConvertTo-SecureString "mypassword" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ("myusername", $secPassword)

성공할 것입니다.

또한 명령어(또는 스크립트)를 실행 중인 사용자의 현재 자격 증명이 아닌 특정 자격 증명이 필요하지 않을 경우 원라이너로 이 모든 것을 건너뛸 수 있습니다.

$Cred = Get-Credential

그러면 사용자 이름과 비밀번호를 입력하라는 팝업 메시지가 나타납니다.마찬가지로 명령줄에서 사용할 수 있는 변수에 자격 증명을 캡처했거나 스크립트에서 이를 사용하여 사용자에게 자격 증명을 입력하라는 메시지를 표시할 수 있습니다.

언급URL : https://stackoverflow.com/questions/22970505/new-object-cannot-find-an-overload-for-pscredential-and-the-argument-count

반응형