从Powershell脚本运行BAT文件的最安全方法

cmc*_*nty 68 powershell batch-file

我无法获得PowerShell脚本直接执行bat文件.例如,这适用于命令行:

.\\my-app\my-fle.bat
Run Code Online (Sandbox Code Playgroud)

当我将此命令添加到脚本时,它输出:

The term '.\\my-app\my-file.bat' is not recognized as the 
name of a cmdlet, function, script file, or operable program. 
Check the spelling of the name, or if a path was included, 
verify that the path is correct and try again.
Run Code Online (Sandbox Code Playgroud)

我也尝试了以下结果,结果相同:

& .\\my-app\my-fle.bat
& ".\\my-app\my-fle.bat"
\my-app\my-fle.bat
& \my-app\my-fle.bat
& "\my-app\my-fle.bat"
Run Code Online (Sandbox Code Playgroud)

注意:必须返回lastexitcode,因为我需要验证批处理是否成功.

cmc*_*nty 86

cmd.exe /c '\my-app\my-file.bat'
Run Code Online (Sandbox Code Playgroud)

  • @Horizo​​n - 使用 -ArgumentList 参数指定字符串数组中的每个参数: `Start-Process -FilePath "cmd.exe" -ArgumentList @("/B", "/C", "test.bat", "$inputFilePath");` 需要注意的是,`$inputFilePath` 的值的解释就像直接在 DOS 中一样。例如,“a\bc\de\f.txt”的值将导致 test.bat 看到 %1="a\b"、%2="c\d" 和 %3="e\f.txt ” (3认同)

Ryn*_*ant 30

要运行.bat,并且可以访问最后一个退出代码,请将其运行为:

 & .\my-app\my-fle.bat
Run Code Online (Sandbox Code Playgroud)


Knu*_*ger 25

试试这个,你的点源有点偏.编辑,为OP添加lastexitcode位.

$A = Start-Process -FilePath .\my-app\my-fle.bat -Wait -passthru;$a.ExitCode
Run Code Online (Sandbox Code Playgroud)

添加-WindowStyle Hidden隐形批次.


小智 16

您可以简单地执行以下操作:

Start-Process -FilePath "C:\PathToBatFile\FileToExecute.bat" -ArgumentList $argstr -Wait -NoNewWindow
Run Code Online (Sandbox Code Playgroud)

这里,

ArgumentList - 如果 bat 文件需要,则传递参数或参数值

等待- 等待进程(bat)完成

NoNewWindow - 在当前控制台窗口中启动新进程。

  • 对于 -ArgumentList 请参阅[文档](https://learn.microsoft.com/de-de/powershell/module/Microsoft.PowerShell.Management/Start-Process?view=powershell-7.2#example-7--specifying-arguments -到流程) (3认同)