Como posso verificar se o cmd.exe está desabilitado pelo administrador?

3

Estou escrevendo um script VB que verifica se os aplicativos estão disponíveis e acessíveis, por exemplo, cmd.exe, powershell.exe e assim por diante.

Meu script me permite ver se um aplicativo existe (ele funciona ou não e retorna um booleano)

Se o cmd estiver desativado por meio do GPO, cmd ainda funcionará tecnicamente à medida que for carregado, você não poderá usá-lo.

Eu preciso de alguma forma de verificar se cmd foi desativado - sem direitos administrativos.

Eu tentei executar o shell (cmd.exe), isso retornaria um verdadeiro ou um falso se o aplicativo fosse lançado assim sempre retornaria verdadeiro mesmo se desativado (e falso se o aplicativo não existisse).

Qual seria a abordagem correta, usando - de preferência usando VB para verificar se o cmd foi desativado que funcionaria nessas circunstâncias?

    
por TheHidden 04.05.2018 / 11:26

1 resposta

0

Verifique se o usuário tem permissão para usar o prompt de comando.

Na verdade, não é possível verificar ativado / desativado porque a abertura do prompt de comando sempre funcionará, é apenas uma atividade ativada / desativada. Eu usei a idéia de Scott de tentar alguma coisa e ver se funciona. Na minha situação, eu não tinha permissão para criar um arquivo no diretório, então tentei outra coisa.

Solução: Uma janela cmd oculta é iniciada com um eco simples. (ProcesID (= saída) é colocado em uma string) = > 2 cenários possíveis: 1. Se cmd estiver habilitado, ele será fechado após este comando (devido a / c). 2. Se desabilitado, ele permanecerá aberto, com a mensagem "O prompt de comando está desabilitado pelo administrador", aguardando o pressionamento de tecla.

Em seguida, uma lista de tarefas com o PID desse cmd é obtida e colocada em uma string com o ShellRun função do bburns.km com a mudança proposta por Pupa Rebbe no stackoverflow. 1. Se o PID estiver na lista, o cmd existe e, portanto, não foi permitido (está suspenso). O cmd é morto. 2. Se o PID não estiver na string, significa que o cmd foi fechado como deveria e, portanto, está ativado.

Este é o código:

' Check if user is allowed to use the command prompt '
' by starting temporary cmd.exe and see if it hangs. '
Function IsCmdAllowed() As Boolean

  Dim TaskId As String, TaskList As String

  IsCmdAllowed = False

  ' Start hidden cmd, echo to have something that doesn't harm, keep Taskid. '
  TaskId = Shell("cmd.exe /c timeout /t 5 /nobreak echo ""hihi""", vbHide)

  ' not sure if waiting 0,5 sec is really necessary. '
  Application.Wait (Now + TimeValue("0:00:01") / 2)

  ' See if cmd still exists (check PID) and put data of cmd in string. '
  TaskList = ShellRun("Tasklist /fi ""PID eq " & TaskId & """ /nh")

  ' If The TaskId of cmd is in the string, it still exists'
  If Not TaskId = "" And _
     InStr(TaskList, TaskId) Then
    ' Kill the temporary cmd '
    Shell ("TASKKILL /PID " & TaskId)
  Else
    IsCmdAllowed = True
  End If

End Function

'Run a shell command, returning the output as a string: see bburns.km. '
Public Function ShellRun(sCmd As String) As String

  Dim oShell As Object, oExec As Object

  Set oShell = CreateObject("WScript.Shell")

  'run command
  Set oExec = oShell.Exec(sCmd)

  ShellRun = oExec.StdOut.ReadAll

End Function
    
por 31.05.2018 / 20:03

Tags