我写了一个PowerShell脚本来获取本地计算机组中的用户列表。执行时,CMD打开并输入变量值。输入变量后,PsExec在第二个CMD窗口中打开,执行命令后,两个窗口都关闭。
$computer=Read-Host "Computer"
$login=Read-Host "Login"
$password=Read-Host "Password" -AsSecureString
$group=Read-Host "Group"
Start-Process psexec -Verb runAs -ArgumentList "-i \\$computer -u $computer\$login -p $password -s net localgroup ""$group"""
字符串
我需要CMD与PsExec不关闭。这样我就可以看到用户列表。添加“暂停”在代码的末尾不允许你只关闭第一个CMD窗口。
“-NoNewWindow”参数应该阻止第二个窗口打开。和“pouse”一起使用是一个解决方案。但是“-NoNewWindow”不起作用(
还有其他的选择吗?或者如何使“-NoNewWindow”工作?
2条答案
按热度按时间ztyzrc3y1#
我得到的解决方案。显示用户列表,不关闭窗口。
NoNewWindow
而不是Verb Runas
。字符串
yqkkidmi2#
Start-Process
调用同步,请添加-Wait
-Verb Runas
,即请求 elevation(以管理员权限运行)* 总是 * 在新窗口中运行提升的进程-这就是为什么它不能与-NoNewWindow
组合。-i
;当目标是远程机器时使用-i
会导致进程在 * 远程 * 机器上的窗口中运行。psexec
命令后暂停,以便您可以检查其输出(和潜在的错误消息),请通过cmd.exe
* 调用psexec
*,这允许您附加pause
调用。因此,请尝试以下操作(使用here-string简化引号):
字符串
一个替代方案是使用提升运行PowerShell脚本 * 本身 *,在这种情况下,您根本不需要
Start-Process
,您可以 * 直接 * 调用psexec
,因为提升进程启动的子进程也会提升。型
#requires -RunAsAdministrator
Requires statement,这使得PowerShell拒绝运行脚本,除非调用进程(PowerShell会话)被提升。