2010-11-21 12 views
16

MSDeployでリモートサーバー上のPowerShellスクリプトを実行しようとしています。MSDEnplからのPowerShellの実行runco​​mmandが終了しない

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

HelloWorld.ps1しか含まれています:

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

HelloWorld.batは含まれています。これは私がする場合msdeployを実行する方法であるPowerShellが終了したことがないように

Write-Host "Hello world from PowerShell!" 

しかし、それはそうです。これは、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. 

解決方法を知っている人はいますか?あなたのシナリオと問題

+0

それについての完全なソースコードを含む最終解決策はありますか? – Kiquenet

答えて

20

は、この報告された問題のようになり: PowerShell.exe can hang if STDIN is redirected

このような場合は、この回避策を試してください:-inputformat noneを使用します。

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

私は偽の場合msdeploy「でこれを試してみました"このような.batファイルを呼び出すプログラム:

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

このデモでも同じ問題があります説明し、回避策が役立ちます。 msdeployが同じまたは同様の方法で.batファイルを呼び出す場合、うまくいけば、これが解決策です。

+1

-inputformat誰も問題を解決しませんでした。ありがとう! –

+1

Powershell 2.0と3.0 [documentation](http://technet.microsoft.com/en-us/library/hh847736.aspx)によれば、 'None'は有効な' -InputFormat'引数ではないので、この回避策は定義されていない動作に依存します。 –

2
powershell.exe -file ScriptFile.ps < CON 

これは、文書化されていない機能に頼らずに問題を解決します。

+2

これは実際に何をしていますか? – Doug

関連する問題