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

在非交互模式下从C#执行PowerShell,c#,powershell,C#,Powershell,我正在使用System.Management.Automation命名空间在C#中运行一些PowerShell脚本。 这非常有效,除了在调用脚本时,我会非常短暂地看到一个命令窗口在屏幕上闪烁,然后消失。这种行为在我的应用程序中是不可接受的 我可以通过启动一个新进程并设置CreateNoWindow=true来避免这种行为,但是我更喜欢使用托管PowerShell库。我怎样才能以非交互式的方式做到这一点,而不会在屏幕上闪烁 导致窗口闪烁的某些PowerShell示例: using (PowerSh

我正在使用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();
}

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

我认为您需要自定义运行空间我查看了自定义运行空间和初始会话状态,但找不到任何与UI交互有关的内容。