Aqui é um teste simples função chamada 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
Se eu chamá-lo através do PS terminal, tudo funciona conforme o esperado:
Exata chamada: C:\Tools\scripts> .\RegistryBoundParams.ps1 -Target "C:\Test\" -MySwitch
Se eu chamá-lo através do registro (adicionando o comando a um menu de contexto), eu recebo:
pwsh -noexit -file "C:\Tools\scripts\RegistryBoundParams.ps1" -Target "C:\Program Files\Python39\python.exe" -MySwitch
Plaintext de erro: RegistryBoundParams.ps1: A positional parameter cannot be found that accepts argument '$null'.
Aqui está um arquivo reg, que mostra exatamente o que eu adicionei no registro:
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\""
Então, em algum lugar ao longo das linhas de $Null está sendo passado para o script, e eu não tenho Idéia do porquê.
Eu poderia realmente usar alguma ajuda aqui.
Muito obrigado por qualquer orientação.
Editar:
Eu achei que se eu adicionar uma nova variável de seqüência de caracteres chamado $catchall, o script funciona. Eu suspeito que ao serem chamados a partir do registro é de acrescentar um valor nulo por algum motivo. É por isso que o script funciona quando eu definir um adicional de "pegar todos" variável.
Isso definitivamente não é uma solução ideal em tudo, então eu ainda estou procurando uma solução aqui. Realmente aprecio qualquer ajuda!
Edit2:
Acontece que o Request-AdminRights
script que eu estava usando mklement0 o autor tinha um bug que já foi corrigido. Quem quer uma linha de auto-elevação com vinculado/parâmetro independente do suporte que é multi-plataforma... vá buscá-lo!