You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何抑制PowerShell脚本启动的应用在控制台输出的调试信息?

问题描述

我有一个PS1脚本,用于启动一系列应用,启动opentrack的命令示例如下:

$this.apps.Add($(Start-Process "$($global:openTrackDir)\opentrack.exe" `
-WorkingDirectory "$($global:openTrackDir)" -Verb RunAs -PassThru)

使用Add方法是为了后续能通过应用引用关闭它们。但opentrack会在控制台输出调试信息:

DEBUG [C:\repos\opentrack\api/plugin-support.hpp:106]: library "kinect-face" failed: "Cannot load library C:\Program Files\opentrack\modules\\opentrack-tracker-kinect-face.dll: Can't

我尝试过相关解决方案但无效,请问如何有效消除这些控制台消息?

解决方案

方法1:通过[Diagnostics.Process]类启动(推荐,适配管理员权限+输出重定向)

当使用-Verb RunAs时,Start-Process默认启用UseShellExecute=true,此时无法直接重定向输出。改用.NET进程类可以绕开这个限制,同时保留管理员权限和进程引用:

# 创建进程对象
$process = New-Object System.Diagnostics.Process
$process.StartInfo.FileName = "$($global:openTrackDir)\opentrack.exe"
$process.StartInfo.WorkingDirectory = "$($global:openTrackDir)"
# 请求管理员权限
$process.StartInfo.Verb = "RunAs"
# 启用输出重定向(必须设置为false)
$process.StartInfo.UseShellExecute = $false
$process.StartInfo.RedirectStandardOutput = $true
$process.StartInfo.RedirectStandardError = $true
# 保留程序窗口(若不需要可设为true)
$process.StartInfo.CreateNoWindow = $false

# 启动进程并异步读取输出(避免阻塞)
$process.Start() | Out-Null
$null = $process.StandardOutput.ReadToEndAsync()
$null = $process.StandardError.ReadToEndAsync()

# 将进程对象加入列表,用于后续关闭
$this.apps.Add($process)

方法2:通过嵌套PowerShell进程实现管理员权限+输出抑制

如果不想用.NET类,可以通过启动一个带管理员权限的PowerShell子进程,在子进程内重定向opentrack的输出:

# 构造启动opentrack的命令,包含输出重定向
$opentrackCmd = "& ""$($global:openTrackDir)\opentrack.exe"" >NUL 2>&1"

# 启动管理员权限的PowerShell进程,执行上述命令
$process = Start-Process powershell.exe -ArgumentList "-NoProfile -Command $opentrackCmd" `
    -Verb RunAs -PassThru -WorkingDirectory "$($global:openTrackDir)"

# 将子进程对象加入列表,后续关闭该进程会终止opentrack
$this.apps.Add($process)

方法3:无管理员权限场景下直接重定向输出

如果不需要管理员权限启动opentrack,可以直接用Start-Process的重定向参数,将输出导向空设备:

$this.apps.Add($(Start-Process "$($global:openTrackDir)\opentrack.exe" `
-WorkingDirectory "$($global:openTrackDir)" -PassThru `
-RedirectStandardOutput "NUL" `
-RedirectStandardError "NUL")

内容的提问来源于stack exchange,提问作者rainbow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 20:35:59