这里是一个简单的试验的功能叫 RegistryBoundParams.ps1
:
[CmdletBinding()]
param (
[Parameter(Mandatory = $true)]
[string]
$Target,
[Parameter(Mandatory = $false)]
[switch]
$MySwitch
)
if(!(Test-IsAdmin)){
Request-AdminRights -NoExit
Exit
}
if($MySwitch){
"Do something" | Out-Host
}else {
"Do something else" | Out-Host
}
Show-AllArguments
如果我叫它通过PS终端,一切正常,因为预期:
确切呼吁: C:\Tools\scripts> .\RegistryBoundParams.ps1 -Target "C:\Test\" -MySwitch
如果我叫它通过注册表(加入该命令的上下文的菜单),我获得:
pwsh -noexit -file "C:\Tools\scripts\RegistryBoundParams.ps1" -Target "C:\Program Files\Python39\python.exe" -MySwitch
明文的错误: RegistryBoundParams.ps1: A positional parameter cannot be found that accepts argument '$null'.
这里有一个注册文件,该文件显示到底是什么我增加在注册表中:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\1_TestRegistry]
@="Test Powershell Script from Registry"
"Icon"="C:\\Tools\\icons\\apps\\Powershell 1.ico,0"
"NeverDefault"=""
[HKEY_CLASSES_ROOT\*\shell\1_TestRegistry\command]
@="pwsh -noexit -file \"C:\\Tools\\scripts\\RegistryBoundParams.ps1\" -Target \"C:\\Program Files\\Python39\\python.exe\""
这样的地方沿线$Null是被通过剧本,我不知道为什么。
我真的可以,真正使用一些帮助。
非常感谢任何的指导。
编辑:
我发现,如果添加一个新的串的变量,称为$通用,本脚本的工作。 我怀疑,当被称为从注册这是追加的空值的一些原因。 这就是为什么剧本的作品当我定义的一个额外的"捕捉"变量。
这绝对不是一个理想的解决方案,因此我仍然在寻找一个解决方案。 真的很感谢任何的帮助!
Edit2:
事实证明, Request-AdminRights
脚本我是用,mklement0编写了一个错误,现在已经固定的。 谁想要一个线自我提升与绑/未参数支持的跨平台... 去抓它!