2010-11-21 20 views
16

Tôi đang cố gắng để MSDeploy thực thi tập lệnh PowerShell trên máy chủ từ xa. Đây là cách tôi thực hiện MSDeploy:Chạy PowerShell từ MSdeploy runcommand không thoát khỏi

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

HelloWorld.bat chứa:

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

Các HelloWorld.ps1 chỉ chứa:

Write-Host "Hello world from PowerShell!" 

Tuy nhiên, nó có vẻ như không bao giờ chấm dứt PowerShell. Đây là đầu ra khi chạy 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. 

Bất kỳ ai biết giải pháp?

+0

bất kỳ giải pháp cuối cùng nào có mã nguồn đầy đủ về nó? – Kiquenet

Trả lời

20

kịch bản và vấn đề của bạn trông giống như vấn đề này báo cáo: PowerShell.exe can hang if STDIN is redirected

Nếu đây là trường hợp sau đó thử workaround này: sử dụng -inputformat none:

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

Tôi đã thử điều này với "một msdeploy giả "chương trình gọi tệp .bat như sau:

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(); 
    } 
} 

Bản trình diễn này có cùng vấn đề bạn mô tả và cách giải quyết giúp. Nếu msdeploy gọi tệp .bat theo cách tương tự hoặc tương tự thì hy vọng đây là giải pháp.

+1

-inputformat không ai giải quyết được vấn đề! Cảm ơn! –

+1

Theo Powershell 2.0 và 3.0 [documentation] (http://technet.microsoft.com/en-us/library/hh847736.aspx) 'None' không phải là một đối số' -InputFormat' hợp lệ, vì vậy cách giải quyết này có thể là dựa vào hành vi không xác định. –

2
powershell.exe -file ScriptFile.ps < CON 

Điều này giải quyết được sự cố mà không phải sử dụng các tính năng không có giấy tờ.

+2

Điều này thực sự làm gì? – Doug