Posso iniciar um programa a partir da linha de comando para outro usuário logado?

5

Temos uma máquina Windows Server 2008 executando os Serviços de Terminal. Quando os usuários fazem login, um programa personalizado é lançado e fica na bandeja do sistema, o que lhes dá algumas teclas de atalho personalizadas para nossa empresa.

Quando precisamos atualizar este programa, temos que fechar todas as cópias do programa de todas as sessões antes que a nova versão tenha efeito ( mais informações aqui ). Eu posso terminar o processo para todas as sessões facilmente com Taskkill , mas quero saber se há uma maneira fácil de reiniciar o processo para todas as sessões depois.

Eu tenho acesso à conta de administrador, mas não tenho acesso a nenhuma outra senha de usuário.

É possível iniciar um programa a partir da linha de comando para outro usuário logado?

    
por Rachel 28.03.2013 / 17:18

3 respostas

4

Não. O Windows não oferece o tipo de capacidade de representação do usuário que você está perguntando aqui. Não há sudo equivalente ou até mesmo aproximação no Windows.

Não consigo encontrar o documento ou artigo no momento, mas não permitir que a funcionalidade de representação do usuário em estilo sudo no Windows fosse uma decisão de design deliberada nos primórdios do kernel do NT e, como resultado, Estamos muito grudados nisso. (Não há nem mesmo soluções ou truques inteligentes para contorná-lo, como normalmente existem - este está muito profundamente enraizado para se locomover).

No mundo do Windows, para realizar [praticamente] qualquer ação como usuário (seja na execução de um programa, na autenticação do AD ou em qualquer outra coisa), é necessário um token de acesso , que é usado para identificar e autenticar o acesso / privilégios do usuário. Esse token de acesso é somente criado quando o nome da conta e a senha do usuário são fornecidos (no login, para RunAs e assim por diante).

A advertência potencialmente importante (para seus objetivos) é que uma token de acesso pode ser duplicado em um token de representação , que pode ser passado para o Função ImpersonateLoggedOnUser , que pode ser usada para representam o contexto de segurança de um usuário conectado .

Vendo como você é um desses desenvolvedores / programadores que podem saber como trabalhar com os magias arcanos do .NET, isso pode ser útil para você ao escrever um pequeno aplicativo para conseguir o que deseja fazer.

No entanto, para ser bem claro, não há nenhum comando que você possa executar ou processar para representar um usuário do Windows, a não ser codificar um (ou localizar um outro codificado) e, mesmo assim, ele está limitado a usuários cujos tokens de acesso estão disponíveis (usuários logados).

    
por 28.03.2013 / 19:08
2

Se os usuários estiverem conectados, você pode usar algo como owexec para iniciar processos como eles. Não requer sua senha. Usamos isso para algo muito semelhante ao que você descreve, exceto pela parte de serviços de terminal.

Você pode precisar adicionar alguns scripts para reunir todas as sessões ativas e depois segmentá-las individualmente, com a opção -u .

    
por 28.03.2013 / 19:20
-1

Se você está falando de um software local e não de um RemoteApp, então acho que o mais útil no seu caso seria usar o PsExec:

link

Para mais alguns exemplos de uso, você pode acessar o link

    
por 28.03.2013 / 17:47