Zde je jednoduchý test funkce tzv. 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
Pokud mám hovor přes PS, svorka, vše funguje jak má:
Přesný volání: C:\Tools\scripts> .\RegistryBoundParams.ps1 -Target "C:\Test\" -MySwitch
Pokud mám hovor přes registry (přidat příkaz do kontextového menu), dostanu:
pwsh -noexit -file "C:\Tools\scripts\RegistryBoundParams.ps1" -Target "C:\Program Files\Python39\python.exe" -MySwitch
Plaintext chybu: RegistryBoundParams.ps1: A positional parameter cannot be found that accepts argument '$null'.
Tady je soubor s příponou reg, který ukazuje přesně to, co jsem si přidal v registru:
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 někde podél čáry $Null je předán skriptu, a já nemám Ponětí, proč.
Mohl bych opravdu použít nějakou pomoc zde.
Díky moc za jakoukoliv radu.
Edit:
Zjistil jsem, že když jsem přidat nový řetězec proměnné s názvem $všehochuť, skript funguje. Mám podezření, že když je volána z registru, že je to připojením hodnotu null pro některé důvod. Což je důvod, proč skript funguje, když jsem definovat další "chytit všechny" proměnné.
To rozhodně není ideální řešení, takže jsem stále hledal řešení. Opravdu oceňuji jakoukoliv pomoc!
Edit2:
Ukazuje se, že Request-AdminRights
skript byl jsem pomocí to mklement0 autorem měl chybu, že byl nyní vyřešen. Každý, kdo chce-line self průčelí s vázané/nevázané parametr podporu, která je cross-platform... jít si to!