Я подумал, что напишу приличное руководство по этому вопросу, поскольку в информации, которую я нашел в Интернете, не хватает некоторых деталей.
https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/aa767914(v=vs.85)
Прежде всего, из соображений безопасности
Любая программа, веб-сайт, скрипт и т. Д., Работающие на вашем компьютере, могут отключить протокол. Нет никаких проверок авторизации.
Вы НЕ должны создавать универсальный обработчик протокола. Это было бы серьезной проблемой безопасности. Я имею в виду, что это позволит программе, веб-сайту, сценарию и т. Д. Запускать на вашем компьютере любой сценарий или команду powershell.
Создание обработчика протокола в реестре Windows протокол должен быть зарегистрирован в реестре Windows. Это простая задача.
Я вызываю мой обработчик протокола powershell для pwsh
Шаг 1: Откройте редактор реестра и перейдите к Computer\HKEY_CLASSES_ROOT
. Для вдохновения вы можете посмотреть на Computer\HKEY_CLASSES_ROOT\http
, чтобы посмотреть, как сделан этот обработчик протокола.
Шаг 2: Создайте следующую иерархию:
Создайте ключ pwsh
: [Computer\HKEY_CLASSES_ROOT\pwsh]
Измените значение по умолчанию от (Default)
до URL:pwsh
. Помните, что я вызываю мой обработчик протокола для pwsh
, пишите, как называется ваш.
Добавьте строковое значение с именем URL Protocol
и пустыми данными.
Теперь это должно выглядеть следующим образом:
Создатьновый ключ в pwsh
, DefaultIcon
: Computer\HKEY_CLASSES_ROOT\pwsh\DefaultIcon
. Задайте для поля данных (Default)
путь к файлу, который ведет к значку или изображению. Я использовал значок powershell для Powershell 7 C:\Program Files (x86)\PowerShell\7-preview\assets\ps_black_32x32.ico
.
. Затем создайте ключи shell
-> open
-> command
, как показано на рисунке выше.
Включ command
изменить значение данных (Default)
на то место, где установлен powershell, а затем запустить скрипт powershell.
При тестировании я делаю это: "C:\Program Files\PowerShell\6\pwsh.exe" -noexit -executionpolicy bypass -Command {Write-Host %1}
Примечание. Я используюPowerShell Core 6 и ваш путь к PowerShell, вероятно, отличается. Вы можете проверить работоспособность, открыв программу run
в Windows (Windows + R).
Ожидаемое поведение - окно PowerShell, которое открывается с напечатанным текстом pwsh:Hello Stackoverflow
.
Шаг 3: Создайте скрипт powershell для обработки входящих действий по протоколу. Значение данных готовности к работе для клавиши command
: "C:\Program Files\PowerShell\6\pwsh.exe" -noexit -File C:\handleActions.ps1 %1
Param($Argument="") # If the protocol is ran you always at least get the protocol name as an argument. (if using the %1)
[String]
$Argument
function Handle-Actions { # The cmdlet 'Handle-Actions' uses an unapproved verb.
[cmdletBinding()]
param(
[Parameter(Mandatory=$false, Position=0)]
[String]
$Argument
)
$Argumuments = $Argument.Split([Char]0x003F) # Splits by `?`
#Argumnets is now in an array, do whatever you need to next.
$Argumuments | %{
Write-Host $_ # Writes each argument that was seperated by ? to a line
}
}
Handle-Actions -Argument $Argument
При наличии команды запуска pwsh:?firstArgument?SecondArgument
скрипт выдаст:
pwsh:
firstArgument
SecondArgument