2012-04-03 33 views

Trả lời

20

Đây là chức năng ít tôi có trong một module bảo mật:

function Test-IsAdmin { 
    try { 
     $identity = [Security.Principal.WindowsIdentity]::GetCurrent() 
     $principal = New-Object Security.Principal.WindowsPrincipal -ArgumentList $identity 
     return $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) 
    } catch { 
     throw "Failed to determine if the current user has elevated privileges. The error was: '{0}'." -f $_ 
    } 

    <# 
     .SYNOPSIS 
      Checks if the current Powershell instance is running with elevated privileges or not. 
     .EXAMPLE 
      PS C:\> Test-IsAdmin 
     .OUTPUTS 
      System.Boolean 
       True if the current Powershell is elevated, false if not. 
    #> 
} 
+0

+1 nhiều hơn hoặc ít hơn là cùng chức năng tôi sử dụng :-) –

+0

Tôi thích nó. Đơn giản và hoạt động. Cảm ơn – resolver101

4

FYI, đối với những folks rằng có PowerShell Community Extensions cài đặt:

PS> Test-UserGroupMembership -GroupName Administrators 
True 

Lệnh này là chung chung hơn một chút ở chỗ bạn có thể kiểm tra tư cách thành viên nhóm trong bất kỳ nhóm nào.

+0

Chỉ cần tò mò, điều này chỉ kiểm tra xem người dùng trong nhóm hay nó cũng kiểm tra xem họ đang chạy với tất cả các thẻ đặc quyền (nâng cao)? –

+0

@AndyArismendi nếu bạn không nâng cao điều này sẽ trả về false ngay cả khi người dùng nằm trong nhóm Quản trị viên trên hệ thống được bật UAC. Đó là bởi vì quá trình này chỉ có một mã thông báo người dùng "chuẩn". Nếu quá trình này được nâng lên thì điều này trả về đúng sự thật. –

+1

Cảm ơn. lưu ý ** tên nhóm được bản địa hóa ** –

3

Ở đây nó là trực tiếp:

$isAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(` 
     [Security.Principal.WindowsBuiltInRole] "Administrator") 
+1

Đẹp một lớp lót. – CJBS

15

Trong Powershell 4.0 bạn có thể sử dụng requires ở phía trên cùng của kịch bản của bạn:

#Requires -RunAsAdministrator 

Đầu ra:

Kịch bản 'MyScript. ps1 'không thể chạy vì nó chứa câu lệnh "#requires" cho chạy với tư cách Quản trị viên. Phiên Windows PowerShell hiện tại không hoạt động với tư cách Quản trị viên. Khởi động Windows PowerShell bằng cách sử dụng tùy chọn Chạy với tư cách quản trị viên, sau đó thử chạy lại tập lệnh.

+0

Khi bạn dán '#Requires -RunAsAdministrator' vào đầu tập lệnh trong PowerShell ISE, không có gì xảy ra ... – DarkLite1

+0

Nó hoạt động trong PowerShell ISE cho tôi – DeepSpace101

+0

Điều này thật tuyệt, nhưng sử dụng nút chuột phải> Chạy bằng PowerShell vừa đóng kịch bản ngay lập tức. 'Read-Host' là dòng tiếp theo không giúp được gì. Làm thế nào để đối phó với điều này khi cố gắng để trực tiếp chạy một kịch bản? –

Các vấn đề liên quan