在powershell中使用重定向的标准句柄生成控制台进程

时间:2015-11-03 09:14:26

标签: powershell redirect stdout stdin spawning

我已经使用带有重定向的stdi / o的System.Diagnostics.Process :: start()启动了一个进程。此过程创建另一个过程。我想在powershell中重定向第二个进程的stdi / o。

下面是一个示例代码,我在其中运行使用System.Diagnostics.Process :: start()创建的cmd.exe进程的perl脚本。我希望在日志文件中看到perl脚本的输出,并将关键笔划发送到perl解释器。

Powershell脚本:

$LogFilePath = ((get-location).ToString() + "\Log.txt");
"test stdio redirection of child process" > $LogFilePath;
$cmdProcess       = New-Object System.Diagnostics.Process;
$cmdProcess.StartInfo.FileName       = "cmd.exe"    
$cmdProcess.StartInfo.UseShellExecute = $false;       
$cmdProcess.StartInfo.RedirectStandardInput = $true;
$cmdProcess.StartInfo.RedirectStandardOutput = $true;
$cmdProcess.StartInfo.RedirectStandardError = $true;    
Register-ObjectEvent $cmdProcess ErrorDataReceived -SourceIdentifier "cmdProcess.ErrorDataReceived" -Action {  if(![string]::IsNullOrEmpty($EventArgs.Data)) { $EventArgs.Data | Add-Content $global:LogFilePath } } 
Register-ObjectEvent $cmdProcess OutputDataReceived -SourceIdentifier "cmdProcess.OutputDataReceived" -Action { if(![string]::IsNullOrEmpty($EventArgs.Data)) { $EventArgs.Data | Add-Content $global:LogFilePath } } 
$cmdProcess.start()
Start-Sleep -s 2 ;
$cmdProcess.BeginErrorReadLine();
Start-Sleep -s 2 ;
$cmdProcess.BeginOutputReadLine();
Start-Sleep -s 2 ;
$cmdProcess.StandardInput.WriteLine("D:\batch_files\CC_Automation\test\hello.pl") ;

hello.pl:

print "Hello\n";
print "press Enter key to exit";
$key = <>;

输出:log.txt的

  

测试子进程的Windows stdio重定向Microsoft Windows [Version   6.1.7601]版权所有(c)2009 Microsoft Corporation。版权所有。   C:\ Windows \ System32下\ WindowsPowerShell \ V1.0&GT; d:\ batch_files \ CC_Automation \测试\ hello.pl

我在&#34; C&#34;中发现了类似的东西。 :https://support.microsoft.com/en-us/kb/190351

0 个答案:

没有答案