Назад | Перейти на главную страницу

Вернуть предупреждение PowerShell о скриптах

Я нашел несколько вопросов о том, как подавить такие предупреждения:

Предупреждение системы безопасности Запускайте только те сценарии, которым вы доверяете. Хотя сценарии из Интернета могут быть полезны, этот сценарий потенциально может нанести вред вашему компьютеру. Вы хотите запустить. \ Myscript.ps1? [D] Не запускать [R] Выполнить один раз [S] Приостановить [?] Справка (по умолчанию "D"):

Но у меня обратная проблема. Он таинственным образом исчез, и я хочу его вернуть. У меня нет полного контроля над машиной, поэтому возможно что-то изменилось без моего ведома. Моя политика выполнения в настоящее время установлена ​​на Restricted, но я не вижу предупреждения при запуске powershell -ExecutionPolicy Unrestricted -File .\myscript.ps1, хотя раньше я видел это регулярно.

Почему я хочу его вернуть?

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

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

@Jscott имеет право, что это альтернативный поток данных NTFS Zone.Identifier в сочетании с политикой выполнения Powershell, который вызывает это сообщение. Это единственные две вещи, которые собрались вместе, чтобы вызвать это послание.

«У меня нет полного контроля над машиной, поэтому возможно что-то изменилось без моего ведома».

На машине есть несколько разных политик выполнения Powershell. По умолчанию, если вы просто наберете Get-ExecutionPolicy, отображается только политика выполнения текущего пользователя.

PS C:\users\ryan> Get-ExecutionPolicy -List

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

При выполнении Set-ExecutionPolicy Unrestricted -Scope LocalMachineвы меняете политику выполнения для всех пользователей этого компьютера. Я не вижу, чтобы вы делали это различие в своем посте, поэтому полагаю, что вы этого не понимаете.

Если у вас нет прав администратора на машине, вы не сможете изменить политику выполнения LocalMachine.

Другая половина истории - это альтернативный поток Zone.Identifier. Если файлы не имеют этого альтернативного потока данных, вы не увидите это сообщение.

Вы упомянули, что загружаете эти сценарии через WinSCP. Чтобы файл, загруженный из сетевого расположения, содержал этот альтернативный поток данных, он должен быть загружен ADS-совместимым приложением Zone.Identifier, например современным веб-браузером или проводником Windows. WinSCP не входит в число таких приложений.

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

Итак, давайте исправим вашу проблему сейчас. Почему бы просто не перестроить альтернативный поток данных в скрипте, чтобы Powershell снова подумал, что вы скачали эту штуку из Интернета? Тот факт, что вам не хватает этого ADS, является причиной того, что вы не видите предупреждение системы безопасности или кнопку разблокировки.

Чтобы просмотреть ADS (и убедиться, что там ничего нет, что он пуст)

C:\> more < script.ps1:Zone.Identifier:$DATA

Чтобы перезаписать его:

C:\> echo [ZoneTransfer] > script.ps1:Zone.Identifier:$DATA

И добавляем вторую строку:

C:\> echo ZoneId=3 >> script.ps1:Zone.Identifier:$DATA

Таким образом, при вводе ADS должно выглядеть так:

C:\>more < script.ps1:Zone.Identifier:$DATA
[ZoneTransfer]
ZoneId=3

Windows и Powershell теперь снова подумают, что вы скачали этот файл из Интернета.

Редактировать: О, и я хочу предупредить вас об одном последнем. Эти «ZoneId» ... они соответствуют Зонам безопасности (Интранет, Надежные сайты, Интернет и т. Д.), Которые можно настроить в Internet Explorer. Таким образом, если администратор внес серьезные изменения в эти зоны безопасности IE, это также может повлиять на то, что Windows считает «потенциально опасным» файлом.