Получить предупреждение PowerShell о сценариях обратно
Я нашел несколько вопросов о том, как подавить такие предупреждения:
Предупреждение о безопасности Запускайте только те сценарии, которым доверяете. Хотя сценарии из Интернета могут быть полезны, этот сценарий может нанести вред вашему компьютеру. Вы хотите запустить.\ Myscript.ps1? [D] Не запускать [R] Запускать один раз [S] Приостановить [?] Справка (по умолчанию "D"):
Но у меня есть обратная проблема. Он таинственным образом исчез, и я хочу его вернуть. У меня нет полного контроля над машиной, поэтому возможно что-то изменилось без моего ведома. Моя политика выполнения в настоящее время установлена на Restricted
, но я не вижу предупреждения при запуске powershell -ExecutionPolicy Unrestricted -File .\myscript.ps1
хотя я видел это регулярно раньше.
Почему я хочу это вернуть?
Рассматриваемая машина является тестовой машиной, предоставленной клиентом. В дальнейшем (в промежуточной и производственной средах) я ожидаю появления этого предупреждения, поэтому я хочу, чтобы моя тестовая машина была настроена так, чтобы я ее тоже там получал. Ну, нормально, по крайней мере. Моя работа, как правило, просто требует ответа "да" или "подавления", но для целей тестирования я хочу, чтобы тестовая машина была как можно более похожа на сценическую и производственную машины.
По крайней мере, я хотел бы знать, что изменилось, чтобы я мог узнать, повлияет ли это на постановку и производство, поэтому любые предложения о том, что это могло бы помочь.
1 ответ
@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 видит как "потенциально опасный" файл.