首次在计算机上启动 Windows PowerShell 时,现用执行策略很可能是 Restricted(默认设置)。
Restricted 策略不允许任何脚本运行。
若要了解计算机上的现用执行策略,请键入:
get-executionpolicy
若要在本地计算机上运行您编写的未签名脚本和来自其他用户的签名脚本,请使用以下命令将计算机上的
执行策略更改为 RemoteSigned:
set-executionpolicy remotesigned
其他参数
- Restricted—默认的设置, 不允许任何script运行;
- AllSigned—只能运行经过数字证书签名的script;
- RemoteSigned—运行本地的script不需要数字签名,但是运行从网络上下载的script就必须要有数字签名;
- Unrestricted—允许所有的script运行。
创建自签名证书
创建一个自签名证书,需要用到microsoft的工具,makecert.exe 。这个工具不能单独下载,但是它包含在微软的.NET framework中,如果你的电脑上已经安装了Visual studio 那就方便多了。
开始->所有程序-Microsoft Visual Studio 2010->Visual Studio Tools->Visual Studio 命令提示(2010)
makecert.exe -pe -r -n "cn=PSCert" -eku 1.3.6.1.5.5.7.3.3 -ss "my"
这里要稍微注意 -eku 参数:1.3.6.1.5.5.7.3.3,不能是其它,否则证书的预期目的属性就不是代码签名了。
上面创建的证书会自动保存在CurrentUser\My 路径下面。可以在Powershell中查看(切换到证书所在路径):
PS E:> ls cert:CurrentUser\My | where {$_.subject -eq "CN=PSCert"}
目录: Microsoft.PowerShell.SecurityCertificate::CurrentUser\My
Thumbprint Subject
---------- -------
BA61AF0B8A856422AD9EF86104C8CEDB2583A21A CN=PSCert
把前面的证书保存变量$cert
PS E:> $cert=ls cert:CurrentUser\My | where {$_.subject -eq "CN=PSCert"
}
最后我们用Set-AuthenticodeSignature来给我们指定的PowerShell脚本设置数字签名认证:
PS C:\Users\Administrator> Set-AuthenticodeSignature -PSPath "C:\Test.ps1" -Certificate $cert
Directory: C:\
SignerCertificate Status Path
----------------- ------ ----
B88C3F608862012BB370E70D4426D0AEE9D342CD Valid Test.ps1
最后把生成的证书导出然后导入到需要运行的服务器
导出方式:
在控制台菜单,开始-》运行-》打开certmgr.msc证书控制台
新生成的证书一般在个人下面。
最后把导出的证书导入到服务器的受信任的根证书颁发机构