İşte adı verilen basit bir test işlevi 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 terminali üzerinden çağırırsam, her şey beklendiği gibi çalışır:
Tam çağrı: C:\Tools\scripts> .\RegistryBoundParams.ps1 -Target "C:\Test\" -MySwitch
Kayıt defteri aracılığıyla çağırırsam (komutu bir içerik menüsüne eklersem), şunu alırım:
pwsh -noexit -file "C:\Tools\scripts\RegistryBoundParams.ps1" -Target "C:\Program Files\Python39\python.exe" -MySwitch
Hatanın düz metni: RegistryBoundParams.ps1: A positional parameter cannot be found that accepts argument '$null'.
İşte kayıt defterine tam olarak ne eklediğimi gösteren bir reg dosyası:
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\""
Yani satırlar boyunca bir yerde $Null komut dosyasına aktarılıyor ve neden olduğu hakkında hiçbir fikrim yok.
Ama çok ihtiyacım var yardıma kullanın.
Herhangi bir rehberlik için çok teşekkürler.
Düzenlemek:
$Catchall adlı yeni bir dize değişkeni eklersem, komut dosyasının çalıştığını gördüm. Kayıt defterinden çağrıldığında, bir nedenden dolayı boş bir değer eklediğinden şüpheleniyorum. Bu yüzden ek bir "tümünü yakala" değişkeni tanımladığımda komut dosyası çalışır.
Bu kesinlikle ideal bir çözüm değil, bu yüzden hala burada bir çözüm arıyorum. Herhangi bir yardım gerçekten takdir!
Düzen2:
Bu çıkıyor Request-AdminRights
mklement0 tarafından yazılan komut dosyasında şu anda düzeltilen bir hata vardı. Çapraz platform olan bağlı/ilişkisiz parametre desteği ile tek satırlık kendini yükseltmek isteyen herkes... git getir!