首页 > 解决方案 > 从批处理文件 (.cmd) 执行时,如何获取 PowerShell 控制台信息以显示在命令窗口中?

问题描述

我有一个 PowerShell 脚本,当我从 PowerShell ISE 运行它时,它具有非常好的控制台状态和进度信息(使用 Write-Host)。但是,脚本通常由批处理命令文件 (.cmd) 作为较大进程的一部分调用。

目前,我从 Command1.cmd 调用 Script1.ps1,如下所示:

FOR /f "delims= USEBACKQ" %%i in (`powershell.exe -file "C:\Powershell\Script1.ps1" -_Parm1 "!_Parm1!" -_Parm2 "!_Parm2!"`) DO SET ResponseMessage=%%i 
FOR /f "tokens=1,2 delims=;" %%i in ("!ResponseMessage!") DO SET "ReturnCode=%%i" &SET "ResponseMessage=%%j"
IF !ReturnCode! NEQ 0 (
    @ECHO Error in Script1.ps1. ReturnCode=!ReturnCode!. ResponseMessage=!ResponseMessage!
    EXIT /B !ReturnCode!
)

它工作得很好,但我没有看到任何来自 Script1.ps1 的 Write-Host 状态信息,除了最后一个,我将其解析为返回代码和消息。
我想在命令窗口执行时查看所有 Write-Host 状态信息。我怀疑 Write-Host 不是我想做的正确 cmdlet。但是,我无法得到任何工作。

这是 Script1.ps1 控制台输出的编辑示例,但它可以处理许多文件和每个文件中的数百条记录。我不需要提取它的任何特定部分,我想让它一步一步地完整显示。

:::Parms
 [Redacted] 
:::OpenSQL 
:::Backing up DB
 [Redacted] 
:::Processing Files
 [Redacted] 
  File Dev.Script1_Input3.xml 
  NameQuery: Dev.Script1_Input3
  Count: 15
  Updating... 
     10%... 
     20%... 
     30%... 
     40%... 
     50%... 
     60%... 
     70%... 
     80%... 
     90%... 
     100% !
  Recs Added....: 3 
  Recs Updated..: 12 
  Done. 

  All data files processed. 
  Files Processed: 3 
  [Redacted]

标签: powershellbatch-fileconsolewrite-host

解决方案


推荐阅读