PowerShell 技能连载 - 使用编码的脚本
在 VBScript 中有编码的脚本。编码并不是隐藏脚本内容的安全方法,但它能使用户获取代码内容略微更难一点。
以下是一个传入 PowerShell 脚本并对它编码的函数:
function ConvertTo-EncodedScript
{
param
(
$Path,
[Switch]$Open
)
$Code = Get-Content -Path $Path -Raw
$Bytes = [System.Text.Encoding]::Unicode.GetBytes($Code)
$Base64 = [Convert]::ToBase64String($Bytes)
$NewPath = [System.IO.Path]::ChangeExtension($Path, '.pse1')
$Base64 | Set-Content -Path $NewPath
if ($Open) { notepad $NewPath }
}
编码后的脚本将会以 .pse1 扩展名来保存(这是一个完全随意定义的文件扩展名,并不是微软定义的)。
要执行这段编码后的脚本,请运行这段命令(不能在 PowerShell ISE 中运行):
powershell -encodedcommand (Get-Content 'Z:\pathtoscript\scriptname.pse1' -Raw)
请注意 PowerShell 最多支持大约 8000 个字符的编码命令。编码命令的本意是安全地将 PowerShell 代码传递给 powershell.exe,而不会被特殊字符打断命令行。
PowerShell 技能连载 - 使用编码的脚本