【问题标题】:Parent PowerShell Console Seems to Control Child PowerShell Console I/O父 PowerShell 控制台似乎控制子 PowerShell 控制台 I/O
【发布时间】:2020-06-25 19:42:20
【问题描述】:

$PSVersionTable 输出是

Name                           Value
----                           -----
PSVersion                      5.1.18362.628
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.18362.628
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

[System.Environment]::OSVersion.Version 输出为

Major  Minor  Build  Revision
-----  -----  -----  --------
10     0      18363  0

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe 以本地管理员组成员的用户身份启动,但未处于提升模式。将此称为“父”控制台。

在父控制台中,执行(其中“用户名”应替换为以交互方式登录到计算机的相同或不同用户)

Start-Process -FilePath powershell.exe -Credential UserName

输入正确的“用户名”密码后,将打开一个新的 PowerShell 窗口(我们称之为“子”控制台)。在其中,键入“exit”,然后按 Enter/Return 键。子控制台没有任何反应:没有字母出现,Enter/Return 没有被处理。

切换到父控制台,按空格键四次。当按下空格键时,“exit”将出现在子控制台中。再按一次空格键将在子进程中处理“Enter/Return”键,然后退出。

我已经在另一台运行 Win 10 2016 版(10.0 build 14393)的机器上进行了尝试,结果相同。

这似乎不对。这样对吗?如果是,我该如何避免?

谢谢。

【问题讨论】:

  • 似乎两个进程(通过所描述的过程创建)都阻塞键盘输入相互。如果我使用-Wait 开关,那么至少 child 进程接受键盘输入...
  • 感谢 JosefZ,不幸的是,-Wait 开关会暂停其他进程,直到子进程退出。正如您所指出的,它们在输出方面都处于糟糕的状态。

标签: powershell


【解决方案1】:

这似乎不对。对吗?

不,很遗憾,这是一个长期存在的错误,在 PowerShell 7.0 中仍然存在;已在this GitHub issue 报告。

JosefZ 在评论中缩小范围:

似乎两个进程(通过所描述的过程创建)阻塞键盘输入相互。如果我使用-Wait 开关,那么至少 child 进程接受键盘输入...


如何避免?

解决方法是使用标准runas.exe utility

runas /user:UserName powershell.exe

警告:正如您所指出的,HOMEPATH(可能还有 HOMEDRIVE)环境变量在新会话中未正确设置(从 Windows 10 版本 1909 开始): HOMEPATH 意外指向\WINDOWS\system32 而不是用户的主路径;相比之下,USERPROFILE 确实包含预期值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多