不能叫一个Powershell脚本经注册的正确。 一位参数无法被找到,接受参数'$null'

0

的问题

这里是一个简单的试验的功能叫 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

enter image description here

enter image description here

如果我叫它通过注册表(加入该命令的上下文的菜单),我获得:

pwsh -noexit -file "C:\Tools\scripts\RegistryBoundParams.ps1" -Target "C:\Program Files\Python39\python.exe" -MySwitch

enter image description here enter image description here enter image description here

明文的错误: 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编写了一个错误,现在已经固定的。 谁想要一个线自我提升与绑/未参数支持的跨平台... 去抓它!

contextmenu powershell registry windows
2021-11-15 17:19:45
1

最好的答案

1

问题是(由于固定)中的错误代码,你基于你的自我提升功能 Request-AdminRights 上:

错误的是,在这种情况下的一个 先进的 脚例如是你的, $args -这是永远不能在先进的脚本-被错误地列化 $null 而不是翻译 @(),导致在这 $null 获得通过作为一个额外的参数,在重新调用。

如果你重新定义你的 Request-AdminRights 功能基于现已更新的身体 Ensure-Elevated 功能在 原来的答案,你的问题应该去掉-不需要修改封闭脚本。

2021-11-15 19:39:31

真棒! 谢谢。 我修改脚本很低,以支持a-NoExit开关。 你可以在这里找到它: github.com/visusys/VSYSFileOps/blob/main/Public/...
Jay

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................