首页 > 解决方案 > 从 Powershell 运行批处理文件时出现“(。此时是意外的”

问题描述

我正在使用 Powershell 远程连接到服务器,然后运行批处理文件以在远程服务器上执行。我能够很好地连接到服务器并启动批处理文件。但是当我通过 Powershell 执行批处理文件时,我不断收到错误消息

“未指定:(。此时出乎意料。:字符串)[],RemoteException”

但是,如果我从服务器本地执行批处理文件,批处理文件运行没有任何问题。通过故障排除和日志记录,我认为问题与批处理文件中的 If-else 块有关。代码如下。是否需要在语法中修复某些内容才能通过 Powershell 工作?

假设 %prop_arg% 是作为命令行参数传递的值。其他变量在批处理文件执行期间设置,然后才到达 if else 语句。谢谢您的帮助。

if [%prop_arg%] == [] (
    @rem if nothing then use default value
    echo Running Execution for '%USERID%' on %DATE% >> %CURRENT_DIR%\Logs\%LOG_FILE% 
    echo.   >> %CURRENT_DIR%\Logs\%LOG_FILE% 
    echo GEM list:  >> %CURRENT_DIR%\Logs\%LOG_FILE% 
    gem list >> %CURRENT_DIR%\Logs\%LOG_FILE% 
    ruby %CURRENT_DIR%\testscript.rb %CURRENT_DIR%\framework_properties.txt 2>&1 | tee -a %CURRENT_DIR%\Logs\%LOG_FILE%

) else (

    echo Using properties file: %prop_arg%
    ruby %CURRENT_DIR%\testscript.rb %CURRENT_DIR%\%prop_arg% 2>&1 | tee -a %CURRENT_DIR%\Logs\%LOG_FILE%
)

标签: powershellbatch-file

解决方案


看看你是如何使用 if/else 语句的。您对它们有错误的语法。您需要括号 {} 将 if else 的执行位括起来,而不是您拥有的括号 ()

batch 不是 powershell 它们是不同的语言并且具有不同的语法。如果您在 powershell 中运行批处理代码,它将尝试将其解释为 powershell。

如果您需要从 powershell 运行批处理文件,请执行

启动进程 C:\path\to\file.bat


推荐阅读