Использование сценария powershell в качестве сценария входа (групповая политика), который запускает внешнюю программу? - PullRequest
1 голос
/ 26 ноября 2011

Я сделал скрипт Power Shell, который загружает Pageant (агент аутентификации SSH Windows) с моими личными ключами. Короче говоря, скрипт не намного больше, чем следующие две строки:

$tool = "pageant.exe"
&$tool $files.ToArray()

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

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

Я хочу выполнять этот скрипт всякий раз, когда я вхожу в свою учетную запись, и я делаю это, добавляя скрипт входа в PowerShell групповая политика с редактором групповой политики (gpedit.msc), сценарий также выполняется и фактически загружает инструмент pageant.exe.

Однако инструменты, использующие инструмент pageant.exe (putty и plink), не работают. Он не распознает аутентификацию конкурса. агент.

Итак, мой первый вопрос: в чем разница между запуском скрипта из моей собственной консоли powershell и запуском скрипта? из групповой политики (сценарий входа)?

У меня также есть некоторые исследования, и я вижу пару различий. Первое - это то, что запущенный инструмент зрелища имеет флаг виртуализации UAC в моем диспетчере задач, когда я запускаю скрипт из собственной консоли. Это свойство не помечается при запуске из групповой политики сценария входа.

Во-вторых, когда я отключаю UAC, скрипт работает из групповой политики сценариев входа в систему. Поэтому я предполагаю, что это как-то связано с UAC, но я не знаю, как это решить. Я хочу, чтобы скрипт работал, когда UAC также включен.

Вопрос second , что это за флаг виртуализации UAC и как он влияет на работу процесса? третий и последний вопрос: как мне заставить мой скрипт работать?

Ответы [ 3 ]

2 голосов
/ 26 ноября 2011

Похоже, дело в виртуализации UAC.Этот флаг означает, что все попытки записи в защищенные системные области перенаправляются в VirtualStore в профиле пользователя: C:\Users\<username>\AppData\Local\VirtualStore.Когда UAC отключен, это перенаправление отключено.

Когда UAC включен, любые попытки записи в Program Files, например, будут перенаправлены в соответствующий каталог в вашем VirtualStore.Позже, когда программы читают файлы, они также видят их из перенаправленного каталога.

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

Таким образом, вы должны заставить все ваши стороны работать без виртуальных каталогов.Если исполняемый файл имеет манифест, предпочтительно декларирующий совместимость с Windows 7, то виртуализация отключается.Но он может работать некорректно без виртуализации, если попытается записать в программные файлы.

Примечание: записи реестра в HKLM также виртуализированы.

1 голос
/ 28 ноября 2011

Существует несколько способов отключить виртуализацию UAC; самое простое - включить внешний манифест (в вашем случае он будет называться pageant.exe.manifest) в ту же папку, что и исполняемый файл. Это может подавить повышение прав, но тогда ваши записи, вероятно, потерпят неудачу. Тот факт, что виртуализация влияет на вас, означает, что pageant.exe должен выполнять запись в защищенные области, и без виртуализации или повышения прав вы получите отказ в доступе.

Поэтому я бы не стал использовать групповую политику. Настройте запланированную задачу (нажмите «Пуск» и введите «Задача» для запуска планировщика задач, затем нажмите «Создать задачу» справа), которая запускается при входе в систему (вкладка «Триггер», нажмите «новый», измените верхний раскрывающийся список) для запуска сценария (вкладка «Действия», нажмите новый) и запускается с повышенными правами (вкладка «Общие», установите флажок «Выполнить с наивысшими привилегиями») Вам нужно будет один раз дать согласие UAC на настройку повышенных задач. После этого pageant.exe запишет в защищенную область, где другие приложения смогут ее прочитать.

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

0 голосов
/ 29 ноября 2011

Для полноты я добавил ответы на свои вопросы.

  1. В чем разница между запуском сценария из моей собственной консоли powershell и запуском сценария из групповой политики (сценарий входа в систему)?

    A: Разница заключается в том, что мой пользователь входит в группу администраторов, которая будет запускать сценарий с повышенными правами. Когда вы входите в систему как администратор, Windows генерирует стандартный токен доступа пользователя и токен доступа администратора. Последний токен будет использоваться для запуска программ с повышенными правами (без виртуализации UAC). Теперь, когда я запускаю сценарий из моей собственной консоли powershell, которая запускается со стандартным токеном доступа, запущенный конкурс запускается с виртуализацией UAC. Если инструменты, использующие Pageant, работают в другом режиме, возникает моя проблема.

  2. Что это за флаг виртуализации UAC и как он влияет на работу процесса?

    A: Проверьте эту ссылку .

  3. Как мне заставить мой скрипт работать?

    A: Вы можете использовать решение, предоставленное Кейт Грегори (не проверять запуск с наивысшими привилегиями) или добавить пакетный файл в папку автозагрузки, в которой выполняется сценарий powershell. Это запустит сценарий со стандартным токеном доступа пользователя и с включенной виртуализацией UAC.

...