ไม่สามารถโทรหา Powershell สคริปต์ผ่านทางลงชื่ออย่างเหมาะสม เป็น positional พารามิเตอร์ไม่สามารถจะพบมันยอมรับอาร์กิวเมนต์'$โพรโทคอล aimcomment'

0

คำถาม

นี่คือแบบทดสอบเรียกฟังก์ชัน 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

enter image description here

enter image description here

ถ้าฉันเรียกมันออกไปทางลงชื่อ(การเพิ่มคำสั่งที่จะเป็นเมนูเมื่อคลิกขวา@title:tab)ฉันได้:

pwsh -noexit -file "C:\Tools\scripts\RegistryBoundParams.ps1" -Target "C:\Program Files\Python39\python.exe" -MySwitch

enter image description here enter image description here enter image description here

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 พารามิเตอร์สนับสนุนนั่นคือแข่งแพลตฟอร์ม... ไปเลย!

contextmenu powershell registry windows
2021-11-15 17:19:45
1

คำตอบที่ดีที่สุด

1

ปัญหาคือ(ตั้งแต่-กว้างคงที่)ข้อผิดพลาดของรหัสนั่นคุณฐานของตัวเอง elevating ฟังก์ชัน Request-AdminRights บน:

บข้อผิดพลาดนั่นในกรณีของ ขั้นสูง สคริปต์อย่างเช่นคุณ $args -ซึ่งมันไม่เคยถูกผูกไว้ในสคริปต์ขั้นสูง-เป็น mistakenly serialized เป็ $null แทนที่จะแปลให้ @(),ผลลัพธ์จากในนั้น $null กำลังผ่านที่เป็นพิเศษโต้แย้งกันใหม่-invocation.

ถ้าคุณ redefine ของคุณ Request-AdminRights ฟังก์ชันขึ้นอยู่กับตอนนี้ปรับปรุงร่างกายของ Ensure-Elevated ฟังก์ชันที่ ดั้งเดิมตอบ,ปัญหาของคุณควรจะไปให้พ้น-ไม่ต้องการเพื่อแก้ไข enclosing สคริปต์

2021-11-15 19:39:31

สุดยอดไปเลย! ขอบคุณ ฉันมีการแก้ไขสคริปต์ของคุณมาก minimally สนับสนุนการ-NoExit ตอนนี้หรืออาจจะตลอดไป คุณสามารถหามันได้ที่นี่: github.com/visusys/VSYSFileOps/blob/main/Public/...
Jay

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่