1

Когда я выполняю следующий код:

$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 запускается как система (через psexec Sysinternal): тогда я получаю следующую ошибку:

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 и добавил параметр -NoNewWindow но ничего из этого не имеет значения (открывает новое окно, несмотря на -NoNewWindow). Когда запускаются "нормальные" программы, такие как notepad все работает как положено - даже когда я запускаю, например, runas /user:other cmd . В настоящее время у меня есть только Windows [Версия 10.0.17134.165] для тестирования, и я не уверен, что то же самое в других версиях, но я думаю, что это специфично для Windows 10 (?).

Еще одна ошибка в Powershell или я что-то упустил?

1 ответ1

0

Здесь определенно происходит что-то странное: как стартовое окно PowerShell, так и новая командная строка, кажется, перестают принимать вводные данные после запуска нового процесса. После небольшого переключения между двумя окнами командная строка временно начинает принимать ввод с клавиатуры, но затем снова застревает после выполнения команды.

Вы можете обойти эту проблему, используя .NET Framework Process.Start метод напрямую:

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

Полученная командная строка работает нормально, как и существующее окно PowerShell. Если вы не хотите, чтобы PowerShell выводил некоторую информацию о новом процессе, нажмите | Out-Null на конец второй строки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .