como executar um script do PowerShell como administrador

57

Na área de trabalho do Windows 7, tenho o script.ps1, que precisa de privilégios de administrador (ele inicia um serviço). Quero clicar neste script e executá-lo com privilégios de administrador.

Qual é a maneira mais fácil de conseguir isso?

Sajee
fonte

Respostas:

48

Aqui está uma maneira de fazer isso, com a ajuda de um ícone adicional na área de trabalho. Eu acho que você poderia mover o script para outra pessoa, se quisesse ter apenas um ícone na área de trabalho.

  1. Crie um atalho para o script do Powershell na área de trabalho
  2. Clique com o botão direito do mouse no atalho e clique em Propriedades
  3. Clique na guia Atalho
  4. Clique em Avançado
  5. Selecione Executar como administrador

Agora você pode executar o script elevado clicando duas vezes no novo atalho na área de trabalho.

Kez
fonte
36
Isso funcionou para mim, mas Executar como administrador só se tornou disponível depois de adicionar powershell -f em frente ao caminho do script, de modo a "completa" o comando ...
mousio
2
@mousio - Eu precisava disso também, obrigado pelo comentário
m.edmondson
@Mousio, você pode me dizer por que esse comando funciona?
SShaheen
7
@SShaheen - para que o Run as Administrator esteja disponível, o atalho precisa apontar para algum tipo de executável (por exemplo, powershell.exe), em vez de apenas o documento ou script ao qual o atalho apontou originalmente. Um atalho para script.ps1obras, assim como um atalho para powershell.exe -f script.ps1, mas o último pode ser configurado para executar como administrador (ver powershell.exe /?pela explicação do -fou -Fileswitch)
mousio
16

Nos sistemas habilitados para UAC, para garantir que um script esteja sendo executado com privilégios totais de administrador, adicione este código no início do seu script:

param([switch]$Elevated)

function Test-Admin {
  $currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
  $currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
}

if ((Test-Admin) -eq $false)  {
    if ($elevated) 
    {
        # tried to elevate, did not work, aborting
    } 
    else {
        Start-Process powershell.exe -Verb RunAs -ArgumentList ('-noprofile -noexit -file "{0}" -elevated' -f ($myinvocation.MyCommand.Definition))
}

exit
}

'running with full privileges'

ao executar seu script com a opção -elevated, ele tentará elevar privilégios antes de executar.

MDMoore313
fonte
Se o script requer argumentos-parâmetros?
precisa saber é o seguinte
e se isso me disser que está sendo executado com privilégios totais, mas meu código ainda indicar privilégios administrativos insuficientes?
Mike.b93 24/03
@Kiquenet adicione-o param(...)na parte superior e encaminhe-os imediatamente antes -elevated, você precisará ser inteligente sobre como criar o ArgumentList, provavelmente desejará usar o String[]formulário.
TWiStErRob 11/01
muito bacana - melhor do que criar um atalho
Mikey
13

se você estiver no mesmo PowerShell, poderá fazer o seguinte:

Start-Process powershell -verb runas -ArgumentList "-file fullpathofthescript"
mjsr
fonte
O problema disso é que ele altera o diretório de trabalho do script chamado C:\Windows\System32. Uma alternativa que preserva o diretório atual: stackoverflow.com/a/57033941/2441655
Venryx 15/07
4

Como está na área de trabalho, eu diria que a maneira mais fácil de fazer isso é arrastá-la para o gadget de elevação .

Caso contrário, você poderá criar um script separado usando o elevatecomando no seu script ps1.

Ou, você pode aplicar elevateapenas ao bit de inicialização do serviço.

badp
fonte
1

O PowerShell ISE vive em% windir% \ system32 \ WindowsPowerShell \ v1.0 \ PowerShell_ISE.exe. Você pode clicar com o botão direito do mouse e selecionar "Executar como administrador" e executar o script a partir daí.

Você também pode encontrá-lo no logotipo do Windows> Todos os programas> Acessórios> Windows PowerShell e fazer o mesmo com esses atalhos.

vapcguy
fonte
0

Se você deseja uma opção para iniciar um script do Powershell como administrador, diretamente no menu de contexto do Explorer, consulte a seção 2 da minha resposta aqui: https://stackoverflow.com/a/57033941/2441655

Venryx
fonte
-1

Adicione isso ao início do script:

$currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
$testadmin = $currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
if ($testadmin -eq $false) {
Start-Process powershell.exe -Verb RunAs -ArgumentList ('-noprofile -noexit -file "{0}" -elevated' -f ($myinvocation.MyCommand.Definition))
exit $LASTEXITCODE
}
Anthony
fonte
Este parece ser um subconjunto da resposta do MDMoore313 , de mais de quatro anos atrás.
Scott