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

如何以其他用户身份执行代码并解决输出空白、PowerShell窗口闪退问题

问题根源
  • 变量作用域不互通:你在当前PowerShell会话中定义的$Setloc无法传递到Start-Process拉起的独立子进程中,且Set-Location执行后默认无返回值,该变量本身为空,完全没有实际作用
  • 输出捕获逻辑错误:Start-Process默认不会将子进程的标准输出传递到当前会话的管道,你直接在后面拼接Out-File只会写入空内容
  • 参数规则不符合要求:powershell.exe的/C参数代表执行完指定命令后立即退出,即便你添加了-NoExit,如果参数顺序错误也不会生效
修正后代码
# 提前定义PGP目录和输出文件路径
$pgpInstallPath = "C:\Program Files (x86)\PGP Corporation\PGP Desktop"
$resultOutputPath = "C:\users\USERNAME\Desktop\test.txt"

$username = 'DOMAIN\Username'
$Password = 'PASSWORD' | ConvertTo-SecureString -Force -AsPlainText
$credential = New-Object System.Management.Automation.PsCredential($username, $Password)

# 整合子进程要执行的完整命令逻辑:切换工作目录→执行pgpwde命令
$runCommand = "Set-Location '$pgpInstallPath'; .\pgpwde --status --disk 0"

# 启动进程时直接重定向标准输出到目标文件
Start-Process powershell.exe -Credential $credential -ArgumentList "/C", $runCommand -RedirectStandardOutput $resultOutputPath -Wait
调整说明
  • 把切换工作目录、执行目标命令的逻辑全部整合到传给子进程的命令串中,规避了跨进程变量无法传递的问题
  • 用Start-Process自带的-RedirectStandardOutput参数直接把子进程的标准输出写入指定文件,代替原本无效的管道输出逻辑
  • 新增-Wait参数让当前会话等待子进程执行完成后再继续后续操作,避免出现文件还没写入就被读取的问题
  • 如果你需要保留执行后的PowerShell窗口不消失,把参数里的/C替换为/K即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 11:39:03