2010-11-21 8 views
16

Estoy intentando que MSDeploy ejecute un script de PowerShell en un servidor remoto. Así es como ejecuto MSDeploy:La ejecución de PowerShell desde el comando de ejecución de MSdeploy no sale de

msdeploy \ 
    -verb:sync \ 
    -source:runCommand='C:\temp\HelloWorld.bat', \ 
    waitInterval=15000,waitAttempts=1 \ 
    -dest:auto,computername=$WebDeployService$Credentials -verbose 

HelloWorld.bat contiene:

echo "Hello world!" 
powershell.exe C:\temp\WebDeploy\Package\HelloWorld.ps1 
echo "Done" 

El HelloWorld.ps1 solamente contiene:

Write-Host "Hello world from PowerShell!" 

Sin embargo, parece que nunca se termina PowerShell. Este es el resultado de ejecutar msdeploy:

Verbose: Performing synchronization pass #1. 
Verbose: Source runCommand (C:\temp\HelloWorld.bat) does not match destination (C:\temp\HelloWorld.bat) differing in attributes (isSource['True','False']). Update pending. 
Info: Updating runCommand (C:\temp\HelloWorld.bat). 
Info: 

Info: C:\temp>echo "Hello world!" 
"Hello world!" 

C:\temp\WebDeploy>powershell.exe C:\temp\HelloWorld.ps1 

Info: Hello world from Powershell! 
Info: 

Warning: The process 'C:\Windows\system32\cmd.exe' (command line '/c "C:\Users\peter\AppData\Local\Temp\gaskgh55.b2q.bat 
"') is still running. Waiting for 15000 ms (attempt 1 of 1). 
Error: The process 'C:\Windows\system32\cmd.exe' (command line '/c "C:\Users\peter\AppData\Local\Temp\gaskgh55.b2q.bat"' 
) was terminated because it exceeded the wait time. 
Error count: 1. 

¿Alguien sabe una solución?

+0

¿Alguna solución final con código fuente completo al respecto? – Kiquenet

Respuesta

20

Su escenario y el problema de aspecto similar a este problema reportado: PowerShell.exe can hang if STDIN is redirected

Si este es el caso, entonces intente esta solución: utilizar -inputformat none:

powershell.exe -inputformat none C:\temp\WebDeploy\Package\HelloWorld.ps1 

He intentado esto con "una MSDeploy falsa "programa que llama al archivo .bat de esta manera:

using System.Diagnostics; 
class Program 
{ 
    static void Main(string[] args) 
    { 
     ProcessStartInfo si = new ProcessStartInfo(); 
     si.FileName = "cmd.exe"; 
     si.Arguments = "/c " + args[0]; 
     si.RedirectStandardInput = true; 
     si.UseShellExecute = false; 
     var process = Process.Start(si); 
     process.WaitForExit(); 
    } 
} 

Esta demostración tiene el mismo problema que usted describe y la solución ayuda. Si msdeploy llama al archivo .bat de la misma manera o similar, entonces con suerte se trata de una solución.

+1

-inputformat ninguno resolvió el problema! ¡Gracias! –

+1

De acuerdo con Powershell 2.0 y 3.0 [documentación] (http://technet.microsoft.com/en-us/library/hh847736.aspx) 'None' no es un argumento válido' -InputFormat', por lo que esta solución alternativa puede ser confiando en un comportamiento indefinido –

2
powershell.exe -file ScriptFile.ps < CON 

Esto resuelve el problema sin recurrir a funciones no documentadas.

+2

¿Qué hace esto realmente? – Doug

Cuestiones relacionadas