Тот факт, что ваш скрипт по крайней мере пытается запустить , указывает на то, что вы настроили свою систему, учитывая, что по умолчанию двойной щелчок по сценариям PowerShell в FileExplorer открывает их для редактирования - см. общую информацию ниже.
Некоторые советы по устранению неполадок :
ISE выполняет повторные запуски сценария в одном и том же сеансе, поэтому укажитеЗадержка от предыдущих запусков может повлиять на последующие запуски.
Чтобы исключить эти эффекты, запустите ваш скрипт из обычного консольного окна PowerShell.
Поместитеследующая строка в верхней части вашего скрипта, чтобы предотвратить немедленное закрытие окна при возникновении ошибки во время выполнения из проводника;это даст вам возможность увидеть сообщение об ошибке:
trap { Write-Error $_; pause }
Запуск сценариев PowerShell из проводника
По умолчанию double-щелчок (открытие) *.ps1
файлов из оболочки Windows (Рабочий стол, Проводник, панель задач, меню «Пуск») не выполняет их - вместо этого они открывается для редактирования в Блокноте или PowerShell ISE, в зависимости от версии Windows / PowerShell.
Однако, поскольку, по крайней мере, в Windows 7, контекстное меню для файлов *.ps1
содержит команду Run with PowerShell
, которая выполняет для запуска сценария под рукой, а именно с помощью следующей команды, определенной в разделе реестра [HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\shell\0\Command]
(начиная с Windows 10)):
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "-Command" "if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & '%1'"
Если не действует политика выполнения AllSigned
- в этом случае могут выполняться только сценарии со знаком , но они выполняются без запроса - команда пытается установить политику выполнения для вызванного процессана Bypass
, что означает, что любой сценарий может быть выполнен, но только после того, как пользователь ответит на запрос подтверждения заранее (независимо от того, подписан ли сценарий или нет, ибыла загружена из Интернета или нет).
По крайней мере в более ранних выпусках Windows 7 / версиях PowerShell команда была неправильно определена [1] таким образом, что фактически игнорируется попытка установить политику выполнения процесса, а это означает, что независимо от того, какая политика выполнения была постоянно настроена, применена - и никакой подсказки подтверждения не отображалось.
Если вы хотите выполнить эффект двойным щелчком / открытием , у вас есть два варианта:
Определить файл ярлыка *.lnk
для вызова вашего скрипта.
Используйте реестр, чтобы переопределить команду Open
контекстного меню для *.ps1
файлов в [HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\shell\Open\Command]
- Предостережение : Это может противоречитьпользователи, привыкшие открывать файлы
*.ps1
, в результате чего они открываются для редактирования и, следовательно, могут приводить к непреднамеренному выполнению файлов.
[1] Ранее сломанное определение команды было "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "-file" "%1" "-Command" "if((Get-ExecutionPolicy ) -ne AllSigned) { Set-ExecutionPolicy -Scope Process Bypass }"
, что означало, что все, что после -file "%1"
было передано как аргументы в файл "%1"
вместо запланированного выполнения команд, следующих за-Command
;дополнительно - спорный вопрос - операнд AllSigned
должен был бы быть заключен в кавычки.