none
запуск PowerShell с повышенными правами без подтверждения RRS feed

  • Вопрос

  • Доброго времени суток.

    Для того, что бы запустить PowerShell c повышенными правами, можно использовать команду:

    start-process powershell –verb runAs

    Однако, UAC потребует подтвердить запуск с повышенными правами.

    Как можно запустить PowerShell c повышенными правами без подтверждения или задать подтверждение в самой команде?

    Какие либо изменения в UAC хотелось бы исключить...

    Спасибо.

    Модератор

Все ответы

  • Можно создать такое задание в планировщике и запускать это задание:
    <Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
      <RegistrationInfo>
        <SecurityDescriptor>D:PAI(A;;FA;;;SY)(A;;FA;;;BA)(A;;0x1200a9;;;BU)</SecurityDescriptor>
      </RegistrationInfo>
      <Triggers />
      <Principals>
        <Principal id="User">
          <GroupId>S-1-5-32-545</GroupId>
          <RunLevel>HighestAvailable</RunLevel>
        </Principal>
      </Principals>
      <Settings>
        <AllowStartOnDemand>true</AllowStartOnDemand>
        <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
        <RunOnlyIfIdle>false</RunOnlyIfIdle>
        <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
        <MultipleInstancesPolicy>Parallel</MultipleInstancesPolicy>
        <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
        <Priority>5</Priority>
      </Settings>
      <Actions Context="User">
        <Exec>
          <Command>PowerShell</Command>
        </Exec>
      </Actions>
    </Task>
  • что-то я не понял, как его создать...
    6 июля 2013 г. 11:28
    Модератор
  • PowerShell 3.0+:
    Register-ScheduledTask RunPowerShellAsAdmin -Xml @'
    <Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
      <RegistrationInfo>
        <SecurityDescriptor>D:PAI(A;;FA;;;SY)(A;;FA;;;BA)(A;;0x1200a9;;;BU)</SecurityDescriptor>
      </RegistrationInfo>
      <Triggers />
      <Principals>
        <Principal id="User">
          <GroupId>S-1-5-32-545</GroupId>
          <RunLevel>HighestAvailable</RunLevel>
        </Principal>
      </Principals>
      <Settings>
        <AllowStartOnDemand>true</AllowStartOnDemand>
        <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
        <RunOnlyIfIdle>false</RunOnlyIfIdle>
        <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
        <MultipleInstancesPolicy>Parallel</MultipleInstancesPolicy>
        <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
        <Priority>5</Priority>
      </Settings>
      <Actions Context="User">
        <Exec>
          <Command>PowerShell</Command>
        </Exec>
      </Actions>
    </Task>
    '@
    PowerShell:
    (New-Object -ComObject Schedule.Service -Property @{Connect=$null}).GetFolder('').RegisterTask('RunPowerShellAsAdmin',@'
    <Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
      <RegistrationInfo>
        <SecurityDescriptor>D:PAI(A;;FA;;;SY)(A;;FA;;;BA)(A;;0x1200a9;;;BU)</SecurityDescriptor>
      </RegistrationInfo>
      <Triggers />
      <Principals>
        <Principal id="User">
          <GroupId>S-1-5-32-545</GroupId>
          <RunLevel>HighestAvailable</RunLevel>
        </Principal>
      </Principals>
      <Settings>
        <AllowStartOnDemand>true</AllowStartOnDemand>
        <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
        <RunOnlyIfIdle>false</RunOnlyIfIdle>
        <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
        <MultipleInstancesPolicy>Parallel</MultipleInstancesPolicy>
        <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
        <Priority>5</Priority>
      </Settings>
      <Actions Context="User">
        <Exec>
          <Command>PowerShell</Command>
        </Exec>
      </Actions>
    </Task>
    '@,2,$null,$null,0)
    taskschd.msc: выберите действие "Импортировать задачу" и укажите файл в котором будет указанный текст.
    • Помечено в качестве ответа KazunEditor 12 июля 2013 г. 5:30
    • Снята пометка об ответе AnahaymModerator 12 июля 2013 г. 11:53
    6 июля 2013 г. 12:31
  • в обоих случаях ошибка:

    8 июля 2013 г. 15:20
    Модератор
  • Опишите все Ваши действия подробно, включая версии операционной системы и PowerShell.

    8 июля 2013 г. 18:33
  • действия:

    выделяю

    копирую в текстовый файл

    переименовываю в XML

    указываю при импорте

    OS Server 2012.

    Ещё момент, мне не просто нужно запускать PowerShell (или CMD) с повышенными привилегиями, мне нужно делать это из групповой политики. Т.е. на клиентском компьютере будет выполняться некий скрипт с повышенными правами. Выполняться будет от имени администратора компьютера, но сам пользователь, к которому применяется политика, таковым не является.

    8 июля 2013 г. 18:45
    Модератор
  • Какой именно текст Вы выделяете и копируете? В моём первом или втором ответе? Если Вы использует графический интерфейс, то Вам нужен текст из первого ответа.
    Ещё момент, мне не просто нужно запускать PowerShell (или CMD) с повышенными привилегиями, мне нужно делать это из групповой политики. Т.е. на клиентском компьютере будет выполняться некий скрипт с повышенными правами. Выполняться будет от имени администратора компьютера, но сам пользователь, к которому применяется политика, таковым не является.
    Через планировщик задач можно создать задачу, которая будет выполнятся от имени некого администратора или системы, и, которую сможет запускать обычный пользователь, но тогда интерфейс не будет отображаться в контексте пользователя, запустившего задачу (можно попробовать использовать PsExec, если всё-таки нужно отображать интерфейс). Насчёт части про групповую я Вам подсказать не смогу, так как не сильно в этом разбираюсь, но в принципе задачу можно настроить на запуск при входе пользователя и без групповой политики.
    8 июля 2013 г. 20:22
  • да, для импорта использовал графический интерфейс. из первого сообщения импортировалось успешно.

    задачу при входе пользователя я не смогу настроить без групповой политики для 100 пользователей.

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

    у меня главная задача - запустить скрипт от имени админа при входе пользователя в систему. это возможно сделать через планировщик задач, но нужно что-то сделать с подтверждением UAC.

    Сегодня попробую импортированную задачу. Ведь я могу там добавить в аргументах какой скрипт запускать )

    Модератор
  • вообщем нашёл пока только такой выход:

    1) создаём пользователя classid, через групповые политики назначаем для всех рабочих станций членом группы Network Configuration Operators

    2) создаём в групповых политиках задачу выполняемую при входе. задача выполняется от имени classid

    3) в задаче будет скрипт cmd.bat с содержанием \\server\shara\ipconfig.bat доступ к шаре только у пользователя classid

    4) содержание ipconfig.bat - echo my_password | runas  /netonly /user:domain\classid powershell.exe

    тогда у пользователя должен запустится PowerShell. Пока ещё не проверял. Без задачи сам скрипт выполняется и запускает PowerShell. Осталось докурить после powershell.exe нужный скрипт.

    минус данного решения - пароль хранится в файле в открытом виде. Возможно, что сетевой снифер сможет его увидеть... Так как это не безопасно - отпадает (

    Пока идей больше нет (

    9 июля 2013 г. 16:23
    Модератор
  • А зачем на четвёртом шаге делать runas, Ведь задание уже и так выполняется от имени classid?

    9 июля 2013 г. 18:21
  • дело в том, что задание от имени classid это просто задание от другого пользователя без повышенных прав. вот runas и запускает повышенные права. если бы runas можно было предать учётные данные пользователя classid в неявном виде, было бы отлично.
    9 июля 2013 г. 22:12
    Модератор
  • А разве галочка "Выполнить с наивысшими правами" в планировщике задач не для этого предназначена?
    9 июля 2013 г. 22:21
  • конечно для этого, но вот дело какое. создал я в GPO и не работает, т.к. я думаю, что задача ждёт подтверждение UAC... Вот и решил повышать права в скрипте. но, получается, что дело не в этом... пойду курить логи...

    10 июля 2013 г. 7:10
    Модератор
  • вопрос не решён. меня интересуют способы запуска из power shell, чтобы использовать скрипт в групповой политике.
    12 июля 2013 г. 11:55
    Модератор
  • Если речь идёт о запуске задания, то так:
    Start-ScheduledTask 'Task Name'
    или так:
    schtasks /run /tn "Task Name"
    12 июля 2013 г. 13:28
  • речь идёт о:

    Для того, что бы запустить PowerShell c повышенными правами, можно использовать команду:

    start-process powershell –verb runAs

    Однако, UAC потребует подтвердить запуск с повышенными правами.

    Как можно запустить PowerShell c повышенными правами без подтверждения или задать подтверждение в самой команде?

    из самого powershell.
    12 июля 2013 г. 15:00
    Модератор
  • если ещё не поздно советую поискать информацию про batch job в 2008 сервере была у меня такая-же запара с запуском скриптов...

    включается где-то в недрах GPO.

    23 июля 2013 г. 12:22
  • никогда не поздно. этот вопрос не в производство, а для себя.

    А что именно искать?

    23 июля 2013 г. 12:51
    Модератор
  • никогда не поздно. этот вопрос не в производство, а для себя.

    А что именно искать?

    http://technet.microsoft.com/en-us/library/cc755659(v=ws.10).aspx

    вот тут почитайте.. от туда можно и развить тему, но судя по всему это для не админских учёток. Админ в теории должен итак всё делать, но не безопасно.


    23 июля 2013 г. 13:03
  • А от имени системы запускать Powershell-скрипт вам не подходит? Пропишите его в групповых политиках в качестве startup-скрипта. При этом и права будут и UAC не помешает.

    23 июля 2013 г. 15:20
  • от имени системы подходит, но стартап запускается при старте системы, а не при входе пользователя. 

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

    23 июля 2013 г. 15:31
    Модератор
  • Не очень понимаю цель. Разбейте тогда задачу на два скрипта: Logon-скрипт и Startup-скрипт. Один будет влиять на параметры компьютера (с правами системы), другой на окружение пользователя (с полномочиями пользователя; UAC на него не действует).

    Опишите получше вашу задачу или приведите здесь текст скрипта.

    • Предложено в качестве ответа KazunEditor 23 июля 2013 г. 16:31
    • Отменено предложение в качестве ответа AnahaymModerator 24 июля 2013 г. 7:29
    23 июля 2013 г. 16:12
  • Опишите получше вашу задачу или приведите здесь текст скрипта.

    Задача следующая:

    при входе пользователя выполнить команду ipconfig /setclassid "E*" my-classid

    при входе другого пользователя выполнить команду ipconfig /setclassid "E*" default

    Данная команда требует запуска минимум будучи в группе Network Operators и требует повышения прав. Вот почему мне нужно выполнить скрипт от имени другого пользователя. Ибо если дать права Network Operators, то пользователь сможет сам выполнить вторую команду, чего не должно быть.


    24 июля 2013 г. 7:33
    Модератор
  • В таком случае можно попробовать скомбинировать Logon-скрипт, который будет создавать некий маркерный файл или параметр реестра с именем последнего залогиненного пользователя, и создание Scheduled Task через GPO без установки галки "Run as" (в таком случае задание будет выполняться от имени системы). Ну а, соответственно, в запускаемом задачей скрипте (по расписанию At Logon) проверять созданный Logon-скриптом маркер и в зависимости от его значения запускать нужную команду.


    • Изменено Evgenii Alekseev 24 июля 2013 г. 7:59 исправление
    24 июля 2013 г. 7:58
  • не совсем понял идею...
    24 июля 2013 г. 8:39
    Модератор
  • If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
    {   
    $arguments = "& '" + $myinvocation.mycommand.definition + "'"
    Start-Process powershell -Verb runAs -ArgumentList $arguments
    Break
    }

    Это приводит к тому, что текущий script передается новому процессу powershell в режиме администратора (если текущий пользователь имеет доступ к режиму администратора, а script не запускается как администратор).

    14 ноября 2018 г. 4:56