Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I'm trying to remotely execute a PowerShell script using PSEXEC. The PowerShell script is called via a .cmd batch file. The reason we do this is to change the execution policy, run the powershell script then reset the execution policy again:

On the remote server do-tasks.cmd looks like:

powershell -command "&{ set-executionpolicy unrestricted}"  
powershell DoTasks.ps1  
powershell -command "&{ set-executionpolicy restricted}"  

The PowerShell script DoTasks.ps1 just does this for now:

Write-Output "Hello World!"

Both of these scripts live in c:\windows\system32 (for now) just so they're on the PATH.

On the originating server I do this:

psexec \\web1928 -u administrator -p "adminpassword" do-tasks.cmd

When this runs I get the following response at the command line:

c:\Windows\system32>powershell -command "&{ set-executionpolicy unrestricted}"

and the script runs no further.

I can't ctrl-c to break the script and I just see ^C characters, I can type input from the keyboard and the characters are echoed to console.

On the remote server I see that PowerShell.exe and CMD.exe are running in Task Manager's Process tab. If I end these processes then control returns to the command line on the originating server.

I have tried this with just a simple .cmd batch file with a @echo hello world and it works just fine.

Running do-tasks.cmd on the remote server via an RDP session works ok as well.

The originating server is running Windows 2003 SP2, the remote server is running Windows 2008 SP2.

Why is my remote batch file getting stuck when executing via PSEXEC?

share|improve this question
    
Are you somehow being forced to use psexec or can you use winrm instead? What Os is this running on? –  Jim B Apr 22 '10 at 23:39
    
@Jimb - The originating server is running Windows 2003 SP2, the remote server is running Windows 2008 SP2. I'm not constrained to PSEXEC. WinRM is a new one on me, will take a look. –  Kev Apr 22 '10 at 23:53
add comment

2 Answers

up vote 0 down vote accepted

Since the server is running 2k8 I would suspect UAC is causing issues. I would also suggest using winrm instead of psexec. Powershell remoting was one of the best new features of powershell 2.0

share|improve this answer
    
I wouldn't expect the local Administrator account to hang on a UAC hidden prompt, a regular account that's a member of administrators maybe. That said I'll take a look at winrm in the fresh light of day. –  Kev Apr 23 '10 at 0:18
    
This is one thing I've not dived into. PowerShell.exe was designed to not be directly invoked remotely, in certain circumstances. –  Marco Shaw Apr 24 '10 at 0:48
add comment

This is a common issue with POSH. The problem is stdin hangs. Try this:

c:\Windows\system32>powershell -command "&{ set-executionpolicy unrestricted}" < NUL
share|improve this answer
    
I have been looking for the solution for several days and finally found this answer. Thanks a lot!!! –  Yauheni Sivukha Jul 6 '11 at 2:20
    
SonOfNun: You have it right. Using the < NUL works a lot better than other options I've tried. Thanks! –  M.C. Jan 23 '12 at 18:48
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.