PowerShell이 ​​관리자로 실행 중인지 감지


답변:


42
[bool](([System.Security.Principal.WindowsIdentity]::GetCurrent()).groups -match "S-1-5-32-544")

이것이 무엇을하는지 분리 :

  • [bool]-최종 결과를로 캐스팅합니다 bool.
  • [System.Security.Principal.WindowsIdentity]::GetCurrent()- WindowsIdentity현재 실행중인 사용자를 검색합니다 .
  • (...).groups- groups아이디 의 속성에 액세스하여 아이디가 속한 사용자 그룹을 찾습니다.
  • -match "S-1-5-32-544"Administrators 그룹 groupsWell-Known SID 가 포함되어 있는지 확인 하면 ID는 "관리자로 실행"이 사용 된 경우에만 포함됩니다.

2
코드를 게시하는 대신 코드의 기능을 설명해 주시겠습니까? 이는 향후 방문자가 필요한 경우 이해하고 적응하는 데 도움이됩니다.
slhck

부우. 이 남자에게 더 많은 투표를 줘
Kolob Canyon

4
마술 줄이 없기 때문에 아래 @Bill_Stewart의 대답을 선호합니다.
8DH

사용 -match및 타입 캐스팅 대신 :[Security.Principal.WindowsIdentity]::GetCurrent().Groups -contains 'S-1-5-32-544'
TheIncorrigible1

57
([Security.Principal.WindowsPrincipal] `
  [Security.Principal.WindowsIdentity]::GetCurrent() `
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)

현재 Windows ID를 검색하고 현재 ID에 관리자 역할이있는 경우 (즉, 상승 된 상태) True를 반환합니다.


13
받아 들여진 대답은 정확하지만이 대답은 특히 6 개월 후에 대본을 읽을 수있는 사람에게 훨씬 명확합니다.
Patrick Seymour

46

당신이 사용할 수있는 파워 쉘 4.0은 필요 스크립트의 상단에 :

#Requires -RunAsAdministrator

출력 :

'MyScript.ps1'스크립트에는 관리자로 실행하기위한 "#requires"문이 포함되어 있으므로 실행할 수 없습니다. 현재 Windows PowerShell 세션이 관리자로 실행되고 있지 않습니다. 관리자 권한으로 실행 옵션을 사용하여 Windows PowerShell을 시작한 다음 스크립트를 다시 실행하십시오.


관리자가 실행하지 않으면 종료되는 기능을 원한다면 어떻게해야합니까?
Kolob Canyon

1
@KolobCanyon- PowerShell 함수 실행하는 것과 같은 것은 없습니다 . 전체 PowerShell 프로세스가 상승했는지 여부
Bill_Stewart

@Bill_Stewart 예, 그러나 return사용자가 관리자가 아닌 경우 가능합니다 :)
Kolob Canyon

1
@KolobCanyon-PowerShell 프로세스 만 향상시킬 수 있습니다 . 단일 기능을 향상시킬 수 없습니다 . 이것이 #Requires -RunAsAdministrator유용한 이유 입니다. 권한이 없으면 스크립트 전체 가 실행되지 않습니다.
Bill_Stewart

@Bill_Stewart 그래, 언젠가는 그것을 사용해야 할 것이다.
Kolob Canyon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.