在 Windows 10 中以不同用户身份从 Powershell 运行时无法在 cmd 或 Powershell 窗口中输入

在 Windows 10 中以不同用户身份从 Powershell 运行时无法在 cmd 或 Powershell 窗口中输入

当我执行以下代码时:

$creds = Get-Credential -UserName other -Message none
# answering the creds dialogue with correct password here
Start-Process C:\Windows\system32\cmd.exe -Credential $creds

打开一个cmd窗口(看起来完全正常,我可以更改设置……)但我无法在窗口中输入任何内容。无论它是普通用户还是管理员帐户,并且 powershell 本身是以普通用户还是管理员身份运行。除非当 Powershell 以系统身份运行(通过 Sysinternal 的psexec):然后我收到以下错误:

Start-Process : This command cannot be run due to the error: Access denied
At line:1 char:1
+ Start-Process C:\Windows\system32\cmd.exe -Credential $creds
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Start-Process], InvalidOperationException
    + FullyQualifiedErrorId : InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand

我将其与cmd.exe和结合起来,而powershell不是整个 cmd-path,并添加了参数-NoNewWindow,但这些都没有任何区别(尽管有 ,但仍会打开一个新窗口-NoNewWindow)。当运行“正常”程序时,notepad一切都按预期工作 - 当我运行例如 时也是如此runas /user:other cmd。我目前只有 Windows [Version 10.0.17134.165] 可以测试,我不确定其他版本是否也是如此,但我认为这是 Windows 10 特有的(?)。

Powershell 中的另一个令人扫兴的缺陷,还是我遗漏了什么?

答案1

这里肯定发生了一些奇怪的事情:启动新进程后,启动的 PowerShell 窗口和新的命令提示符似乎都停止接受输入。在两个窗口之间切换一段时间后,命令提示符暂时开始接受键盘输入,但在执行命令后又卡住了。

您可以使用 .NET Framework 的Process.Start直接方法:

$creds = Get-Credential -UserName 'theUser' -Message ' '
[System.Diagnostics.Process]::Start('cmd', $creds.UserName, $creds.Password, '')

生成的命令提示符正常运行,现有的 PowerShell 窗口也是如此。如果您不希望 PowerShell 输出有关新进程的一些信息,请添加| Out-Null到第二行的末尾。

答案2

这是 PSReadLine 中的一个错误,运行如下:

Remove-Module PSReadLine

在父进程中修复 stdin 重定向并允许您在控制台中输入。

相关内容