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?

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.


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.


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"

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.


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.



-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
}

Este parece ser um subconjunto da resposta do MDMoore313 , de mais de quatro anos atrás.
Scott
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.