권한 상승이 필요한 PowerShell 함수를 정의하는 방법은 무엇입니까?


20

Linux의 sudo권한 상승 명령에 대한 대안을 찾을 수 없으므로 다음 질문이 있습니다.

권한 상승이 필요한 PowerShell 함수를 정의하는 방법은 무엇입니까? 나는 UAC 프롬프트를 의미합니다.

그러한 기능은 다음과 같습니다.

function system-check {
    SFC /ScanNow
}

체계:

Windows 8.1 Pro 64 비트

PowerShell :

Major  Minor  Build  Revision
-----  -----  -----  --------
5      0      10586  117

편집 1 :

100 % 이해할 수있게하려면 다음과 같이 바꾸십시오.

  1. 사용자로 PowerShell을 실행합니다
  2. 위에서 언급 한 기능을 실행합니다 system-check
  3. 명령을 실행할 수 있도록 함수를 높이고 싶습니다. UAC 프롬프트가 나타나기를 원합니다.

MSOL 명령과 같은 Microsoft 모듈에 의해 추가 된 많은 내장 powershell 명령 및 명령은 종종 권한 상승이 필요하지만 권한 상승에 대한 지원은 제공하지 않습니다. 암호 오류 메시지와 함께 실패합니다. 스크립트에 권한 상승 프롬프트를 작성하면 Microsoft보다 사용자에게 친숙 함을 제공하게됩니다.
Todd Wilcox

답변:


33

관리자 권한 창에서 특정 명령을 실행하려면

Start-Process -FilePath powershell.exe -ArgumentList {$ScriptBlock} -verb RunAs

예를 들면 다음과 같습니다.

Start-Process -FilePath powershell.exe -ArgumentList {
    SFC /scannow
} -verb RunAs

관리자 권한 창에서 특정 스크립트를 실행하려면

Start-Process powershell -ArgumentList '-noprofile -file MyScript.ps1' -verb RunAs

UAC를 묻는 전체 PowerShell 세션을 실행하려면

Start-Process powershell.exe -Verb runAs

현재 창이 상승 된 권한으로 실행중인 경우 $ True 또는 $ False를 반환하는 함수 :

function isadmin
 {
 #Returns true/false
   ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")
 }

스크립트가 관리자 권한으로 만 실행되도록하려면 처음에 다음을 추가하십시오.

If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
 {
  Echo "This script needs to be run As Admin"
  Break
 }

PowerShell v4.0에서는 #Requires 문을 사용하여 위를 단순화 할 수 있습니다.

#Requires -RunAsAdministrator

출처 : 높은 권한으로 실행

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.