Start Process como usuário normal powershell

1

Estou criando um script PowerShell que faz algumas configurações automáticas de novas implantações de computador. Estou em uma situação na qual desejo iniciar um executável como um usuário não administrativo comum a partir de uma instância do console do PowerShell de administrador elevado. A razão é porque se eu lanço de um prompt / script elevado, o executável gera um erro. Aqui está a estrutura do comando:

Start-Process -FilePath (${Env:CommonProgramFiles(x86)} + "\sample.exe") -ArgumentList "/PRODUCT:sample", "/VERSION:2.0", "/MODE:1"

Eu fiz algumas pesquisas e descobri o contrário do que preciso (não administrador para administrador) aqui link mas só vi RunAs para elevar para admin.

Configuração:

  • Educação do Windows 10
  • PS 5

Resolução

Como psexec não ofereceu uma solução para suprimir o login, acabei iniciando o processo da seguinte forma:

 $username = Read-Host "Please enter in a valid username "
 $password = Read-Host "Please enter in a the account password " -AsSecureString
 Start-Process -Credential (New-Object System.Management.Automation.PSCredential($username, $password)) -FilePath (${Env:CommonProgramFiles(x86)} + "\sample.exe") -ArgumentList "/PRODUCT:sample", "/VERSION:2.0", "/MODE:1"

Ele não resolve o problema perfeitamente, mas o usuário pode permanecer no script pelo menos.

    
por djthoms 09.06.2016 / 01:10

2 respostas

1

Depende de qual é o problema. Se você não estiver executando em um contexto de usuário, como na conta SYSTEM, talvez seja necessário executá-lo como um usuário específico, o que geralmente significa especificar um nome de usuário e senha, o que geralmente é problemático.

Se o problema é que você atualmente tem direitos de administrador, mas precisa executar algo sem esses direitos de administrador, isso deve ser possível usando PSExec ou métodos semelhantes sem precisar de um nome de usuário & Senha.

psexec -accepteula -l <CMD>

-l Executar o processo como usuário limitado (desmarca o grupo Administradores e permite somente privilégios atribuídos ao grupo Usuários). No Windows Vista, o processo é executado com baixa integridade.

Deve ser possível chamar o PSExec no PowerShell e fazer com que o PSExec chame o aplicativo original. Também pode ser possível fazer isso por meio do PowerShell diretamente.

Também pode ser possível fazer isso com o PSExec sem precisar que um nome de usuário / senha seja inserido executando algo dentro da sessão do usuário de destino, desde que eles já estejam conectados.

psexec -accepteula -i <session> <CMD>

    
por 09.06.2016 / 05:28
1

Nos meus próprios scripts, eu uso psexec nessas situações.

Você precisa especificar o nome de usuário e a senha para uma conta diferente, bem como um executável que será executado como o usuário especificado.

Isso não é puro PowerShell, mas bom o suficiente para mim. Pode ser possível que um script do PowerShell faça a mesma coisa que psexec faz. Mas a menos que você descubra, isso deve resolver seu problema.

    
por 09.06.2016 / 01:31