Проверить права администратора в PowerShell script?

Какой лучший/простой способ проверить права администратора в PowerShell script?

Мне нужно написать script, который требует административных прав и хочет знать, как наилучшим образом его достичь.

Ответы

Ответ 1

Это небольшая функция, которую я имею в модуле безопасности:

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.
    #>
}

Ответ 2

В Powershell 4.0 вы можете использовать требуется в верхней части вашего script:

#Requires -RunAsAdministrator

Выходы:

script 'MyScript.ps1' не может быть запущен, потому что он содержит оператор #requires для работает как администратор. Текущий сеанс Windows PowerShell не работает как администратор. Запустить Windows PowerShell с помощью параметра "Запуск от имени администратора", а затем снова запустить script.

Ответ 3

FYI, для тех, у кого есть Расширения сообщества PowerShell:

PS> Test-UserGroupMembership -GroupName Administrators
True

Этот командлет является более общим, поскольку вы можете тестировать членство в группе в любой группе.

Ответ 4

Здесь это прямо:

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