
Existe uma maneira de executar o regedit em vários computadores remotos sem que o UAC apareça no Windows10? a /s
linha de comando on não está funcionando no meu computador de teste do Windows 10 (tenho certeza de que funcionará em meus sistemas Win7, mas a maioria dos meus computadores clientes são Win10).
Em última análise, o objetivo é
- importe um arquivo reg para HKLM para elevar a execução do PowerShell para irrestrita,
- use o Powershell para ativar a proteção/restauração do sistema,
- use o PowerShell para criar um ponto de restauração e finalmente
- importe um arquivo reg para definir a execuçãoPolicy de volta como Restricted ou RemoteSigned. (tudo isso está sendo feito como uma tarefa de pré-patch, aliás).
No meu computador de teste, tudo isso funciona bem, com a exceção de que o regedit...mesmo com o /s
parâmetro...não será executado sem um pop-up do UAC no Windows 10. Eu vi isso no meu computador de teste Win10.
Tentei executar o PowerShell elevado via arquivo bat:
powershell.exe -ExecutionPolicy Bypass -File .\MyScript.ps1
e
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList 'Set-ExecutionPolicy unrestricted -Force' -Verb RunAs}"
mas ambos falham (ou seja, o acesso é negado, a política de execução do PowerShell não é elevada).
Importar o arquivo reg e, em seguida, executar meu script Powershell é o mais próximo do sucesso que consegui.
Eu também tentei isso via Sysinternals psexec, com base em outras soluções pesquisadas [ou seja, chamada psexec para reg.exe para importar], mas isso tem seu próprio conjunto de problemas (psexec precisa de um reg importado para o EULA, então o mesmo problema, não um solução).
Aproveitando isso, também tentei executar o seguinte comando:
C:\Windows\System32\REG.exe ADD HKLM\\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell /v ExecutionPolicy /t REG_SZ /d Unrestricted /f
...Mas isso continua voltando com "ERRO: nome de chave inválido." Provavelmente estou trabalhando nisso há muito tempo (3 dias agora) e só preciso de outro par de olhos. Alguém pode ajudar?
Responder1
Como você tentou várias tentativas diferentes, na verdade existem vários problemas apontados em sua postagem que podem exigir uma resposta. Você não deixou claro como está executando qualquer um desses comandos remotamente. Nenhum dos comandos que você mostrou realmente faz alguma coisa em um computador remoto. Todos eles são executados no computador local. No entanto, você mencionou tentar o PSExec.
Também não tenho conhecimento de nenhuma situação em que o UAC interfira na execução remota de comandos. Portanto, só posso presumir que você está executando os comandos em seu computador local e recebendo solicitações do UAC. Porém, você está fazendo isso como preparação para executar os comandos remotamente.
Portanto, tentarei fornecer suporte básico à execução remota que o colocará no caminho certo. Toda execução remota de comandos requer a abertura de determinadas portas do firewall. Portanto, tenha isso em mente à medida que avança.
O Powershell já possui um mecanismo de execução remota de comandos/scripts.
- Você pode usar a
-ComputerName
opção para determinados comandos para executá-los em um sistema remoto. - Você pode iniciar uma sessão remota interativa com
Enter-PSSession <ComputerName>
eExit-PSSession
. - Você pode usar o
Invoke-Command -ComputerName <ComputerName>
comando para executar qualquer script ou comando remotamente.
Nenhum desses métodos está sujeito à restrição da Política de Execução, a menos que você inicie uma sessão interativa do Powershell e, em seguida, tente executar um script.
Esses comandos serão executados no computador remoto usando sua conta de usuário atualmente conectado. Se você não for um administrador na máquina remota, precisará fornecer adicionalmente um PSCredential
objeto que seja um administrador usando o -Credential
switch.
Alternativamente, você também pode usar PSExec para executar comandos remotos ou executáveis. É preferível executá-los no contexto SYSTEM para evitar QUALQUER problema de permissão, mas geralmente são bem-sucedidos se você simplesmente executá-los no contexto de um administrador na máquina remota.
- Ignore o prompt do EULA com a
-accepteula
opção - Execute no contexto SYSTEM com o
-s
switch - Às vezes, é necessário utilizar a
-i
opção (interativa) para executar certos EXEcutáveis de terceiros corretamente.
Os comandos executados via PSExec não estão sujeitos a restrições do UAC. No entanto, se você tentar executar o Powershell remotamente via PSExec, que por sua vez tenta executar um script, a política de execução atrapalhará, a menos que você também utilize o -ExecutionPolicy Bypass
switch. No entanto, usar o PSExec para executar o Powershell remotamente, que por sua vez executa um script, é um longo caminho para realizar o que você precisa.
Novamente, o PSExec estabelecerá uma conexão com o computador remoto usando o contexto do usuário conectado no momento. Se você não for um administrador no computador remoto, precisará especificar um nome de usuário/senha que use as opções -u
e -p
.
https://docs.microsoft.com/en-us/sysinternals/downloads/psexec
Uma última coisa, você deve sempre lembrar onde o comando está sendo executado (local ou remotamente) e perceber que qualquer recurso que você tentar acessar está sendo feito da perspectiva de onde o comando está sendo executado. Por exemplo, se eu executar o comando C:\MyBatch.bat
em um computador remoto, ele C:\MyBatch.bat
deverá existir no computador remoto.