2

I am not sure if I should post this one here or in StackOverflow.

I want a BAT that opens a RDP connection file and then, when the connection is closed, logoff the machine.

start /WAIT "ConnectionFile.rdp"
logoff

But the logoff happens instantaly, it doesnt wait for exit. I also try this using C# and Process.WaitforExit().

What should you do? I think is a issue with mstsc.exe when the parameter is a RDP file.

Update: I was testing and this works well in Windows 7, but in Windows 8 and in Windows 7 Thin PC it doesnt work.

Update Using powershell I advance a little. I my bat looks like this, launchin the process in Powershell it works.

powershell -version 2.0 -Sta -ExecutionPolicy UnRestricted Start-Process -Wait -FilePath mstsc -ArgumentList ConnectionFile.rdp; logoff

But if the RDP is a valid file when windows asks the credentials it fails and continue with next process. For demo purposes I changed the logoff for a calc. enter image description here

Ricardo Polo Jaramillo
  • 2,039
  • 2
  • 18
  • 35

2 Answers2

1

Try this:

START /WAIT !_MSTSC! !_FILE! !_CONSOLE!

where

  • !_MSTSC! is the path to MSTSC.EXE
  • !_FILE! is a path to a saved RDP file, containing hostname, login and pwd, perhaps the name of a file to execute on connection, blah blah blah
  • !_CONSOLE! is set to either "" (null) or "/ADMIN" as needed

This hinges WAIT on MSTSC explicitly, not just the "successful open" of your RDP file. As such, it should (!) work a little better.

And... here's an interesting caveat from the START helptext:

    If Command Extensions are enabled, external command invocation
    through the command line or the START command changes as follows:

    When executing an application that is a 32-bit GUI application, CMD.EXE
does not wait for the application to terminate before returning to
the command prompt.  This new behavior does NOT occur if executing
within a command script.

So... what may be needed here is to wrap the MSTSC command and parameters into a CONNECT-REMOTE.CMD file, and wait for THAT to terminate.

George Erhard
  • 814
  • 6
  • 12
  • Thanks @George but It does not work. Look at this image with the result of testing it https://dl.dropbox.com/u/300838/error2.png – Ricardo Polo Jaramillo Jan 30 '13 at 17:51
  • Interesting. The "verify the cert is OK" prompt is interrupting MSTSC, obviously, but didn't think that'd cause WAIT to trigger... do you get the same results if you check the checkbox "Don't Ask me again" and then retry? The only other way I can think of is to kludge a "flag" variable/file that would get set before running MSTSC, and then deleted by the remote session using \\tsclient\ ... and a test loop that would trigger your next step in your batch when the flag file no longer existed. – George Erhard Jan 30 '13 at 18:00
0

For anyone finding this article and fighting with this issue, insert the following rule between the mstsc.exe command and the logoff:

powershell wait-process -name mstsc

When combining with this article: https://www.experts-exchange.com/articles/10032/MSTSC-as-a-Shell.html the mstsc.cmd contains:

C:\Windows\System32\mstsc.exe RDPLocation
powershell wait-process -name mstsc
logoff
Gerald Schneider
  • 23,274
  • 8
  • 57
  • 89