如何在Windows批处理文件中运行PowerShell脚本

如何将PowerShell脚本嵌入到与Windows批处理脚本相同的文件中?

我知道这种事情在其他情况下是可能的:

>使用sqlcmd在批处理脚本中嵌入SQL,并在文件开头巧妙安排goto和注释
>在具有程序名称的* nix环境中,您希望在脚本的第一行上运行脚本,注释掉,例如#!/usr/local / bin / python.

可能没有办法这样做 – 在这种情况下,我必须从启动脚本调用单独的PowerShell脚本.

我认为一个可能的解决方案是回显PowerShell脚本,然后运行它.不这样做的一个很好的理由是,尝试这一点的原因之一是利用PowerShell环境的优势,而不会受到诸如escape characters

我有一些不寻常的限制,并希望找到一个优雅的解决方案.我怀疑这个问题可能是诱饵的反应:“为什么不尝试和解决这个不同的问题.只要说这些是我的限制,对此就不好意思.

有任何想法吗?有没有一个巧妙的评论和转义字符的组合,这将使我能实现这一点?

关于如何实现这一点的一些想法:

>一行的结尾处的一个克拉是一个延续 – 就像Visual Basic中的一个下划线
>和号&通常用于分隔命令echo Hello&回声世界在两条回归线上分开
>%0将给你当前运行的脚本

所以这样的东西(如果我可以使它工作)将是好的:

# & call powershell -psconsolefile %0
# & goto :EOF
/* From here on in we're running nice juicy powershell code */
Write-Output "Hello World"

除…

>它不工作,因为
>文件的扩展不是按照PowerShell的喜好:Windows PowerShell控制台文件“insideout.bat”扩展名不是psc1. Windows PowerShell控制台文件扩展名必须是psc1.
> CMD并不完全满足于这种情况 – 尽管它在’#’上绊倒,但它不被识别为内部或外部命令,可操作的程序或批处理文件.

最佳答案
这只通过正确的路线到PowerShell:

dosps2.cmd:

@findstr/v "^@f.*&" "%~f0"|powershell -&goto:eof
Write-Output "Hello World" 
Write-Output "Hello some@com & again" 

regular expression不包括以@f开头的行,包括&并将所有其他内容传递给PowerShell.

C:\tmp>dosps2
Hello World
Hello some@com & again

转载注明原文:如何在Windows批处理文件中运行PowerShell脚本 - 代码日志