PowerShell本身是支持base64格式的: 我们可以通过下面的函数,将一个PowerShell脚本文件转换成bat批处理文件。支持双击运行: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | function Encrypt-Script{
param (
[system.io.fileinfo] $File
)
if ( $File .Exists){
$fileContent = Get-Content $File -Raw
$bytes = [System.Text.Encoding] ::Unicode.GetBytes( $fileContent )
$encodedCommand = [Convert] ::ToBase64String( $bytes )
$batFile = $File .FullName+ ".bat"
"call $PSHOME\powershell.exe -encodedCommand `"$encodedCommand`"" | Out-File $batFile -Encoding ascii
Write-Host " 加密的脚本已保存至 $batFile "
}
}
Encrypt-Script -File 'E:\ps\WorkingHours.ps1'
|
函数允许后会在脚本的同一目录生成一个E:\ps\WorkingHours.ps1.bat 双击运行即可。 bat文件的里面的内容大概类似这样: 1 | call C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -encodedCommand "IwC/i+6VaAB0AHQAcAA6AC8ALwBoAHIAaQBuAHQALgBzAGgALgBjAHQAc*******AA=="
|
解密的脚本可参考: 1 2 3 4 5 6 7 8 9 10 11 12 13 | function Decrypt-Script
{
param ( [system.io.fileinfo] $File )
$body = Invoke-Expression (( Get-Content $File .FullName -Raw ) -split ' ' | select -Last 1)
$byte = [Convert] ::FromBase64CharArray( $body ,0, $body .Length)
$script = [System.Text.Encoding] ::Unicode.GetString( $byte )
$psFile = $File .FullName + ".ps1"
$script | Out-File $psFile
Write-Host "解密的脚本已经保存到 $psFile"
}
Decrypt-Script -File E:\ps\WorkingHours.ps1.bat
|
|