林想获得MSDeploy到远程服务器上执行PowerShell脚本。这是我如何执行MSDeploy:

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

HelloWorld.bat包含:

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

在HelloWorld.ps1只包含:

Write-Host "Hello world from PowerShell!"

然而,它看起来像的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.

任何人都知道的溶液

有帮助吗?

解决方案

您的情况和问题类似于此报告的问题: PowerShell.exe可以挂起,如果标准输入重定向

如果是这种情况,然后尝试以下解决方法:使用-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文件然后希望这是一个解决方案。

其他提示

powershell.exe -file ScriptFile.ps < CON

这个解决问题而不诉诸未记录的功能。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top