none
Powershell: Проверка наличия административных прав RRS feed

  • Вопрос

  • Необходимо с помощью логон-скрипта отслеживать наличие административных прав у пользователя. С помощью Интернета набросал примерное содержимое, но оно мне кажется каким-то кривым:

    $outFile = "\\FileServer\Check\$env:computername.txt"
    $userToFind = $env:username
    $administratorsAccount = Get-WmiObject Win32_Group -filter "LocalAccount=True AND SID='S-1-5-32-544'"
    $administratorQuery = "GroupComponent = `"Win32_Group.Domain='" + $administratorsAccount.Domain + "',NAME='" + $administratorsAccount.Name + "'`""
    $user = Get-WmiObject Win32_GroupUser -filter $administratorQuery | select PartComponent |where {$_ -match $userToFind}
    $user=$user.PartComponent.Split("\,")[5].Remove(0,5).Replace('"','')
    if ($user -eq $userToFind) {Write-Host "Warning: $user is Administrator"} > $outFile

    Может существует более элегантное решение? Находил и другие способы, но они неадекватно работают с UAC.

    16 марта 2013 г. 21:27

Ответы

  • Check for Admin Credentials in a PowerShell Script

    If (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
    
        [Security.Principal.WindowsBuiltInRole] "Administrator"))
    
    {
    
        Write-Warning "You do not have Administrator rights to run this script!`nPlease re-run this script as an Administrator!"
    
        Break
    
    }
    

    • Помечено в качестве ответа Evgenii Alekseev 18 марта 2013 г. 7:09
    17 марта 2013 г. 7:58
    Отвечающий
  • Мне кажется я что-то подобное (с использованием Security.Principal.WindowsBuiltInRole) пробовал, но при включенном UAC этот метод прав администратора не показывал. А так как речь идет про логон-скрипт, то интерактивное взаимодействие с пользователем не подразумевается.



    Как вариант: (whoami /groups) -match "S-1-5-32-544"

    PS. Но насколько я помню,при Logon скрипт используется полный токен,поэтому метод должен работать.

    • Изменено KazunEditor 17 марта 2013 г. 10:02
    • Помечено в качестве ответа Evgenii Alekseev 18 марта 2013 г. 7:09
    17 марта 2013 г. 9:55
    Отвечающий

Все ответы

  • Check for Admin Credentials in a PowerShell Script

    If (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
    
        [Security.Principal.WindowsBuiltInRole] "Administrator"))
    
    {
    
        Write-Warning "You do not have Administrator rights to run this script!`nPlease re-run this script as an Administrator!"
    
        Break
    
    }
    

    • Помечено в качестве ответа Evgenii Alekseev 18 марта 2013 г. 7:09
    17 марта 2013 г. 7:58
    Отвечающий
  • Мне кажется я что-то подобное (с использованием Security.Principal.WindowsBuiltInRole) пробовал, но при включенном UAC этот метод прав администратора не показывал. А так как речь идет про логон-скрипт, то интерактивное взаимодействие с пользователем не подразумевается.



    17 марта 2013 г. 8:35
  • Мне кажется я что-то подобное (с использованием Security.Principal.WindowsBuiltInRole) пробовал, но при включенном UAC этот метод прав администратора не показывал. А так как речь идет про логон-скрипт, то интерактивное взаимодействие с пользователем не подразумевается.



    Как вариант: (whoami /groups) -match "S-1-5-32-544"

    PS. Но насколько я помню,при Logon скрипт используется полный токен,поэтому метод должен работать.

    • Изменено KazunEditor 17 марта 2013 г. 10:02
    • Помечено в качестве ответа Evgenii Alekseev 18 марта 2013 г. 7:09
    17 марта 2013 г. 9:55
    Отвечающий
  • Как вариант: (whoami /groups) -match "S-1-5-32-544"
    PS. Но насколько я помню,при Logon скрипт используется полный токен,поэтому метод должен работать.

    whoami тоже, к сожалению, не вариант. Во первых не будет работать под Windows XP, а во вторых хотелось всё сделать средствами Powershell (рабочие .cmd у меня давным давно написаны и используются).

    А насчет полного токена при выполнении logon-скрипта не знал, спасибо, попробую.

    17 марта 2013 г. 11:52
  • Как вариант: (whoami /groups) -match "S-1-5-32-544"
    PS. Но насколько я помню,при Logon скрипт используется полный токен,поэтому метод должен работать.

    whoami тоже, к сожалению, не вариант. Во первых не будет работать под Windows XP, а во вторых хотелось всё сделать средствами Powershell (рабочие .cmd у меня давным давно написаны и используются).

    А насчет полного токена при выполнении logon-скрипта не знал, спасибо, попробую.


    У Windows XP тоже не всегда есть PoSh. Лучше на js или vbs.

    Vladimir Zelenov | http://systemcenter4all.wordpress.com

    17 марта 2013 г. 17:47
  • У Windows XP тоже не всегда есть PoSh. Лучше на js или vbs.
    У нас Powershell установлен на всех компьютерах с Windows XP. Сейчас во всех скриптах (logon-скрипты, скрипты для SCCM, автоматизация задач по управлению Active Directory и серверами) мы используем либо командную строку, либо vbs-скрипты. Но, к сожалению, сейчас отчетливо видно, что Microsoft будет развивать только Powershell и постепенно избавляться от старых скриптовых языков. Поэтому остается только постепенно переводить всё на Powershell. А под cmd и VBScript у нас уже есть все возможные наработки и с помощью них мы без особых проблем можем решать текущие задачи.
    17 марта 2013 г. 19:39