Whats cách tốt nhất/dễ nhất để kiểm tra quyền quản trị trong tập lệnh PowerShell là gì?Kiểm tra quyền quản trị viên trong tập lệnh PowerShell?
Tôi cần viết kịch bản yêu cầu quyền quản trị và muốn biết cách tốt nhất để đạt được điều đó.
Whats cách tốt nhất/dễ nhất để kiểm tra quyền quản trị trong tập lệnh PowerShell là gì?Kiểm tra quyền quản trị viên trong tập lệnh PowerShell?
Tôi cần viết kịch bản yêu cầu quyền quản trị và muốn biết cách tốt nhất để đạt được điều đó.
Đâ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.
#>
}
Check-out url này: http://blogs.technet.com/b/heyscriptingguy/archive/2011/05/11/check-for-admin-credentials-in-a-powershell-script.aspx
tôi đã không kiểm tra nó, nhưng tóm tắt dường như rõ những gì bạn đang tìm kiếm cho: "Tìm hiểu làm thế nào để kiểm tra các thông tin quản trị khi bạn chạy một kịch bản Windows PowerShell hoặc lệnh. "
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.
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)? –
@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. –
Cảm ơn. lưu ý ** tên nhóm được bản địa hóa ** –
Ở đây nó là trực tiếp:
$isAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
[Security.Principal.WindowsBuiltInRole] "Administrator")
Đẹp một lớp lót. – CJBS
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.
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
Nó hoạt động trong PowerShell ISE cho tôi – DeepSpace101
Đ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? –
+1 nhiều hơn hoặc ít hơn là cùng chức năng tôi sử dụng :-) –
Tôi thích nó. Đơn giản và hoạt động. Cảm ơn – resolver101