นี่คือแบบทดสอบเรียกฟังก์ชัน 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 เทอร์มินัล,ทุกอย่างที่ทำงานเป็นคาดหวัง:
มือเรียก: C:\Tools\scripts> .\RegistryBoundParams.ps1 -Target "C:\Test\" -MySwitch
ถ้าฉันเรียกมันออกไปทางลงชื่อ(การเพิ่มคำสั่งที่จะเป็นเมนูเมื่อคลิกขวา@title:tab)ฉันได้:
pwsh -noexit -file "C:\Tools\scripts\RegistryBoundParams.ps1" -Target "C:\Program Files\Python39\python.exe" -MySwitch
Plaintext ของข้อผิดพลาดคือ: RegistryBoundParams.ps1: A positional parameter cannot be found that accepts argument '$null'.
นี่คือข้อบังคับแฟ้มที่แสดงถึงสิ่งที่ฉันเพิ่มอยู่ที่ลงชื่อ:
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\""
ดังนั้นที่ไหนซักแห่งตามครรลอง$โพรโทคอล aimcomment กำลังผ่านไปสอบสคริปต์และฉันก็ไม่รู้ว่าทำไมเหมือนกัน
ฉันอาจจะจริงต้องการความช่วยเหลืออยู่ที่นี่
ขอบคุณมากสำหรับอะไรตัวเองรู้สึกดีหรอก
แก้ไข:
ฉันเจอว่าถ้าฉันเพิ่มใหม่ข้อความเรียกตัวแปร$catchall,สคริปต์ได้ผล ฉันต้องสงสัยว่าเมื่อถูกเรียกจากลงชื่อมันเป็น appending เป็นโพรโทคอล aimcomment ค่าสำหรับเหตุผลบางอย่าง นั่นเป็นเหตุผลว่าทำไมต้องสคริปต์ทำงานตอนที่ฉันกำหนดการเพิ่มเติม"จับทุกอย่าง"ตัวแปร
นี่คือแน่นอนว่าไม่ใช่ในอุดมคติอย่างสมบูรณ์ทางออกทั้งหมดังนั้นฉันยังคงมองหาวิธีแก้ปัญหาอยู่ที่นี่ จริงๆยินดีรับความช่วยด้วย!
Edit2:
มันกลายเป็นว่า Request-AdminRights
สคริปต์ฉันใช้มัน mklement0 authored มีข้อผิดพลาดนั่นมีตอนนี้ถูกซ่อมแล้ว ใครใครต้องการหนึ่งบรรทัดตัวเองเลือกับผูก/unbound พารามิเตอร์สนับสนุนนั่นคือแข่งแพลตฟอร์ม... ไปเลย!