how to invoke DOS commands thru powershell on a shared drive

by LeeC at 2012-10-18 12:21:35

I wrote a sizable number of code components to perform a number of tasks around the office for the sake of automation; originally, I had them all on my local hard drive, and things were peachy keen.

Then I had folks ask if they could run my scripts themselves. "Certainly," I said.

Rather than copy the code to each person’s system, it makes sense to store it locally on a network drive. As background, a lot of what happens is REST calls using CURL to a cloud-hosted application. The problem began to appear:

First, to call curl.exe, I’m creating a string called $URL which looks like (for example) "‘-X PUT --data @SetReporter.json … e/’+$Issue and then
cmd /c "curl.exe $URL"

I had to do this because several hours of trial and error convinced me that I couldn’t effectively use the ampersand with a string, and I had to have a string to pass to CURL. However, now that it’s on a shared drive, I’m getting
"CMD.EXE was started with the above path as the current directory.
UNC paths are not supported. Defaulting to Windows directory."

Second, and it’s related, I can’t call a java jar file using a batch file, for the same reason. I can’t find anything that suggests I can pass parameters to CMD to change the current directory (nor am I certain I could do so and invoke an executable on a shared drive.)

Suggestions, anybody?

by nohandle at 2012-10-19 03:36:05
maybe i am oversimplifying the problem but:
The cmd does not support \unc\paths only m:\apped\drives.
map the drive as a letter and retest

btw invoking the curl.exe directly from powershell is not possible? &curl "argument argument" ?

or in powershell 3 &curl --% argument argument
by figueroa2david at 2012-10-23 15:57:56
The easiest way to do this with a cmd.exe environment is to use a pushd entry.
Pushd will change directories, including drive letters, and if you supply a UNC path, it will automatically map a drive, starting with z: and working backwards.

In your case you might do something like create a batch file and use it…
cmd.exe /c ‘mybatch.cmd "$URL"’

mybatch.cmd would contain:
pushd \server\share
curl "%1"