Aquí está una prueba simple de la función de llamada 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
Si me llaman a través de la PS terminal, todo funciona como se espera:
Exacto llamar a: C:\Tools\scripts> .\RegistryBoundParams.ps1 -Target "C:\Test\" -MySwitch
Si me llaman a través del registro (agregar el comando a un menú de contexto), me sale:
pwsh -noexit -file "C:\Tools\scripts\RegistryBoundParams.ps1" -Target "C:\Program Files\Python39\python.exe" -MySwitch
Texto del error: RegistryBoundParams.ps1: A positional parameter cannot be found that accepts argument '$null'.
He aquí un archivo reg que muestra exactamente lo que he añadido en el 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\""
Así que en algún lugar a lo largo de las líneas de $Null se pasa a la secuencia de comandos, y no tengo Idea de por qué.
Yo podría realmente utilizar un poco de ayuda aquí.
Muchas gracias por cualquier orientación.
Editar:
He encontrado que si puedo agregar una nueva variable de cadena llamada $cajón de sastre, el script funciona. Sospecho que cuando se llama desde el registro es añadiendo un valor nulo por alguna razón. Es por eso que el script funciona cuando defino un adicional de "catch all" de la variable.
Este definitivamente no es una solución ideal a todos, así que todavía estoy buscando una solución a este problema. Realmente apreciamos cualquier ayuda!
Edit2:
Resulta que el Request-AdminRights
secuencia de comandos que estaba usando en ese mklement0 autor tenía un error que ya se ha solucionado. Cualquier persona que quiera tener una línea de auto de elevación con enlazados/parámetro independiente de apoyo que de la cruz-plataforma de... ir a por él!