【PowerShell】実行時エラー「デジタル署名されていません」に自己署名で対応

概要

Powershellの実行ポリシーによって、実行可能なスクリプトの範囲が変わります。
例えば「RemoteSigned」の場合、非ローカルのスクリプトを実行する場合は、署名が必要になります。

署名無しのスクリプトを実行した際には下記のエラーが発生します。

実行ポリシーの詳細は下記を参照。

解決方法

実行ポリシーを変更する以外の対応方法は、以下のコードでスクリプトに自己署名を付与し、
実行するクライアントに証明書を配布する方法で、対応可能です。
コード署名になるので、どの環境で実行しても大丈夫です。
(配布先は「信頼されたルート証明機関」「信頼された発行元」)

PowerShell
# 対象のスクリプトを指定
$TargetFile = "C:\work\test.ps1" ;

# 自己証明書を用意する
$certname = "PowershellSelf"    ## Replace {certificateName}
$cert = New-SelfSignedCertificate `
	-Subject "CN=$certname" `
	-CertStoreLocation "Cert:\CurrentUser\My" `
	-KeyExportPolicy Exportable `
	-KeySpec Signature `
	-KeyLength 4096 `
	-KeyAlgorithm RSA `
	-HashAlgorithm SHA256 `
	-Type CodeSigningCert `
	-NotAfter ([datetime]"2099/01/01") 	
  
#自己署名
Set-AuthenticodeSignature -FilePath $TargetFile -Certificate $cert

#証明書エクスポート(クライアント配布用)
Export-Certificate -Cert $cert -FilePath "C:\work\$certname.pfx"