如何从powershell进程获取输出

时间:2016-02-17 08:22:55

标签: powershell powershell-v3.0 powershell-ise

这是代码

function RunPowershellAsAdmin($CommandToBeExecuted)
{
    If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
      {   
        #$arguments = "& '" + $myinvocation.mycommand.definition + "'" 
        Start-Process powershell -Verb runAs -ArgumentList "$CommandToBeExecuted" -Verbose
      }
 }
 RunPowershellAsAdmin("& { Import-Module WebAdministration; if(Test-Path 'IIS:\Sites\$Website_Name') { Remove-WebSite -Name  '$Website_Name'; } }")

-Verb和-RedirectStandardOutput不在同一参数中,因此我无法使用-RedirectStandardOutput来获取流程输出as per answer from this link

我想在隐藏窗口中运行该进程,等待它返回并获取错误,输出和退出代码。

还有其他解决方案吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

如果除了重定向任何标准流之外还需要访问两个RunAs,您需要直接使用System.Diagnostics.ProcessSystem.Diagnostics.ProcessStartInfo类。有关如何处理重定向流的更多信息,请参见MSDN

$startInfo = new-object System.Diagnostics.ProcessStartInfo
$startInfo.FileName = "powershell"
$startInfo.Arguments = "& { Import-Module WebAdministration; ... }"
$startInfo.Verb = "runas"
$startInfo.RedirectStandardOutput = $true

$process = [System.Diagnostics.Process]::Start($startInfo)

$output = $process.StandardOutput.ReadToEnd()

$process.WaitForExit()