1

У меня есть два сервера под управлением Windows Server 2012 R2 в том же домене, \ tt-sql.perf.corp и \ tt-file.perf.corp. В общей папке на файловом сервере есть сценарий Powershell, \ tt-file.perf.corp \ fileshare \ helloworld.ps1. У меня есть приложение на сервере SQL, выполнив следующую команду:Выполнение Powershell при удалении сервера завершается с ошибкой, когда путь к скрипту полностью соответствует

powershell -NonInteractive -InputFormat None -ExecutionPolicy Bypass -Command "& '\tt-file.perf.corp\fileshare\helloworld.ps1'"

Это неисправного со следующей ошибкой:

& : AuthorizationManager check failed. At line:1 char:3 + & '\tt-file.perf.corp\fileshare\helloworld.ps1' + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : SecurityError: (:) [], PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess

Он также терпит неудачу, если я изменить путь, чтобы использовать IP-адрес.

Однако, это работает, когда путь к сценарию не полное: powershell -NonInteractive -InputFormat None -ExecutionPolicy Bypass -Command "& '\tt-file\fileshare\helloworld.ps1'"

окон службы Инструментарий управления работает на обоих серверах. Я запустил Get-ExecutionPolicy на обоих серверах, и оба установлены в Unrestricted. UAC отключен на обоих серверах. Что происходит?

ответ

3

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

Более подробно можно найти in this blog post; это происходит потому, что, когда вы указываете полное доменное имя для сервера, вы сталкиваетесь с одной из функций безопасности PowerShell/Windows. Несмотря на то, что вы указываете, что PowerShell следует обходить обычную политику выполнения, запуск из полного доменного имени делает Windows верой в то, что этот файл поступает из Интернета, и поэтому PowerShell хочет отобразить вам предупреждение, подобное этому:

Run only scripts that you trust. While scripts from the Internet can be 
useful, this script can potentially harm your computer. Do you want to run 
\\tt-file.perf.corp\fileshare\helloworld.ps1? 
[D] Do not run [R] Run once [S] Suspend [?] Help (default is "D"): 

Но это невозможно, потому что вы запускаете оболочку в режиме NonInteractive.


Так у вас есть два варианта, чтобы решить эту проблему, на самом деле:

  1. Как отмечает этот блог, вы могли бы решить эту проблему, сделав на пути UNC доверенного сайта в IE, или использовать только Короткое имя, которое вы видели (используя \ tt-файл \ versus \ tt-file.perf.corp).
  2. Вы можете использовать групповую политику (или настроить в IE, если это одноразовый компьютер) для локальной зоны интрасети. Если это одноразовая машина, перейдите в Internet Explorer, «Инструменты», «Свойства обозревателя», затем перейдите на вкладку «Безопасность». Нажмите «Локальная интрасеть», «Дополнительно», а затем добавьте свое полное доменное имя здесь, как показано ниже.

Configuring the FQDN Security Prompt work-around for a single machine

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

User Configuration, expand Polices > Windows settings >Internet Explorer Maintenance >Security 3. Double click Security Zones and Content Ratings, then chose Import the current security zones and privacy settings.

Для дополнительная информация о подходе к групповой политике, refer to this thread here on TechNet.

Надеюсь, это поможет! К сожалению, я не могу придумать хороший способ PowerShell решить эту проблему :).

+0

Спасибо за информацию, которая объясняет это.Вы знаете, почему я не видел эту проблему в другом внутреннем домене? Насколько я могу судить, нет никакой групповой политики, чтобы добавить домен в локальную интрасеть, и он не установлен в IE. Я не уверен, где еще искать, чтобы выяснить, что может позволить ему работать. – themilkyninja

+0

В обозревателе Internet Explorer есть одна и та же область, о которой я упоминал раньше, чем доверенные сайты. В любом случае есть флажок, который вы можете щелкнуть, который автоматически определит сайты интрасети и обходит безопасность. Возможно, этот флажок установлен? – FoxDeploy