PowerShell 스크립트에 서명할 수 없습니다.

PowerShell 스크립트에 서명할 수 없습니다.

PowerShell에 로그인하는 스크립트를 가져올 수 없는 것 같습니다. 내 컴퓨터에 유효한 코드 서명 인증서가 설치되어 있고 다음 명령을 실행합니다. 어떤 제안이 있으십니까?

PS C:\Users\u00\bin> $cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
PS C:\Users\u00\bin> $cert | fl


Subject      : [email protected], CN=contoso , OU=Operations, O=contoso,
               L=Mayberry, S=Florida, C=US
Issuer       : CN=contoso Intermediate CA1, DC=contoso, DC=com
Thumbprint   : XXXXXXXXXXXXXXXXXXXXX
FriendlyName : contoso 
NotBefore    : 7/20/2010 12:58:55 AM
NotAfter     : 7/20/2011 12:58:55 AM
Extensions   : {System.Security.Cryptography.Oid, System.Security.Cryptography.Oid, System.Security.Cryptography.Oi
               ystem.Security.Cryptography.Oid...}



PS C:\Users\u00\bin> Set-AuthenticodeSignature .\testsign.ps1 -Certificate $cert


    Directory: C:\Users\u00\bin


SignerCertificate                         Status                                 Path
-----------------                         ------                                 ----
                                          UnknownError                           testsign.ps1


PS C:\Users\u00\bin> Get-AuthenticodeSignature .\testsign.ps1

    Directory: C:\Users\u00\bin


SignerCertificate                         Status                                 Path
-----------------                         ------                                 ----
                                          NotSigned                              testsign.ps1

답변1

그것을 알아 냈습니다. 스크립트 파일은 PowerShell ISE를 사용하여 생성되었으며 분명히PowerShell ISE에서 생성된 스크립트에 서명할 수 없습니다.또는 더 정확하게는 ISE의 ​​기본값인 유니코드 Big Endian 인코딩 파일에 서명할 수 없습니다. 링크에 설명된 대로 기본 인코딩을 변경하는 해결 방법이 있습니다.


원래 다음 사람이 질문에 추가했습니다.채드 밀러. 이 질문이 더 이상 답변이 없는 것으로 표시되지 않도록 업데이트를 답변으로 옮겼습니다.

답변2

ISEFile 개체의 .Save() 메서드를 사용하여 Powershell ISE 내에서 특정 인코딩으로 파일을 저장할 수 있습니다.

 $psIse.CurrentFile.Save([System.Text.Encoding]::UTF8)

ISE 프로필에 다음을 추가하는 경우 Ctrl-Shift-S를 눌러 스크립트에 대해 다른 기본 인코딩을 얻을 수 있습니다.

$psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Add("_Save as UTF8",{$psIse.CurrentFile.Save([System.Text.Encoding]::UTF8)},"Ctrl+Shift+S")

프로필이 존재하지 않는 경우 프로필을 생성하고 메뉴를 추가하는 빠른 코드는 다음과 같습니다. ISE 내에서 이 코드를 실행하지 않으면 오류가 발생하는 ConsoleHost 프로필에 정크를 추가하게 됩니다.

add-content $profile -value '$psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Add("_Save as UTF8",{$psIse.CurrentFile.Save([System.Text.Encoding]::UTF8)},"Ctrl+Shift+S")'

관련 정보