Estou tentando criar um script PS1 para reiniciar um serviço em um computador, onde o usuário não tem direitos de administrador, então estou tentando executar como usuário administrador, agora estou tentando primeiro abrir o Bloco de Notas, mas quando executo este script:
# Define el nombre del servicio, usuario y contraseña
$ServiceName = "ApacheDtdlIdServer"
$AdminUser = "User"
$AdminPassword = "C0ntraseña"
$startWithElevatedRights = "notepad"
# Convierte la contraseña en un SecureString
$SecurePassword = ConvertTo-SecureString $AdminPassword -AsPlainText -Force
# Crea el objeto de credenciales
$credentials = New-Object System.Management.Automation.PSCredential ($AdminUser, $SecurePassword)
$ps = Start-Process -PassThru -FilePath powershell -Credential $credentials -ArgumentList '-noprofile -command &{Start-Process ', $startWithElevatedRights, ' -Wait -verb runas}'
$ps.WaitForExit()
Recebo o erro:
Start-Process: Este comando não pode ser executado devido ao erro: O nome do diretório é > inválido. Em C:\Users\IsaacSanzIT\Desktop\Rider\RestartScanner.ps1: 13 Caractere: 7
Eu tentei as coisas que dizem em outras perguntas no StackOverflow, como esta usando o Runas, alguém sabe como executar o notepad, ou mesmo reiniciar um serviço usando a conta de administrador? Obrigado!
A mensagem de erro
The directory name is invalid
indica que o processo de destino, que por padrão herda o diretório de trabalho (atual) do chamador , não tem permissão para acessar esse diretório .Esta é uma armadilha comum ao usar
Start-Process
com-Credential
, ou seja, ao iniciar um processo como um usuário diferente . [1]-WorkingDirectory
parâmetro para especificar um diretório de trabalho que o usuário alvo tenha permissão para acessar;C:\
geralmente é uma aposta segura.Portanto:
[1] Observe que, embora os administradores possam geralmente acessar todos os diretórios que um determinado usuário pode, isso só se aplica se o processo em execução com a identidade de usuário administrador já estiver elevado . No entanto, como
Start-Process
não permite que você inicie simultaneamente um processo como outro usuário e com elevação, aStart-Process
chamada externa - aquela que usa-Credential
- deve necessariamente criar um processo não elevado primeiro, e somente em uma segunda etapa a elevação como esse usuário é possível (a chamada aninhadaStart-Process -Verb RunAs
); veja esta resposta para detalhes.