PowerShell脚本签名与Shell环境配置全解析
立即解锁
发布时间: 2025-08-26 01:44:48 阅读量: 5 订阅数: 11 

### PowerShell脚本签名与Shell环境配置全解析
#### 脚本签名
在运行脚本之前,为确保安全性,我们需要将脚本执行策略切换为`AllSigned`,只有具有管理员权限的用户才能执行此操作。在Windows Vista系统中,这些用户需要以提升的权限运行shell。以下是具体操作步骤:
1. 以管理员身份启动shell会话。
2. 调用`Set-ExecutionPolicy` cmdlet:
```powershell
PS C:\> Set-ExecutionPolicy AllSigned
PS C:\> Get-ExecutionPolicy
AllSigned
```
接下来,我们创建一个简单的脚本,用于返回当前文件夹中的所有证书文件,并尝试运行它:
```powershell
PS> Set-Content Get-CertificateFiles.ps1 "dir *.cer"
PS> .\Get-CertificateFiles.ps1
```
由于我们处于`AllSigned`脚本执行策略下,不允许运行未签名的脚本,因此会收到错误提示。为了运行该脚本,我们需要对其进行签名。
##### 获取签名证书并签名脚本
我们可以从证书存储中获取证书来签名脚本:
```powershell
PS> $certStore = dir cert:\CurrentUser\My
PS> $certStore
Directory: Microsoft.PowerShell.Security\Certificate::CurrentUser\My
Thumbprint Subject
---------- -------
E5F1C5F21B5E276374626A9C4F68E39DBB0BB062 CN=Pro Windows PowerShell Scri...
PS> Set-AuthenticodeSignature Get-CertificateFiles.ps1 -cert $certStore
Directory: C:\PowerShell\certs
SignerCertificate Status Path
----------------- ------ ----
E5F1C5F21B5E276374626A9C4F68E39DBB0BB062 Valid Get-Certifica...
```
如果个人存储中包含多个证书,我们可以使用索引器(如`(dir cert:\CurrentUser\My)[0]`)来获取正确的证书。
我们可以随时通过调用`Get-AuthenticodeSignature`来获取脚本的签名:
```powershell
PS> Get-AuthenticodeSignature Get-CertificateFiles.ps1
Directory: C:\PowerShell\certs
SignerCertificate Status Path
----------------- ------ ----
E5F1C5F21B5E276374626A9C4F68E39DBB0BB062 Valid Get-Certifica...
```
当`Status`属性为`Valid`时,脚本可以安全执行。现在我们运行签名后的脚本:
```powershell
PS> .\Get-CertificateFiles.ps1
```
首次运行该发布者的脚本时,PowerShell会询问是否信任该发布者。我们可以选择相应的选项,如选择`A`(总是运行),之后就不会再收到此提示。
##### 从PFX文件获取证书签名脚本
我们也可以从之前导出的PFX文件中获取发布者证书,使用`Get-PfxCertificate` cmdlet:
```powershell
PS> $certFile = Get-PfxCertificate ScriptSign.pfx
Enter password: **********
```
获取证书时需要输入私钥密码,这比从证书存储中获取证书感觉更安全。获取证书后,签名脚本的操作与之前相同:
```powershell
PS> Set-AuthenticodeSignature Get-CertificateFiles.ps1 -cert $certFile
Directory: C:\PowerShell\certs
SignerCertificate Status Path
----------------- ------ ----
E5F1C5F21B5E276374626A9C4F68E39DBB0BB062 Valid Get-Certifica...
PS> Get-AuthenticodeSignature Get-CertificateFiles.ps1
Directory: C:\PowerShell\certs
SignerCertificate Status Path
----------------- ------ ----
E5F1C5F21B5E276374626A9C4F68E39DBB0BB062 Valid Get-Certifica...
```
##### 签名后的脚本及安全性验证
签名后的脚本会在注释部分嵌入签名信息:
```powershell
PS> type Get-CertificateFiles.ps1
dir *.cer
# SIG # Begin signature block
# MIIEdAYJKoZIhvcNAQcCoIIEZTCCBGECAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
…
# HbdgCU3A58lcpdrhYc2Zzt5n68njnAuTO1EKaWWkPIqUYTmBaRF2/A==
# SIG # End signature block
```
0
0
复制全文
相关推荐










