从PowerShell执行.bat文件不起作用

时间:2019-07-20 10:25:18

标签: powershell

我有一个工作的PowerShell脚本,该脚本生成JSON文件并将其转换为CSV。通过ISE手动执行时运行良好。但是,我注意到当我通过Task Scheduler执行脚本时,JSON文件的生成工作正常,但是以某种方式跳过了将其转换为CSV的部分。我正在使用提供给我的.bat文件将JSON转换为CSV,我只是在我的PS脚本中调用该.bat。

我在某处读到这可能是因为我试图在没有交互式会话的情况下启动进程,并且可以通过选中“仅在用户登录时运行”来解决此问题,但是我仍然得到了相同的答案结果。

  

$ path =“ C:\ Apps \ ActiveMQanalysis \ ConvertJsonFiletoCSV.bat”

     

开始处理-FilePath $ path

     

开始睡眠-第二个5

编辑:这是批处理文件的内容:

  

“ C:\ Program Files \ Java \ jdk1.8.0_181 \ bin \ java” -cp lib *   de.znt.activeMqAnalysis.BrokerStatistics C:\ Apps \ brokerResults \

编辑:正如大多数用户在这里指出的那样,我确实在.bat文件上添加了一些日志记录,以查看错误的出处。事实证明,这给了我一个找不到或加载主类de.znt.activeMqAnalysis.BrokerStatistics的错误。

2 个答案:

答案 0 :(得分:1)

默认情况下,Start-Process在后台运行事物。您为什么不直接运行它?

C:\Apps\ActiveMQanalysis\ConvertJsonFiletoCSV.bat

或者使用变量,您可以使用调用运算符:

& $path

答案 1 :(得分:0)

也许bat文件花费的时间超过5秒。您对Start-Process的呼叫将立即返回。您可以添加-Wait开关以向Start-Process添加阻止行为。将代码更改为:

$process = Start-Process -FilePath 'C:\Apps\ActiveMQanalysis\ConvertJsonFiletoCSV.bat' -Wait -Passthru
$process.ExitCode

-PassThru返回一个流程对象,该对象将为您提供详细信息,例如流程的退出代码。可以在Start-Process documentation中找到更多信息。