【问题标题】:Executing a .bat file from PowerShell is not working从 PowerShell 执行 .bat 文件不起作用
【发布时间】:2019-07-20 10:25:18
【问题描述】:

我有一个可以生成 JSON 文件并将其转换为 CSV 的工作 PowerShell 脚本。通过 ISE 手动执行时运行良好。但是,我注意到当我通过任务计划程序执行脚本时,JSON 文件的生成工作正常,但不知何故跳过了它转换为 CSV 的部分。我正在使用提供给我的 .bat 文件将 JSON 转换为 CSV,我只是在我的 PS 脚本上调用该 .bat。

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

$path = "C:\Apps\ActiveMQanalysis\ConvertJsonFiletoCSV.bat"

Start-Process -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

【问题讨论】:

  • powershell 可以将 JSON 文件转换为 CSV。您是否尝试过查看 PoSh 中的 CSV 和 JSON cmdlet?
  • 可以粘贴bat文件的内容吗?
  • @Lee_Dailey 我认为我使用的 JSON 文件转换器是专门为我们的需要而格式化的。这就是为什么我需要运行那个 .bat 文件来进行转换的原因。
  • @Moerwald 我已更新问题以包含 bat 文件的内容。
  • 听起来像是权限问题(检查在任务计划程序中设置了哪些用户来运行进程)......但看起来真的很奇怪,你正在使用 PS 运行 BAT,调用 Java库,完成 PS 已经在本地完成的事情。

标签: powershell


【解决方案1】:

Start-Process 默认在后台运行。为什么不直接运行呢?

C:\Apps\ActiveMQanalysis\ConvertJsonFiletoCSV.bat

或者你可以使用一个变量调用操作符:

& $path

【讨论】:

  • 我试过这样做,但结果相同。由于某种原因,我在任务计划程序中执行此操作时未执行 bat 文件。
【解决方案2】:

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

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

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

【讨论】:

  • 事实并非如此,@Moerwald。该任务根据其状态成功完成,但我看不到生成的 CSV。一开始我的假设和你一样,但我仍然得到相同的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多