自定义协议处理程序通过powershell脚本

时间:2016-11-14 19:34:05

标签: windows powershell registry

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

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

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的新协议:对本地Web服务器发出http请求,如果是web服务器 以0响应,拨打号码。如果响应为1,则显示消息“此号码无法拨打”

这是我为这个新的chk协议做的注册表项

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 entry相同,但当我尝试运行chk:1234567890时,我收到错误“未找到应用程序”,所以 开放的命令有些不对劲......

编辑:我是对的,这是开放的命令..我的引号位于错误的地方

以及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,则show无法拨打消息。

再说一遍..我认为问题在于注册表项...特定于命令/开放部分......

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

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

1 个答案:

答案 0 :(得分: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"