Я понимаю, что этому вопросу уже пару лет, но, поскольку он по-прежнему является лучшим результатом для большинства запросов Google, касающихся запуска PowerShell с помощью перетаскивания в Проводнике, я решил опубликовать то, что мне пришло с сегодняшним днем в надежде, что это поможет другим.
Я хотел иметь возможность перетаскивать файлы в сценарии PowerShell (ps1) и не мог найти хороших решений (ничего, что не включало бы дополнительный сценарий или ярлык). Я начал осматривать файловых партнеров в реестре и нашел что-то, что, кажется, отлично работает.
Сначала нам нужно добавить запись DropHandler для файлов .PS1, чтобы Explorer знал, что файлы PS1 должны принимать операции перетаскивания. Сделайте это с этим изменением реестра. Возможно, вам придется создать подразделы ShellEx и DropHandler.
HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\ShellEx\DropHandler\
(Default) = {60254CA5-953B-11CF-8C96-00AA00B8708C}
Этот обработчик отбрасывания используется для Windows Scripting Host. Это мой первый выбор, потому что он поддерживает длинные имена файлов. Если у вас возникли проблемы с пробелами или чем-то еще, вы можете попробовать стандартный обработчик отбрасывания исполняемого файла Shell32 (.exe, .bat и т. Д.): {86C86720-42A0-1069-A2E8-08002B30309D}
.
Оба эти обработчика сброса работают, просто вызывая глагол по умолчанию (что происходит, когда вы дважды щелкаете файл) для типа файла (который рассматривается как значение (Default)
ключа Shell). В случае файлов PS1 это Open . По умолчанию этот глагол отображает скрипт PowerShell в Блокноте - не очень полезен.
Измените это поведение, изменив глагол Open для файлов PS1:
HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\Open\Command\
(Default) = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoExit -File "%1" %*
Это запустит скрипт в PowerShell при его открытии, а также передаст ему все параметры (удаленные файлы). У меня установлено, чтобы он оставался открытым после завершения сценария, но вы можете изменить это, удалив параметр -NoExit
.
Вот и все. Я не проводил никаких обширных испытаний, но пока, похоже, он работает очень хорошо. Я могу удалить отдельные файлы / папки, а также группы. Порядок файлов в списке параметров не всегда тот, который вы ожидаете (причуды того, как Explorer упорядочивает выбранные файлы), но в остальном он кажется идеальным. Вы также можете создать ярлык для файла PS1 в Shell:Sendto
, позволяя передавать файлы с помощью меню «Отправить».
Вот оба изменения в формате файла REG:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\ShellEx\DropHandler]
@="{60254CA5-953B-11CF-8C96-00AA00B8708C}"
[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\Open\Command]
@="\"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" -NoExit -File \"%1\" %*"
Примечания:
В результате этих изменений двойной щелчок по файлу PS1 в проводнике запустит скрипт; чтобы редактировать, а не открывать, вам придется использовать меню, вызываемое правой кнопкой мыши. И в качестве предложения (к сожалению, извлеченного из горького опыта :), вы можете рассмотреть вопрос о проверке подтверждения / проверки работоспособности, если у вас есть сценарии, которые выполняют разрушительные действия.
Скрипты, запускаемые с помощью перетаскивания, будут иметь начальный рабочий каталог по умолчанию C:\Windows\system32\
. Еще одна причина быть осторожным.
Помните, что вам нужно будет изменить Политику выполнения (Set-ExecutionPolicy), если вы не используете подписанные сценарии.
Если вы настроили обработку файлов .PS1 в Windows 10, вам нужно удалить раздел реестра HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ps1\UserChoice
, который переопределит обработку по умолчанию.