19

在 PowerShell 脚本中测试管理权限的最佳/最简单方法是什么?

我需要编写一个需要管理权限的脚本,并且想知道实现它的最佳方法。

4

5 回答 5

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.
    #>
}
于 2012-04-03T19:49:28.943 回答
19

在 Powershell 4.0 中,您可以在脚本顶部使用requires :

#Requires -RunAsAdministrator

输出:

无法运行脚本“MyScript.ps1”,因为它包含以管理员身份运行的“#requires”语句。当前的 Windows PowerShell 会话未以管理员身份运行。使用“以管理员身份运行”选项启动 Windows PowerShell,然后再次尝试运行该脚本。

于 2015-03-18T22:54:36.150 回答
5

仅供参考,对于那些安装了PowerShell 社区扩展的人:

PS> Test-UserGroupMembership -GroupName Administrators
True

此 cmdlet 更通用一点,因为您可以测试任何组中的组成员身份。

于 2012-04-03T21:13:54.013 回答
5

直接在这里:

$isAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
        [Security.Principal.WindowsBuiltInRole] "Administrator")
于 2013-10-25T14:43:37.293 回答
2

看看这个网址:http: //blogs.technet.com/b/heyscriptingguy/archive/2011/05/11/check-for-admin-credentials-in-a-powershell-script.aspx

我没有对其进行测试,但摘要似乎说明了您要查找的内容:“了解如何在运行 Windows PowerShell 脚本或命令时检查管理凭据。”

于 2012-04-03T19:28:16.100 回答