Isso foi difícil de descobrir - mas no final uma solução muito fácil
A documentação de Get-ChildItem -CodeSigning
diz:
-CodeSigningCert
Gets only those certificates with code-signing authority. This parameter gets certificates that have "Code Signing" in their EnhancedKeyUsageList property value.
Sua variável $cert
está vazia, porque ela não recebe um retorno do comando get-childitem
, porque seu certificado não sabe que é um certificado CodeSigning, porque a propriedade EnhancedKeyUsage
não é igual a "CodeSigning "(também, você armazena o Cert em LocalMachine
, mas quer lê-lo de CurrentUser
que está errado).
Então, quando você estiver criando seu certificado com New-SelfSignedCertificate
, será necessário informar ao certificado que ele precisa ser um Certificado de assinatura do código.
O cmdlet New-SelfSignedCertificate
tem o seguinte parâmetro:
-Type (Microsoft.CertificateServices.Commands.CertificateType)
Specifies the type of certificate that this cmdlet creates. The acceptable values for this parameter are:
-- CodeSigningCert -- Custom -- DocumentEncryptionCert -- DocumentEncryptionCertLegacyCsp -- SSLServerAuthentication (default)
Assim, todo o seu script tem que ser assim:
New-SelfSignedCertificate -DnsName test.OJ.com -CertStoreLocation cert:\LocalMachine\My -type CodeSigning
$cert = @(Get-ChildItem cert:\LocalMachine\My -CodeSigning)[0]
Set-AuthenticodeSignature .\scriptTosing.ps1 $cert