관리자로 powershell 스크립트를 실행하는 방법


55

내 Windows 7 데스크톱에는 script.ps1이 있으며 관리자 권한이 필요합니다 (서비스 시작). 이 스크립트를 클릭하고 관리자 권한으로 실행하고 싶습니다.

이것을 달성하는 가장 쉬운 방법은 무엇입니까?

답변:


47

바탕 화면에 추가 아이콘을 사용하여이를 수행하는 한 가지 방법이 있습니다. 데스크탑에 하나의 아이콘 만 갖고 싶다면 스크립트를 다른 사람으로 옮길 수 있습니다.

  1. 데스크탑에서 Powershell 스크립트에 대한 바로 가기 생성
  2. 바로 가기를 마우스 오른쪽 단추로 클릭하고 속성을 클릭하십시오.
  3. 바로 가기 탭을 클릭 하십시오
  4. 고급을 클릭하십시오
  5. 관리자 권한으로 실행을 선택 하십시오.

이제 바탕 화면에서 새 바로 가기를 두 번 클릭하여 스크립트 권한을 높일 수 있습니다.


35
이것은 나를 위해 일했지만 , 명령으로 "완료"하기 위해 스크립트 경로 앞에 추가 한 후에 만 관리자powershell -f 권한으로 실행을 사용할 수있게되었습니다 …
mousio

2
@mousio-댓글도 감사합니다
m.edmondson

@mousio 왜 명령이 작동하는지 말해 줄 수 있습니까?
SShaheen

7
@SShaheen- 관리자실행을 사용하려면 바로 가기가 원래 가리키는 문서 나 스크립트 대신 일종의 실행 파일 (예 : powershell.exe)을 가리켜 야합니다. 바로 가기 script.ps1처럼 작동하는 바로 가기 powershell.exe -f script.ps1이지만 후자는 관리자로 실행되도록 설정할 수 있습니다 ( 또는 스위치에 powershell.exe /?대한 설명 참조 )-f-File
mousio

16

UAC 사용 시스템에서 스크립트가 전체 관리자 권한으로 실행되도록하려면 스크립트 시작 부분에 다음 코드를 추가하십시오.

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'

-elevated 스위치를 사용하여 스크립트를 실행하면 실행 전에 권한 상승을 시도합니다.


스크립트에 arguments-parameters가 필요한 경우?
Kiquenet

이것이 전체 권한으로 실행되고 있다고 말하지만 코드에 여전히 관리 권한이 충분하지 않다고 말하면 어떻게됩니까?
mike.b93

에 추가 @Kiquenet param(...)위에 오른쪽 전에 그들을 전달 -elevated, 당신이 구축 방법에 대한 영리해야합니다 ArgumentList, 아마도 사용하는 것이 좋습니다 String[]양식을.
TWiStErRob

매우 멋진-바로 가기를 만드는 것보다 낫습니다
Mikey

13

동일한 파워 쉘에 있다면 다음과 같이 할 수 있습니다.

Start-Process powershell -verb runas -ArgumentList "-file fullpathofthescript"

이것의 문제점은 호출 된 스크립트의 작업 디렉토리를로 변경한다는 것 C:\Windows\System32입니다. 현재 디렉토리를 보존하는 대안 : stackoverflow.com/a/57033941/2441655
Venryx

4

데스크탑에 있기 때문에이 작업을 수행하는 가장 쉬운 방법은 높이 가젯으로 드래그하는 것입니다 .

그렇지 않으면 ps1 스크립트 elevate명령 을 사용하여 별도의 스크립트를 만들 수 있습니다.

또는 elevate서비스 시작 비트에만 적용 할 수 있습니다 .


1

PowerShell ISE는 % windir % \ system32 \ WindowsPowerShell \ v1.0 \ PowerShell_ISE.exe에 있습니다. 마우스 오른쪽 버튼으로 클릭하고 "관리자 권한으로 실행"을 선택하고 거기에서 스크립트를 실행할 수 있습니다.

Windows 로고> 모든 프로그램> 보조 프로그램> Windows PowerShell에서 해당 바로 가기를 사용하여 동일한 작업을 수행 할 수도 있습니다.



-1

이것을 스크립트의 시작 부분에 추가하십시오 :

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

이것은 4 년 전부터 MDMoore313의 답변일부인 것 같습니다 .
Scott
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.