Unix shell(bash,dash tries)逐行解释脚本。这允许将一些二进制数据附加到脚本的末尾。我的特定示例是一个Jar文件,可以自动解压缩或从该脚本运行。
我想知道PowerShell是否也能以某种方式实现。我尝试并收到错误,表明PowerShell似乎在开始运行之前先解析整个文件。
有没有办法标记文件的其余部分,以便PowerShell不会尝试解释它而只是忽略它?
由于我的具体用例是我想使Jar文件可执行,因此依赖于base64编码二进制blob的解决方案不起作用。
更加明确:脚本基本上会运行
java -jar $MyInvocation.MyCommand.Definition @Args
这样java就会将该文件用作jar文件。
答案 0 :(得分:1)
是什么让您认为使用base64编码的解决方案不起作用?将文件转换为base64字符串,如下所示:
$bytes = [IO.File]::ReadAllBytes('C:\path\to\your.jar')
[Convert]::ToBase64String($bytes)
并将字符串作为变量放入脚本中:
$jarData = 'UEsDBBQAAAAA...'
如果你喜欢多行的base64字符串,你可以像这样包装它:
[Convert]::ToBase64String($bytes) -replace '(.{80})', "`$1`n"
并将其放入脚本中:
$jarData = @'
UEsDBBQAAAAA...
...
'@
让您的脚本解码数据并在执行时将其保存回文件:
$bytes = [Convert]::FromBase64String($jarData)
[IO.File]::WriteAllBytes("$env:TEMP\your.jar", $bytes)
据我所知,这是在PowerShell脚本中嵌入二进制数据的唯一方法。