Работа с реестром Windows череz PowerShell. Блог админа

Редактирование раздела реестра на удаленном компьютере с помощью Powershell

Я пытаюсь отредактировать значение раздела реестра на удаленном VM под управлением Windows 7. Для этого я использую следующие команды:

Но я получаю ошибки, как:

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

Как иzменить zначение параметра реестра

Чтобы иzменить zначение данного параметра, воспольzуемся командлетом Set-ItemProperty:

Set-ItemProperty -Path ‘HKLM:SOFTWAREMicrosoftWindowsCurrentVersionDriverSearching’ -Name SearchOrderConfig -Value 0

Проверим, что zначение иzменилось:

Get-ItemProperty -Path ‘HKLM:SOFTWAREMicrosoftWindowsCurrentVersionDriverSearching’ -Name SearchOrderConfig

Разрешить запуск скриптов PowerShell

PowerShell

По умолчанию запуск скриптов PowerShell может быть запрещён.

Пытаюсь запустить скрипт, получаю ошибку:

Не удается загрузить файл. Файл не имеет цифровой подписи. Невозможно выполнить сценарий в указанной системе.

powershell

Посмотрим текущее значение политики выполнения скриптов PowerShell:

powershell

  • Restricted – запрещен запуск скриптов PowerShell, можно выполнять только интерактивные команды.
  • AllSigned – разрешено выполнять только скрипты с цифровой подписью от доверенного издателя.
  • RemoteSigned – можно запускать локальные PowerShell скрипты без ограничения. Можно запускать удаленные PowerShell скрипты с цифровой подписью. Нельзя запускать PS1 файлы, скачанные из Интернета. В свойствах скачанного файла можно «Разблокировать» запуск скрипта.
  • Unrestricted – разрешен запуск любых PowerShell скриптов.
  • Bypass – разрешён запуск любых PowerShell скриптов. Эта политика обычно используется для автоматического запуска PS скриптов без вывода каких-либо уведомлений и не рекомендуется для постоянного использования.
  • Default – сброс настроек выполнения скриптов на стандартные.

У меня установлена политика AllSigned, поэтому неподписанный скрипт не запустился.

Для изменения текущего значения политики запуска PowerShell скриптов используется командлет Set-ExecutionPolicy.

powershell

Как видно из скриншота, политика запуска PowerShell скриптов изменилась, но. не изменилась. Такая ошибка появляется, если политики запуска PowerShell скриптов управляются групповыми политиками, например, если компьютер в домене.

В этом случае нам поможет реестр. В разделе

powershell

Ещё можно запустить скрипт с явно указанной политикой:

Можно установить не только политику запуска PowerShell скриптов, но и зону её действия с помощью параметра Scope.

Как взаимодействовать с Windows PowerShell

Все команды, доступные в командной строке Windows, доступны и могут также использоваться в PowerShell.

Мы можем использовать символы переправления > для отправки вывода в файл или >> для добавления в файл. PowerShell использует псевдонимы для связи команд cmd.exe со своими командлетами. Например, команда cd является псевдонимом для командлета set-location, точно так же, как dir является псевдонимом для командлета get-children.

PowerShell можно использовать для запуска исполняемых команд или для работы непосредственно с реестром Windows без запуска его редактора.

Одна из сильных сторон этой оболочки – её командлеты. Каждый командлет представлен «глаголом», за которым следует тире и существительное.

Чтобы просмотреть полный список всех доступных командлетов, введите get-command. Чтобы получить информацию о конкретном командлете, введите get-help и имя командлета.

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

Как мы объясняли ранее, командлеты возвращают чистые объекты .NET, а не текст. По этой причине командлет, расположенный справа от оператора | , может работать непосредственно со свойствами или методами вывода, созданного предыдущим командлетом.

Управление ACL списками реестра

ACL списки реестра в PowerShell управляются по такому же принципу, что и для объектов файловой системы NTFS. Отличия заключаются только в доступных разрешениях, уровнях наследования и именах используемых классов. Для установки разрешений на ключи реестра используется класс RegistryAccessRule. Список самих разрешений перечислен в RegistryRights Enumeration. Чтобы посмотреть этот список в PowerShell достаточно выполнить команду:

Получение списков ACL для ключей реестра производится так же как и для объектов файловой системы:

Создание, удаление и базовые операции с ключами реестра достаточно наглядно и доступно рассказано в TechNet, поэтому здесь я не буду рассказывать про эти операции. Предположим, у нас есть ключ реестра HKLMSoftwareAutoCAD на который группа Users имеет право чтения и мы хотим группе Users дать право WriteKey. Для этого по аналогии с назначением прав на объекты файловой системы сделаем следующее:

Единственное отличие от варианта с файловой системой заключается в используемом классе, а именно: RegistryAccessRule вместо FileSystemAccessRule. Таким же образом и удаляются явно назначенные ключи реестра:

Здесь я выделил только изменившийся метод, который теперь стал RemoveAccessRule и удаляет необходимые разрешения. Наследование тоже отменяется схожим методом:

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

This key — без флагов. По умолчанию при назначении разрешений, они применяются только на конкретный ключ
This key and subkeys — CI, None
Subkeys only — CI, IO

Дневник сисадмина

Чтобы запустить удалённую установку через удалённое подключение с помощью Enter-PSSession или через запуск команды Invoke-Command нужно изменить команду переписав её как Start-Process -ArgumentList , тогда процесс верно запустится в фоне и задача отработает.
Например, если нужно запустить команду:

msiexec /i file.msi /quiet /qn /log c:tmp

то итоговая команда будет

Start-Process ‘c:windowssystem32msiexec.exe’ -ArgumentList ‘/i file.msi /quiet /qn /log c:tmp’

Если необходимо закинуть файл на удалённый комп, то в команду копирования добавляем нужную сессию:

Copy-Item -ToSession (New-PSSession -ComputerName ) -Path -Destination

Оцените статью
Fobosworld.ru
Добавить комментарий

Adblock
detector