为 Windows PowerShell 脚本或其他文件添加 Authenticode 签名。

语法

Set-AuthenticodeSignature [-FilePath] <string[]> [-证书] <X509Certificate2> [-Force] [-HashAlgorithm <string>] [-IncludeChain <string>] [-TimestampServer <string>] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Set-AuthenticodeSignature cmdlet 可为支持目标接口包 (SIP) 的任何文件添加 Authenticode 签名。

在 Windows PowerShell 脚本文件中,签名采取文本块的形式,该文本块指示脚本中所执行指令的结束位置。如果运行此 cmdlet 时文件中已有签名,该签名将被删除。

参数

-证书 <X509Certificate2>

指定将用于对脚本或文件进行签名的证书。输入存储表示证书的对象的变量,或输入获取证书的表达式。

要查找证书,请在证书驱动器 (Cert:) 中使用 Get-PfxCertificateGet-ChildItem cmdlet。如果证书无效或者没有代码签名颁发机构,该命令将失败。

是否为必需?

true

位置?

2

默认值

是否接受管道输入?

false

是否接受通配符?

false

-FilePath <string[]>

指定要对其进行签名的文件的路径。

是否为必需?

true

位置?

1

默认值

是否接受管道输入?

true (ByValue, ByPropertyName)

是否接受通配符?

false

-Force

允许该 cmdlet 将签名追加到只读文件。即使使用 Force 参数,该 cmdlet 也无法覆盖安全限制。

是否为必需?

false

位置?

named

默认值

是否接受管道输入?

false

是否接受通配符?

false

-HashAlgorithm <string>

指定 Windows 用于计算文件的数字签名的哈希算法。默认值为 SHA1,这是 Windows 默认的哈希算法。

使用其他哈希算法签名的文件可能在其他系统上无法识别。

是否为必需?

false

位置?

named

默认值

SHA1

是否接受管道输入?

false

是否接受通配符?

false

-IncludeChain <string>

确定证书信任链中的哪些证书包括在数字签名中。默认值为“NotRoot”。

有效值包括:

-- Signer:仅包括签名者的证书。

-- NotRoot:包括证书链中的所有证书(根证书颁发机构除外)。

--All:包括证书链中的所有证书。

是否为必需?

false

位置?

named

默认值

是否接受管道输入?

false

是否接受通配符?

false

-TimestampServer <string>

使用指定的时间戳服务器向签名中添加时间戳。请以字符串形式键入时间戳服务器的 URL。

时间戳表示向文件中添加证书的确切时间。时间戳可防止证书过期时脚本运行失败,因为用户和程序可以在签名时确认证书有效。

是否为必需?

false

位置?

named

默认值

是否接受管道输入?

false

是否接受通配符?

false

-Confirm

在执行命令之前提示您进行确认。

是否为必需?

false

位置?

named

默认值

是否接受管道输入?

false

是否接受通配符?

false

-WhatIf

描述如果执行该命令会发生什么情况(无需实际执行该命令)。

是否为必需?

false

位置?

named

默认值

是否接受管道输入?

false

是否接受通配符?

false

<CommonParameters>

此 cmdlet 支持通用参数:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息,请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入

System.String

可以通过管道将包含文件路径的字符串传递给 Set-AuthenticodeSignature。

输出

System.Management.Automation.Signature

示例 1

C:\PS>$cert=Get-ChildItem -Path cert:\CurrentUser\my -CodeSigningCert

C:\PS>Set-AuthenticodeSignature -FilePath PsTestInternet2.ps1 -certificate $cert

说明
-----------
这些命令从 Windows PowerShell 证书提供程序中检索代码签名证书,并使用该证书对 Windows PowerShell 脚本进行签名。

第一个命令使用 Get-ChildItem cmdlet 和 Windows PowerShell 证书提供程序来获取证书存储中 Cert:\CurrentUser\My 子目录下的证书。(Cert: 驱动器是由证书提供程序公开的驱动器。)仅由证书提供程序支持的 CodeSigningCert 参数将检索的证书限制为具有代码签名颁发机构的证书。此命令将结果存储在 $cert 变量中。

第二个命令使用 Set-AuthenticodeSignature cmdlet 对 PSTestInternet2.ps1 脚本进行签名。它使用 FilePath 参数指定脚本名称,并使用 Certificate 参数指定证书存储在 $cert 变量中。






示例 2

C:\PS>$cert = Get-PfxCertificate C:\Test\Mysign.pfx 

C:\PS>Set-AuthenticodeSignature -Filepath ServerProps.ps1 -Cert $cert

说明
-----------
这些命令使用 Get-PfxCertificate cmdlet 查找代码签名证书。然后,它们使用该证书对 Windows PowerShell 脚本进行签名。

第一个命令使用 Get-PfxCertificate cmdlet 查找 C:\Test\MySign.pfx 证书,并将其存储在 $cert 变量中。

第二个命令使用 Set-AuthenticodeSignature 对脚本进行签名。Set-AuthenticodeSignature 的 FilePath 参数指定要对其进行签名的脚本文件的路径,Cert 参数将包含证书的 $cert 变量传递到 Set-AuthenticodeSignature。

如果证书文件受密码保护,Windows PowerShell 将提示您输入密码。






示例 3

C:\PS>Set-AuthenticodeSignature -filepath c:\scripts\Remodel.ps1 -certificate $cert -IncludeChain All -TimeStampServer "http://timestamp.fabrikam.com/scripts/timstamper.dll"

说明
-----------
此命令添加信任链中包括根证书颁发机构,并由第三方时间戳服务器签名的数字签名。

此命令使用 FilePath 参数指定要对其进行签名的脚本,并使用 Certificate 参数指定保存在 $cert 变量中的证书。它使用 IncludeChain 参数来包含信任链(包括根证书颁发机构)中的所有签名。此外,还使用 TimeStampServer 参数向签名中添加时间戳。这可防止证书过期时脚本运行失败。






另请参阅




目录