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

PowerShell脚本执行后PsExec窗口自动关闭,-NoNewWindow无效怎么解决?

解决PsExec执行后窗口自动关闭的问题

核心问题分析

  1. 原脚本中$password是SecureString类型,直接传给PsExec的-p参数会导致解析错误,因为PsExec需要明文密码。
  2. PsExec执行完指定命令后会自动退出窗口,需要让它启动一个保持打开的CMD会话。
  3. 使用-Verb runAs请求权限提升时,Windows会强制创建新窗口,-NoNewWindow参数会被忽略,无法生效。

解决方案代码

$computer = Read-Host "Computer"
$login = Read-Host "Login"
$securePassword = Read-Host "Password" -AsSecureString
# 将SecureString转换为明文密码,适配PsExec的参数要求
$password = [System.Net.NetworkCredential]::new("", $securePassword).Password
$group = Read-Host "Group"

# 通过cmd /k让PsExec执行完命令后保持窗口打开,注意引号转义
Start-Process psexec -Verb runAs -ArgumentList "-i \\$computer -u $computer\$login -p `"$password`" -s cmd /k `"net localgroup `"`"$group`"`"`""

关键说明

  • 密码转换:利用System.Net.NetworkCredential将安全字符串转为明文,解决PsExec无法识别密码的问题。
  • 保持窗口打开:通过cmd /k命令让CMD窗口在执行完net localgroup后不自动退出,方便查看输出结果。
  • 引号转义:嵌套多层命令时,用`"转义双引号,避免参数解析混乱。

关于-NoNewWindow无效的补充

如果不需要管理员权限(可去掉-Verb runAs),-NoNewWindow可以生效,此时可以直接在当前PowerShell窗口执行命令并通过pause阻止窗口关闭:

$computer = Read-Host "Computer"
$login = Read-Host "Login"
$securePassword = Read-Host "Password" -AsSecureString
$password = [System.Net.NetworkCredential]::new("", $securePassword).Password
$group = Read-Host "Group"

& psexec -NoNewWindow -i \\$computer -u $computer\$login -p $password -s net localgroup "$group"
pause

注意:这种方式无法获取系统权限(-s参数可能失效),仅适用于普通权限场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 04:10:06