无法签署PowerShell脚本

我似乎无法让我的脚本loginPowerShell。 我的计算机上安装了有效的代码签名证书,并运行以下命令。 有什么build议么?

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 

弄清楚了。 脚本文件是使用PowerShell ISE创build的,显然你不能签署在PowerShell ISE中创build的脚本,或者更准确地说你不能签署默认的Unicode Big Endian编码文件。 有解决方法来更改链接中logging的默认编码。


最初添加到乍得米勒问题。 将他的更新重新定位到一个答案,所以这个问题不再显示为没有答案。

您可以使用ISEFile对象的.Save()方法从Powershell ISE中将特定的编码保存为一个文件:

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

如果将以下内容添加到ISEconfiguration文件中,则只需按Ctrl-Shift-S即可为脚本获取不同的默认编码:

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

这里有一些quickie代码来创build您的configuration文件,如果它不存在,并添加菜单。 从ISE内部运行这个代码,或者你只是将垃圾添加到你的ConsoleHostconfiguration文件,它只会出错:

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