Проблема с SQL Server PowerShell, если RemoteSigned не задан в контроллере домена для SQL Server

В этой статье показано, как устранить проблему, возникающую, когда политика компьютера контроллера домена не имеет значения RemoteSigned групповой политики для SQL Server.

Исходная версия продукта: SQL Server
Исходный номер базы знаний: 2995870

Симптомы

При открытии консоли SQL Server PowerShell microsoft SQL Server 2012 или Microsoft SQL Server 2014 и политике компьютера контроллера домена не задано значение RemoteSigned по объекту групповой политики (GPO), может появиться следующее сообщение об ошибке:

Set-executionpolicy: Windows PowerShell успешно обновила политику выполнения, но параметр переопределяется политикой, определенной в более конкретной области. Из-за переопределения оболочка сохранит текущую эффективную политику выполнения неограниченного действия. Введите Get-ExecutionPolicy -List для просмотра параметров политики выполнения.
Дополнительные сведения см. в разделе
Get-Help Set-ExecutionPolicy.
В строке: 1 символ: 1
+ set-executionpolicy RemoteSigned -scope process -Force

Кроме того, задание завершается сбоем на третьем шаге, syspolicy_purge_history если контроллер домена не имеет значения RemoteSigned с помощью групповой политики, и может появиться следующее сообщение об ошибке:

Выполнено как пользователь: AJ\devARsqlagt. Для шага задания возникла ошибка в строке 1 в скрипте PowerShell. Соответствующая строка — set-executionpolicy RemoteSigned -scope process -Force. Исправьте скрипт и запланируйте задание заново. Сведения об ошибке, возвращаемые PowerShell: "Ошибка безопасности. '. Код выхода процесса -1. Шаг завершился с ошибкой.

Причина

Эта проблема возникает, так как политика компьютера не имеет значения RemoteSigned по объекту групповой политики и отправляется на серверы-члены. Например, если политика выполнения для настройки контроллера домена выглядит следующим образом:

Scope -                   ExecutionPolicy
--------------------------------------------------------------
MachinePolicy -           Unrestricted
UserPolicy -              Undefined
Process -                 RemoteSigned
CurrentUser -             Undefined
LocalMachine -            RemoteSigned

MachinePolicy имеет приоритет над всеми другими политиками.

Групповая политика отправляется с контроллера домена на серверы-члены, связанные с этой групповой политикой. Это задает режим без ограничений MachinePolicy , а SQL Server PowerShell пытается выполнить с RemoteSigned политикой выполнения. Поэтому конфликтующая ситуация возникает, и задание завершается ошибкой syspolicy_purge_history . То же задание успешно выполняется в SQL Server независимо от политики компьютера в контроллере домена.

Обходное решение

В качестве меры безопасности SQL Server 2012 запускает SQL PowerShell в политике RemoteSigned. Это приводит к сбою задания и возникает предыдущая проблема.

Неограниченные ограничения определенно не рекомендуется с точки зрения безопасности, так как это означает отсутствие ограничений. Именно поэтому при запуске с SQL 2012 скрипты PowerShell выполняются успешно, когда MachinePolicy устанавливается как RemoteSigned в контроллере домена.

Чтобы обойти эту проблему, воспользуйтесь одним из описанных ниже методов.

  • Не устанавливайте политику компьютера контроллера домена с помощью групповой политики. Если это не определено, это означает, что политика следующего уровня (например, UserPolicy, то Process, то CurrentUser, а затем LocalMachine) будет иметь приоритет.

  • Создайте подразделение в Пользователи и компьютеры Active Directory и свяжите эту подразделение с групповой политикой. Затем включите его для политики RemoteSigned. Для этого выполните следующие шаги.

    1. Перейдите к Пользователи и компьютеры Active Directory.

    2. Щелкните правой кнопкой мыши домен ->New ->Организационный блок, чтобы создать подразделение.

    3. Введите gpmc.msc в run, а затем щелкните правой кнопкой мыши объект групповой политики ->New, чтобы создать новый объект групповой политики.

    4. Щелкните правой кнопкой мыши только что созданный объект групповой политики ->Edit. Откроется новое окно.

    5. Перейдите к конфигурации компьютера -Политики ->>Административные шаблоны ->Компоненты Windows ->Windows PowerShell —> дважды щелкните "Включить выполнение скрипта".

    6. Задайте политику выполнения, чтобы разрешить локальные скрипты и удаленные подписанные скрипты.

    7. Щелкните Применить, затем щелкните ОК.

    8. Перейдите к Пользователи и компьютеры Active Directory и щелкните "Компьютеры". Список компьютеров для домена. Щелкните правой кнопкой мыши компьютеры, которые нужно переместить в только что созданное подразделение. Таким образом, можно переместить одну или группу компьютеров в подразделение.

    9. Перейдите к управлению групповыми политиками, щелкните правой кнопкой мыши только что созданную подразделение, щелкните ссылку на существующий объект групповой политики, выберите только что созданный объект групповой политики и нажмите кнопку "ОК".

    10. Обновите политику на контроллере домена и на клиентском компьютере, выполнив эту команду в PowerShell.

      gpupdate /force
      
    11. Убедитесь, что политика компьютера для подразделения и компонента клиента должна быть удалена.

Ссылки

Сведения о политиках выполнения