फोन नहीं कर सकते हैं एक Powershell स्क्रिप्ट के माध्यम से रजिस्ट्री ठीक से. एक स्थितीय पैरामीटर नहीं पाया जा सकता है स्वीकार करता है कि तर्क '$अशक्त'

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

अगर मैं इसे कॉल के माध्यम से पी एस टर्मिनल, सब कुछ काम करता है के रूप में की उम्मीद:

सही कॉल: C:\Tools\scripts> .\RegistryBoundParams.ps1 -Target "C:\Test\" -MySwitch

enter image description here

enter image description here

अगर मैं इसे कॉल रजिस्ट्री के माध्यम से (जोड़ने के आदेश करने के लिए एक संदर्भ मेनू), मैं:

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

प्लेन की त्रुटि है: RegistryBoundParams.ps1: A positional parameter cannot be found that accepts argument '$null'.

यहाँ एक reg फ़ाइल से पता चलता है कि वास्तव में मैं क्या जोड़ा गया रजिस्ट्री में:

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\""

तो कहीं न कहीं लाइनों के साथ $Null जा रहा है पारित करने के लिए स्क्रिप्ट, और मैं क्यों पता नहीं है ।

मैं वास्तव में, वास्तव में कुछ मदद का उपयोग करें यहाँ.

बहुत बहुत धन्यवाद के लिए किसी भी मार्गदर्शन ।

संपादित करें:


मैंने पाया है कि अगर मैं जोड़ने के लिए, एक नया स्ट्रिंग चर बुलाया $catchall, स्क्रिप्ट काम करता है. मुझे संदेह है कि जब बुलाया जा रहा है रजिस्ट्री से यह appending एक अशक्त मूल्य के लिए कुछ कारण है । यही वजह है कि स्क्रिप्ट काम करता है जब मैं को परिभाषित करने के लिए एक अतिरिक्त "पकड़ सभी" चर.

यह निश्चित रूप से एक आदर्श समाधान नहीं सब पर है, तो मैं कर रहा हूँ अभी भी एक समाधान के लिए देख यहाँ. वास्तव में किसी भी मदद की सराहना करते हैं!

Edit2:


यह पता चला है कि Request-AdminRights स्क्रिप्ट मैं का उपयोग कर रहा था कि mklement0 लिखा था कि एक बग अब तय हो गया है. किसी को भी, जो चाहता है एक लाइन आत्म पदोन्नति के साथ सीमा/अनबाउंड पैरामीटर का समर्थन है कि पार मंच... यह मिल जाना!

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

सबसे अच्छा जवाब

1

समस्या थी के बाद से (-) फिक्स्ड बग कोड में है कि तुम आधारित अपने स्वयं को ऊपर उठाने समारोह Request-AdminRights पर:

बग था कि के मामले में एक उन्नत स्क्रिप्ट इस तरह तुम्हारा के रूप में, $args - कभी नहीं है जो सीमा में उन्नत लिपियों - था गलती से धारावाहिक के रूप में $null के बजाय करने के लिए अनुवाद @()में जिसके परिणामस्वरूप , कि $null बीत रही के रूप में एक अतिरिक्त तर्क पर फिर से मंगलाचरण.

यदि आप अपने को फिर से परिभाषित Request-AdminRights समारोह के आधार पर अब अद्यतन के शरीर Ensure-Elevated समारोह में मूल का जवाब है, आपकी समस्या दूर जाना चाहिए - कोई ज़रूरत नहीं है को संशोधित करने के लिए संलग्न स्क्रिप्ट.

2021-11-15 19:39:31

कमाल है! धन्यवाद. मैं संशोधित अपने स्क्रिप्ट बहुत ही न्यूनतम समर्थन करने के लिए एक -NoExit स्विच. आप इसे यहाँ पा सकते हैं: github.com/visusys/VSYSFileOps/blob/main/Public/...
Jay

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में