gpt4 book ai didi

打包在批处理文件中的PowerShell脚本只执行了一半

转载 作者:行者123 更新时间:2023-12-04 12:08:17 27 4
gpt4 key购买 nike

我想将 PowerShell 脚本包装到一个批处理文件中,最终使其对任何人都可以执行,并且可以在单个分布式文件中执行。我的想法是使用读取文件本身的 CMD 命令开始一个文件,跳过前几行并将其余行通过管道传输到 powershell,然后让批处理文件结束。在 Bash 中,使用简短的可读命令将是一项简单的任务,但您可以从众多技巧中看出 Windows 已经在这方面遇到了大麻烦。这就是它的样子:

@echo off
(for /f "skip=4 delims=" %%a in ('type %0') do @echo.%%a) |powershell -noprofile -noninteractive -
goto :EOF
---------- BEGIN POWERSHELL ----------
write-host "Hello PowerShell!"
if ($true)
{
write-host "TRUE"
}
write-host "Good bye."
问题是,PowerShell 脚本没有完全执行,它在第一行写完后停止。我可以让它工作更多,这取决于脚本本身,但在这里找不到任何模式。
如果将第 2 行的结果通过管道传输到文件或 cat进程(如果你安装了 unix 工具,Windows 甚至不能自己做),你可以看到文件的完整 PowerShell 部分,所以它不会被截断或什么的。 PowerShell 只是不想在这里执行脚本。
复制文件,删除前 4 行并将其重命名为 *.ps1,然后调用:
powershell -ExecutionPolicy unrestricted -File FILENAME.ps1
它会完全执行。所以它也不是 PowerShell 脚本内容。在这种情况下,是什么让 powershell 过早结束?

最佳答案

您可以使用注释块从 powershell 中隐藏脚本的批处理文件部分,然后按原样运行脚本,而无需批处理文件对其进行修改:

<# : 
@echo off
powershell -command "Invoke-Expression (Get-Content '%0' -Raw)"
goto :EOF
#>

write-host "Hello PowerShell!"
if ($true)
{
write-host "TRUE"
}
write-host "Good bye."

关于打包在批处理文件中的PowerShell脚本只执行了一半,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68594311/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com