如何将执行exe并传入txt参数的bat文件转换为PowerShell脚本
BAT脚本转等效PowerShell脚本实现方案
首先给出兼容Windows PowerShell(5.1)和PowerShell 7+的通用实现脚本,和原BAT功能完全一致:
# 开启命令回显,对应原BAT的@echo on配置 Set-PSDebug -Trace 1 # 定义相关路径变量,方便后续修改维护 $cmdbdiagPath = "C:\Program Files\BMC Software\AtriumCore\cmdb\server64\bin\cmdbdiag.exe" $inputParamPath = "C:\Program Files\BMC Software\ARSystem\diserver\data-integration\batch\CleanupInputs.txt" $outputLogPath = "C:\Program Files\BMC Software\ARSystem\diserver\data-integration\batch\Snow_Output\DailyOutput.log" # 读取输入参数文件内容传入目标程序,执行结果输出到日志文件 Get-Content -Path $inputParamPath | & $cmdbdiagPath -u test -p test -s remedyar -t 41900 | Out-File -FilePath $outputLogPath -Encoding Default # 执行完成返回退出码0,和原BAT逻辑一致 exit 0
补充说明
- 如果你使用的是PowerShell 7及以上版本,可以直接用原生输入输出重定向符,写法更贴近原BAT:
Set-PSDebug -Trace 1 & "C:\Program Files\BMC Software\AtriumCore\cmdb\server64\bin\cmdbdiag.exe" -u test -p test -s remedyar -t 41900 < "C:\Program Files\BMC Software\ARSystem\diserver\data-integration\batch\CleanupInputs.txt" > "C:\Program Files\BMC Software\ARSystem\diserver\data-integration\batch\Snow_Output\DailyOutput.log" exit 0
- 脚本中
&是PowerShell的调用运算符,用于启动路径包含空格的可执行文件,避免路径空格被识别为参数分隔符。 Out-File的-Encoding参数设置为Default时,会使用系统默认编码,保证日志输出编码和原BAT执行效果一致,你可以根据实际需求调整为UTF8等其他编码。- 如果需要同时把程序的错误输出也写入日志,可在执行程序的命令末尾添加
2>&1,效果等同于CMD中的错误输出重定向。
内容的提问来源于stack exchange,提问作者Subbu
相关产品推荐
相关产品推荐

