# Windows Batch File via Ansible - ERROR: Input redirection is not supported

**URL:** <https://forum.ansible.com/t/windows-batch-file-via-ansible-error-input-redirection-is-not-supported/37881>\
**Category:** Ansible Project\
**Tags:** windows\
**Created:** [April 13, 2023, 5:26pm UTC](https://forum.ansible.com/t/windows-batch-file-via-ansible-error-input-redirection-is-not-supported/37881 "2023-04-13T17:26:57Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Huskers79](https://avatars.discourse-cdn.com/v4/letter/h/d78d45/32.png) [@Huskers79](https://forum.ansible.com/u/Huskers79)\
**Post date:** [April 13, 2023, 5:26pm UTC](https://forum.ansible.com/t/windows-batch-file-via-ansible-error-input-redirection-is-not-supported/37881/1 "2023-04-13T17:26:57Z")

</div>

Good day,

Struggling to find a way to run the below vendor-provided batch file via Ansible. The script works fine when run manually, but I receive dozens of the below error when executing via Ansible win\_command or win\_shell. I have also tried to execute the batch file interactively using become. When ran interactively it simply hangs. Hoping to find a solution that doesn’t involve modifying vendor provided code.

Ansible:

- name: Upgrade RabbitMQ  
ansible.windows.win\_shell: .\install\_rabbitmq.bat  
args:  
chdir: ‘{{ install\_app\_download\_dir }}\Prerequisites’

Error:

ERROR: Input redirection is not supported, exiting the process immediately.

install\_rabbitmq.bat File:

CLS  
@ECHO OFF

> > %Temp%\install\_rabbitmq.log

CALL sc qc RabbitMQ \> NUL  
if errorlevel 1 (  
goto rabbitchecked  
)  
CALL sc qc RabbitMQ | findstr “erts-13.1.2” \> NUL  
if %errorlevel% equ 0 (  
ECHO RabbitMQ in the newest version detected. Aborting reinstall  
goto newestrabbit  
)

:rabbitchecked

CALL SC QUERY AppNetStateService \> NUL  
if errorlevel 1060 (  
ECHO Services are stopped \>\>%Temp%\install\_rabbitmq.log  
goto servicesstopped  
)  
ECHO Stopping Services… \>\>%Temp%\install\_rabbitmq.log  
CALL “%~dp0\App.ServiceManager.exe” /Mode:Stop 2\>\>%Temp%\install\_rabbitmq.log  
:servicesstopped

CALL SC QUERY RabbitMQ \> NUL  
if errorlevel 1060 (  
ECHO Rabbit is uninstalled \>\>%Temp%\install\_rabbitmq.log  
goto rabbituninstalled  
)

ECHO UNinstalling Rabbit \>\>%Temp%\install\_rabbitmq.log  
CALL sc stop RabbitMQ 2\>\>%Temp%\install\_rabbitmq.log  
:rabbitloop  
CALL sc query RabbitMQ | find “STOPPED”  
if errorlevel 1 (  
TIMEOUT 10  
goto rabbitloop  
)

CALL sc config RabbitMQ binPath= “%ProgramW6432%\Erlang OTP\erts-13.1.2\bin\erlsrv.exe”

ECHO Uninstalling RabbitMQ…  
CALL “%ProgramW6432%\RabbitMQ Server\uninstall.exe” /S 2\>\>%Temp%\install\_rabbitmq.log  
:LOOPUNINSTALL1  
CALL “%~dp0\PSLIST” Un\_A /accepteula 2\>\>%Temp%\install\_rabbitmq.log  
IF ERRORLEVEL 1 (  
ECHO RabbitMQ uninstallation finished.  
GOTO CONTINUEUNINSTALL1  
) ELSE (  
TIMEOUT 2  
GOTO LOOPUNINSTALL1  
)

:CONTINUEUNINSTALL1

TIMEOUT 60 \>nul 2\>&1

:rabbituninstalled

ECHO Uninstalling Erlang OTP…

IF NOT DEFINED ERLANG\_HOME (  
SET ERLANG\_HOME=%ProgramW6432%\erl-24.2.1  
)

CALL “%ERLANG\_HOME%\uninstall.exe” /S 2\>\>%Temp%\install\_rabbitmq.log  
:LOOPUNINSTALL2  
CALL “%~dp0\PSLIST” Un\_A /accepteula \>nul 2\>\>%Temp%\install\_rabbitmq.log  
IF ERRORLEVEL 1 (  
ECHO Erlang OTP uninstallation finished.  
GOTO CONTINUEUNINSTALL2  
) ELSE (  
TIMEOUT 2  
GOTO LOOPUNINSTALL2  
)

:CONTINUEUNINSTALL2

TIMEOUT 60 \>nul 2\>&1

ECHO Removing cookies, old files and registries…  
DEL /F “C:\Windows\System32\config\systemprofile.erlang.cookie” 2\>\>%Temp%\install\_rabbitmq.log  
DEL /F “%SystemRoot%.erlang.cookie” 2\>\>%Temp%\install\_rabbitmq.log  
DEL /F “%USERPROFILE%.erlang.cookie” 2\>\>%Temp%\install\_rabbitmq.log

DEL /S /Q /F "%AppData%\RabbitMQ" 2\>\>%Temp%\install\_rabbitmq.log

reg delete “HKEY\_LOCAL\_MACHINE\SOFTWARE\WOW6432Node\Ericsson\Erlang” /f  
reg delete “HKEY\_LOCAL\_MACHINE\SOFTWARE\Ericsson\Erlang” /f

TIMEOUT 10 \>nul 2\>&1

ECHO Installing Erlang OTP 25…  
CALL “%~dp0\otp\_win64\_25.1.2.exe” /S 2\>\>%Temp%\install\_rabbitmq.log

:LOOP1  
CALL “%~dp0\PSLIST” otp\_win64\_25.1.2 \>nul 2\>\>%Temp%\install\_rabbitmq.log  
IF ERRORLEVEL 1 (  
ECHO Erlang OTP 25 installation finished.  
GOTO CONTINUE1  
) ELSE (  
TIMEOUT 2  
GOTO LOOP1  
)

:CONTINUE1  
SET ERLANG\_HOME=%ProgramW6432%\Erlang OTP  
SETX ERLANG\_HOME “%ProgramW6432%\Erlang OTP”

ECHO Installing RabbitMQ Server 3.11.4…  
CALL “%~dp0\rabbitmq-server-3.11.4.exe” /S 2\>\>%Temp%\install\_rabbitmq.log

:LOOP2  
CALL “%~dp0\PSLIST” rabbitmq-server-3.11.4 \>nul 2\>\>%Temp%\install\_rabbitmq.log  
IF ERRORLEVEL 1 (  
ECHO RabbitMQ Server 3.11.4 installation finished.  
GOTO CONTINUE2  
) ELSE (  
TIMEOUT 2  
GOTO LOOP2  
)

:CONTINUE2

ECHO Synchronising Erlang cookies…

:LOOP3  
IF EXIST “%USERPROFILE%.erlang.cookie” (  
GOTO CONTINUE3  
) ELSE (  
GOTO LOOP3  
)  
:CONTINUE3

TIMEOUT 10 \>nul 2\>&1

DEL /F “C:\Windows\System32\config\systemprofile.erlang.cookie” 2\>\>%Temp%\install\_rabbitmq.log  
COPY /Y “%USERPROFILE%.erlang.cookie” “C:\Windows\System32\config\systemprofile.erlang.cookie” 2\>\>%Temp%\install\_rabbitmq.log

DEL /F “%SystemRoot%.erlang.cookie” 2\>\>%Temp%\install\_rabbitmq.log  
COPY /Y “%USERPROFILE%.erlang.cookie” “%SystemRoot%.erlang.cookie” 2\>\>%Temp%\install\_rabbitmq.log

ECHO Configuring RabbitMQ…

TIMEOUT 10 \>nul 2\>&1  
CALL “%ProgramW6432%\RabbitMQ Server\rabbitmq\_server-3.11.4\sbin\rabbitmq-service” stop 2\>\>%Temp%\install\_rabbitmq.log  
TIMEOUT 10 \>nul 2\>&1  
CALL “%ProgramW6432%\RabbitMQ Server\rabbitmq\_server-3.11.4\sbin\rabbitmq-service” start 2\>\>%Temp%\install\_rabbitmq.log

:LOOP4  
CALL “%ProgramW6432%\RabbitMQ Server\rabbitmq\_server-3.11.4\sbin\rabbitmqctl” status \>nul 2\>\>%Temp%\install\_rabbitmq.log  
IF ERRORLEVEL 1 (  
TIMEOUT 5 \>nul 2\>&1  
GOTO LOOP4  
) ELSE (  
GOTO CONTINUE4  
)

:CONTINUE4

TIMEOUT 30 \>nul 2\>&1  
CALL “%ProgramW6432%\RabbitMQ Server\rabbitmq\_server-3.11.4\sbin\rabbitmqctl” start\_app 2\>\>%Temp%\install\_rabbitmq.log  
TIMEOUT 30 \>nul 2\>&1  
CALL “%ProgramW6432%\RabbitMQ Server\rabbitmq\_server-3.11.4\sbin\rabbitmqctl” add\_user admin 9 2\>\>%Temp%\install\_rabbitmq.log  
TIMEOUT 5 \>nul 2\>&1  
CALL “%ProgramW6432%\RabbitMQ Server\rabbitmq\_server-3.11.4\sbin\rabbitmqctl” set\_user\_tags admin administrator 2\>\>%Temp%\install\_rabbitmq.log  
CALL “%ProgramW6432%\RabbitMQ Server\rabbitmq\_server-3.11.4\sbin\rabbitmqctl” add\_vhost / 2\>\>%Temp%\install\_rabbitmq.log  
CALL “%ProgramW6432%\RabbitMQ Server\rabbitmq\_server-3.11.4\sbin\rabbitmqctl” set\_permissions -p / admin .\* .\* .\* 2\>\>%Temp%\install\_rabbitmq.log  
TIMEOUT 5 \>nul 2\>&1

:LOOP5  
CALL “%ProgramW6432%\RabbitMQ Server\rabbitmq\_server-3.11.4\sbin\rabbitmqctl” status \>nul 2\>\>%Temp%\install\_rabbitmq.log  
IF ERRORLEVEL 1 (  
TIMEOUT 5 \>nul 2\>&1  
GOTO LOOP5  
) ELSE (  
GOTO CONTINUE5  
)

:CONTINUE5

SC QUERY AppNetStateService \> NUL  
if errorlevel 1060 (  
goto servicesstarted  
)  
ECHO Restarting services…  
CALL “%~dp0\App.ServiceManager.exe” /Mode:Start 2\>\>%Temp%\install\_rabbitmq.log  
:servicesstarted

:newestrabbit

Thank you for any and all assistance!

---

<div class="post-metadata">

**Author:** ![Huskers79](https://avatars.discourse-cdn.com/v4/letter/h/d78d45/32.png) [@Huskers79](https://forum.ansible.com/u/Huskers79)\
**Post date:** [April 13, 2023, 8:05pm UTC](https://forum.ansible.com/t/windows-batch-file-via-ansible-error-input-redirection-is-not-supported/37881/2 "2023-04-13T20:05:56Z")

</div>

I’m able to workaround the issue by replacing the vendor’s TIMEOUTs with “ping -n X \>NUL”.

@jborean93, are there any Ansible flags or tricks that would allow this to work without modifying the vendor’s script?

---

<div class="post-metadata">

**Author:** ![dnmvisser](https://avatars.discourse-cdn.com/v4/letter/d/8e8cbc/32.png) [@dnmvisser](https://forum.ansible.com/u/dnmvisser)\
**Post date:** [April 13, 2023, 8:46pm UTC](https://forum.ansible.com/t/windows-batch-file-via-ansible-error-input-redirection-is-not-supported/37881/3 "2023-04-13T20:46:50Z")

</div>

You could suggest your ping replacement to the vendor. If the vendor then updates their script with your changes, you can have the benefits of running unmodified vendor code.

---

<div class="post-metadata">

**Author:** ![jborean](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/jborean/32/1525_2.png) [@jborean](https://forum.ansible.com/u/jborean)\
**Post date:** [April 19, 2023, 7:10pm UTC](https://forum.ansible.com/t/windows-batch-file-via-ansible-error-input-redirection-is-not-supported/37881/4 "2023-04-19T19:10:21Z")

</div>

Try just doing - win\_command: ‘{{ install\_app\_download\_dir }}\Prerequisites\install\_rabbitmq.bat’. You could also prefix that command with cmd.exe /c path\to\install.bat and see if it helps. Another option is to use ‘- win\_shell: exit (Start-Process -FilePath … -Wait -PassThru).ExitCode’ to spawn it in a new console. Unfortunately that will mean you loose out on viewing any of the output.

There is no good answer here, the vendors script requires it to be run in an environment that input can be redirected but Ansible doesn’t allow that to avoid things hanging if they do prompt for input.

---

<div class="post-metadata">

**Author:** ![Huskers79](https://avatars.discourse-cdn.com/v4/letter/h/d78d45/32.png) [@Huskers79](https://forum.ansible.com/u/Huskers79)\
**Post date:** [April 19, 2023, 7:43pm UTC](https://forum.ansible.com/t/windows-batch-file-via-ansible-error-input-redirection-is-not-supported/37881/5 "2023-04-19T19:43:31Z")

</div>

Thank you for the reply.

I ended up removing the TIMEOUTs from the vendor’s script and replaced them with pings.
