在非交互模式下从C#执行PowerShell

时间:2018-04-24 21:08:24

标签: c# powershell

我正在使用System.Management.Automation命名空间在C#中运行一些PowerShell脚本。 这非常有效,除非我调用脚本时,我非常简单地看到一个命令窗口闪烁到屏幕上然后消失。我的应用程序无法接受此行为。

我可以通过启动新进程并设置CreateNoWindow = true来避免此行为,但我更喜欢使用托管PowerShell库。如何以非交互方式在屏幕上闪烁?

导致窗口闪烁的某些PowerShell示例:

using (PowerShell ps = PowerShell.Create())
{
    ps.AddCommand(@"Get-WindowsUpdateLog");
    ps.AddParameter(@"-LogPath", @"C:\WindowsUpdate.Log");
    var psOutput = ps.Invoke();
}

1 个答案:

答案 0 :(得分:2)

我相信您看到的Flash是因为Get-WindowsUpdateLog函数内部调用tracerpt.exe这是一个控制台应用。从GUI运行控制台应用程序会导致闪存。 (如果你从ISE运行GetWindowsUpdateLog,你会看到相同的闪光灯。)不幸的是,你无法做到这一点。您可以修改Win32应用程序以在启动时分配控制台句柄控制您看到闪存但您仍然可以看到它。