programing

단일 배열 매개 변수를 사용하는 생성자에 대해 New-Object를 호출하려면 어떻게 해야 합니까?

elecom 2023. 10. 10. 20:05
반응형

단일 배열 매개 변수를 사용하는 생성자에 대해 New-Object를 호출하려면 어떻게 해야 합니까?

PowerShell에서 사용하고 싶은 제품은New-Object싱글 argument를 부르려고요망구축자new X509Certificate2(byte[] byteArray). 문제는 파워셸의 바이트 배열로 이 작업을 수행하면

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

사용에 대한 이러한 접근 방식new-object작동해야 함:

$cert = new-object System.Security.Cryptography.X509Certificates.X509Certificate `
      -ArgumentList @(,$bytes)

장점은 PowerShell이 생성자 인수 배열을 기대하고 있다는 것입니다.하나의 인수만 있고 그것이 배열일 때 파워셸의 과부하 해결 알고리즘을 혼동할 수 있습니다.위의 코드는 바이트 배열을 그 한 요소만으로 배열함으로써 이를 해결하는 데 도움이 됩니다.

업데이트: PowerShell >= v5에서 다음과 같이 컨스트럭터를 직접 호출할 수 있습니다.

$cert = [System.Security.Cryptography.X509Certificates.X509Certificate]::new($bytes)

놀랍게도 저는 이것을 시도해 보았는데 효과가 있는 것 같습니다.

[byte[]] $certPublicBytes = something
$cert = [System.Security.Cryptography.X509Certificates.X509Certificate] $certPublicBytes
return $cert

어떤 마법으로 작동하는지 아직 모르니 설명해주시면 감사하겠습니다 :)

(참고: 위와 같이 대괄호 타입 이름을 사용하면 'Cannot value' System과 같은 다른 오류가 발생할 수 있음을 알게 되었습니다."System"을 입력하려면 "Byte[]"를 입력합니다.보안.암호학.X509 인증서.X509 인증서".오류: "요청한 개체를 찾을 수 없습니다."Keith가 추천하는 노골적인 New-Object 접근법이 더 나은 것 같습니다!)

언급URL : https://stackoverflow.com/questions/12870109/how-do-i-call-new-object-for-a-constructor-which-takes-a-single-array-parameter

반응형