我有: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