如何从.NET的父子PowerShell脚本中收集Verbose流?

时间:2013-12-20 02:00:45

标签: c# .net powershell

我有:C#.NET使用PowerShell()对象,调用一个powershell脚本,调用另一个脚本。

C# - > Powershell的(母体) - > Powershell的(子)。 [捕获详细:父作品,孩子没作]。

我的代码CORRECTLY从第一个(父)powershell脚本中获取/流动详细信息。但是,我无法从(子)PowerShell脚本中获取Verbose流。注意:如果我直接调用hello1.ps,它可以工作(因为它不是孩子)。

(我已经读过很多文章/搜索/其他stackoverflow答案。大多数人都会谈论如何捕获它一次,或者推荐`$ verbosepreference)。

解决方案?谢谢!

    public void Run()
    {
        var ps = PowerShell.Create();
        ps.AddScript("`$verbosepreference='continue'"); // <-- tried this, no effect.
        ps.AddScript("set-location \"" + dir + "\"");
        ps.AddScript(System.IO.File.ReadAllText("./hello-caller.ps1"));
        ps.AddParameter("name", "A");
        ps.AddParameter("where", "B");

        var output = new PSDataCollection<PSObject>();
        output.DataAdded += Verbose_DataAdded;

        var results = ps.BeginInvoke<PSObject, PSObject>(null, output, null, AsyncInvoke, null);
    }

    void Verbose_DataAdded(object sender, DataAddedEventArgs e)
    {
        var source = ((PSDataCollection<PSObject>) sender);
        var msg = source[e.Index].ToString();

        Console.WriteLine(msg);
    }

--- hello-caller.ps1 ---
Param(
    [string]$name,
    [string]$where
)

./hello.ps1 $name $where

--- hello.ps1 ---
Param(
    [string]$name,
    [string]$where
)

$i = 0
while ($i -le 30) {
    Write-Verbose "Hello " $name " from " $where
    Start-Sleep -s 1
    $i++
}

return true

0 个答案:

没有答案