Tu je jednoduchý test funkcia sa nazýva 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
Ak som volať cez PS terminálu, všetko funguje tak, ako sa očakáva:
Presný hovoru: C:\Tools\scripts> .\RegistryBoundParams.ps1 -Target "C:\Test\" -MySwitch
Ak som volať to prostredníctvom databázy registry (pridaním príkazu na kontextové menu), som si:
pwsh -noexit -file "C:\Tools\scripts\RegistryBoundParams.ps1" -Target "C:\Program Files\Python39\python.exe" -MySwitch
Forme obyčajného textu chyby: RegistryBoundParams.ps1: A positional parameter cannot be found that accepts argument '$null'.
Tu je reg súbor, ktorý ukazuje presne to, čo som pridané do databázy registry:
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\""
Takže niekde pozdĺž línie $Null je, že prešiel na skript, a ja netuším prečo.
Mohol by som naozaj, naozaj využiť nejakú pomoc tu.
Díky moc za všetky pokyny.
Úprava:
Zistil som, že keď pridám nový reťazec premenná s názvom $catchall, skript funguje. Mám podozrenie, že, keď je volaná z databázy registry je to pridaním null hodnotu z nejakého dôvodu. Čo je dôvod, prečo skript funguje, keď som definovať ďalšie "chytiť všetky" premennej.
To určite nie je ideálne riešenie na všetko, takže som stále hľadá riešenie tu. Naozaj ocenia pomoc!
Edit2:
Ukazuje sa, že Request-AdminRights
skript bol som pomocou to, že mklement0 autorom mal bug, ktorý bol opravený. Každý, kto chce jeden-line samostatne fasáda s viazaný/neviazané parameter podporu, ktorá je cross-platform... choď si ho!