在PowerShell脚本中测试管理权限的最佳/最简单方法是什么?
我需要编写一个需要管理权限的脚本,并希望了解实现它的最佳方法。
答案 0 :(得分:22)
这是我在安全模块中的一个小功能:
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.
#>
}
答案 1 :(得分:17)
在Powershell 4.0中,您可以在脚本顶部使用requires:
#Requires -RunAsAdministrator
输出:
脚本“MyScript.ps1”无法运行,因为它包含“#requires”语句 以管理员身份运行当前的Windows PowerShell会话未以管理员身份运行。启动Windows PowerShell使用“以管理员身份运行”选项,然后再次尝试运行脚本。
答案 2 :(得分:4)
仅供参考,对于那些安装了PowerShell Community Extensions的人:
PS> Test-UserGroupMembership -GroupName Administrators
True
此cmdlet更通用,因为您可以测试任何组中的组成员身份。
答案 3 :(得分:3)
这是直接的:
$isAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
[Security.Principal.WindowsBuiltInRole] "Administrator")
答案 4 :(得分:2)
我没有测试它,但摘要似乎说明了您要查找的内容:“了解如何在运行Windows PowerShell脚本或命令时检查管理凭据。”