windows - 通过 powershell 脚本自定义协议(protocol)处理程序

标签 windows powershell registry

问题已回答..我已将此问题编辑为工作解决方案。

这里是风景。
安装了 Jitsi VOIP 软件的 Windows 10 工作站。
我为 SIP 制作了一个协议(protocol)处理程序:使用此注册表项..

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\sip]
@="URL: SIP Protocol handler"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\sip\DefaultIcon]
@="C:\\Program Files (x86)\\Jitsi\\sc-logo.ico"
[HKEY_CLASSES_ROOT\sip\shell]
[HKEY_CLASSES_ROOT\sip\shell\open]
[HKEY_CLASSES_ROOT\sip\shell\open\command]
@="\"C:\\Program Files (x86)\\Jitsi\\Jitsi.exe\" %1"

这部分有效。输入 sip:1234567890 作为运行命令会调用该号码。

我想要做的是创建一个名为 CHK 的新协议(protocol):它向本地网络服务器发出 http 请求,如果网络服务器
回复 0,调用号码。如果响应为 1,则显示消息“无法调用此号​​码”

这是我为这个新的 chk 协议(protocol)创建的注册表项
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\chk]
@="URL: CHK Protocol handler"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\chk\DefaultIcon]
@="C:\\Program Files (x86)\\Jitsi\\sc-logo.ico"
[HKEY_CLASSES_ROOT\chk\shell]
[HKEY_CLASSES_ROOT\chk\shell\open]
[HKEY_CLASSES_ROOT\chk\shell\open\command]
@="\"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\"
-File C:\\DNC\\dnc.ps1 %1"

尽管这与 SIP reg 条目几乎相同,但当我尝试运行 chk:1234567890 时,我得到一个错误 "Apllication not found",所以
打开命令有些不对劲......

编辑:我是对的,这是打开命令..我把引号放错了地方

以及 dnc.ps1 脚本的内容...
$w=$args[0]

$chprot,$num = $w.split(':',2)

$url = "http://server/numchk.php?ph=$num"

$webclient = New-Object System.Net.WebClient

$webpage = $webclient.DownloadString($url)

if ($webpage -match "0"){ 

$launch = "C:\Program Files (x86)\Jitsi\Jitsi.exe"
$prot = 'sip:'
$arguments = $prot + $num
start-process $launch $arguments        

} Else {

$wshell = New-Object -ComObject Wscript.Shell
$wshell.Popup("CANT DIAL $num ",0,"",0x0)
}

如果我通过运行命令 powershell -noexit -File c:\DNC\dnc.ps1 chk:1234567890 运行脚本
我可以看到脚本在做正确的事情,如果响应为零,则调用号码,如果响应为 1,则显示无法调用消息。

再一次..我认为问题出在注册表项上...特别是命令/打开部分...
[HKEY_CLASSES_ROOT\chk\shell\open\command]
@="\"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe -File C:\\DNC\\dnc.ps1\" %1"

将参数传递给我缺少的参数的一些技巧:(

最佳答案

我认为你在错误的地方引用了一个引号,所以它不是在寻找“powershell.exe”,而是在寻找一个名为“powershell.exe -File C:\DNC\dnc.ps1”的文件。

这行得通吗?

[HKEY_CLASSES_ROOT\chk\shell\open\command]
@="\"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" -File C:\\DNC\\dnc.ps1 %1"

关于windows - 通过 powershell 脚本自定义协议(protocol)处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40596463/

相关文章:

linux - 如何在Windows 10中扩展磁盘空间?

json - 在 Azure JSON 模板中创建 CustomScript 的正确方法

powershell - 将名称匹配的文件夹复制到匹配目录的其他子文件夹

c# - 获取已安装产品列表c#

c# - 无法从 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 获取值名称()

windows - 是否有任何 XSLT 处理命令行工具?

windows - 在 Windows 中连接到命名管道,不同的用户帐户

windows - 创建DIBSection : Return value vs error

powershell - 解释 Powershell [void] 行为

registry - 为目录\背景添加自定义上下文菜单到资源管理器