batch-filecmdpsexecuncpushd

How do I stop my batch file and pushd from referencing the unc when opening cmd.exe?


I'm trying to run a batch file from a local Windows server that calls on computers in my domain to pull from the shared folder and run an exe. I'm not sure if my script is trying to do too much or too little.

So I run the below batch locally

X:\pstools\psexec.exe \\Computer -d -u DOMAIN\user -p password -i \\SERVER\test\testfile.bat

and testfile.bat:

@echo off
pushd \\SERVER\test\
call program.exe
popd

When I run the script, psexec runs and I get a confirmation that testfile.bat was started on target computer. On the targeted computer nothing happens. If I navigate to the share on the targeted computer and run testfile.bat, I get "CMD.EXE was not started with the above path as the current directory.UNC paths are not supported. Defaulting to Windows directory." From there the computer runs the called .exe with no issues.

If I target this towards another server in my domain it executes perfectly, but not on domain computers. I thought maybe a GPO issue, but I can't find a solution.

Thanks for any knowledge or help provided!


Solution

  • Thanks for all the tips everyone! This is how I ended up getting it working for anyone who might have the same issue.

    Script on Server:

    x:\pstools\psexec.exe \\Computer(or text file with computers listed) -d -s cmd /c (batchfile.bat)
    

    Similiar to what I was trying before, but to ensure you run the command line as System on the remote PC you have to specify "-s cmd". The /c copies the batch to the remote system to run locally. You can include a "-f" to overwrite if you've already copied it previously. I just put the batchfile in the pstools folder.

    Batchfile.bat:

    pushd \\networkdrive
    call (.bat/.cmd/.exe/etc.)
    popd
    

    I disabled the firewall for testing, but I believe you have to open TCP-445/UDP-137 for PSEXEC. Otherwise, that's it. Super simple solution.