TUTOS.EU

Signer automatiquement un script powershell

Quand vous développez un script, vous passez votre temps à le modifier.
De ce fait, si la politique de votre entreprise est de n'autoriser que les scripts signés, il faut le resigner constamment pour qu'il puisse s'exécuter.

C'est de la bidouille mais le principe ici est de faire tourner une boucle toutes les secondes et dès qu'il voit que le script a été modifié, il le resigne.

Remplacez "C:\MonScript.ps1" par le chemin du script à surveiller et resigner automatiquement

$Path2Script = "C:\MonScript.ps1"

$cert=(dir cert:\currentuser\my\ -CodeSigningCert)

$LastChange = ""

do{
	$MonFile = Get-Item -Path $Path2Script
	if($MonFile.LastWriteTime -ne $LastChange  ){
		#Write-Host "Change ! : $LastChange vs $($MonFile.LastWriteTime)"
		Set-AuthenticodeSignature -FilePath $Path2Script -Certificate $cert -TimestampServer http://timestamp.sectigo.com
		$MonFile = Get-Item -Path $Path2Script
		$LastChange = $MonFile.LastWriteTime    
	}
	Start-Sleep 1

} while (1 -ne 2)
Lien vers le fichier : cliquez ici

Ci-dessous on a une variante où on va signer tous les scripts powershell contenus dans un répertoire.

Il faut placer ce script dans le répertoire des scripts à signer.

clear-host
$varCheminRepertoireScript = [System.IO.Path]::GetDirectoryName($MyInvocation.MyCommand.Definition) #On récupère le chemin du répertoire contenant ce script
$cert=(dir cert:\currentuser\my\ -CodeSigningCert)

$MonFolder = Get-ChildItem -Path $varCheminRepertoireScript -File | Where-Object {$_.Name -match 'ps1$'}
foreach ($MyFile in $MonFolder)
{
	Write-Host "$($MyFile.FullName)" #On affiche le nom du fichier ainsi que son chemin d'accès complet
    Set-AuthenticodeSignature -FilePath $($MyFile.FullName) -Certificate $cert -TimestampServer http://timestamp.sectigo.com
}
Lien vers le fichier : cliquez ici

Article(s) précédent(s)