Não é possível digitar cmd ou Powershell quando executado no Powershell como usuário diferente no Windows 10

2

Quando executo o seguinte código:

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

a cmd windows abre (parece completamente normal e eu posso alterar as configurações ...) mas não consigo digitar nada na janela. Independentemente de ser um usuário normal ou uma conta de administrador, o PowerShell é executado como usuário normal ou administrador. Exceto quando o Powershell é executado como Sistema (via psexec do Sysinternal): então recebo o seguinte erro:

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

Combinei isso com cmd.exe e powershell em vez de todo o cmd-path e adicionei o parâmetro -NoNewWindow , mas nada disso faz diferença (abre uma nova janela apesar do -NoNewWindow ). Quando executar programas "normais" como notepad , tudo funciona como esperado - também quando eu corro %código%. Eu atualmente só tenho o Windows [Versão 10.0.17134.165] para testar e não tenho certeza se isso é o mesmo em outras versões, mas eu acho que é específico do Windows 10 (?).

Outra falha do killjoy em Powershell ou estou faltando alguma coisa?

    
por TNT 25.07.2018 / 20:32

1 resposta

0

Definitivamente, há algo de estranho acontecendo aqui: a janela inicial do PowerShell e o novo prompt de comando parecem parar de aceitar a entrada depois que o novo processo é iniciado. Depois de alternar entre as duas janelas, o prompt de comando começa a aceitar temporariamente a entrada do teclado, mas depois fica travado novamente após a execução de um comando.

Você pode contornar esse problema usando o % co_de do .NET Framework. % diretamente:

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

O prompt de comando resultante age normalmente, assim como a janela existente do PowerShell. Se você não quiser que o PowerShell forneça algumas informações sobre o novo processo, coloque Process.Start no final da segunda linha.

    
por 25.07.2018 / 21:26