व्यवस्थापक और मानक उपयोगकर्ता के रूप में चलाने के लिए कमांड के साथ बैच फ़ाइल


9

मैं एक बैच फ़ाइल लिखने की कोशिश कर रहा हूं, जिसे स्थानीय व्यवस्थापक खाते का उपयोग करके कुछ कमांड चलाने की आवश्यकता है (एक सेवा शुरू / रोकें) और कुछ कमांड लॉग इन उपयोगकर्ता (उपयोगकर्ता निर्देशिका से फ़ाइलों की प्रतिलिपि) का उपयोग करके और मैं समस्याओं का सामना कर रहा हूं। मैंने निम्नलिखित आदेशों की कोशिश की है:

runas / savecred के साथ

runas /user:(PC name)\(admin username) /savecred "net stop \"(service name)\""
runas /user:(PC name)\(admin username) /savecred "sc stop \"(service name)\""

उपयोग करते समय /savecredमुझे पासवर्ड के लिए प्रेरित नहीं किया जाता है। इसके बजाय एक कमांड प्रॉम्प्ट विंडो संक्षेप में चमकती है और गायब हो जाती है। मैं यह नहीं बता पा रहा हूं कि इस खिड़की में क्या है। सेवा बंद नहीं है।

runas बिना / savecred

runas /user:(PC name)\(admin username) "net stop \"(service name)\""
runas /user:(PC name)\(admin username) "sc stop \"(service name)\""

ये कमांड मुझे एक पासवर्ड के लिए संकेत देते हैं लेकिन फिर उपरोक्त कमांड के समान व्यवहार प्रदर्शित करते हैं - एक कमांड प्रॉम्प्ट विंडो संक्षेप में पॉप अप होती है और सेवा बंद नहीं होती है।

आदर्श रूप में मैं सत्र के लिए पासवर्ड सहेजना चाहूंगा क्योंकि मुझे विवरण के साथ अधिक कमांड चलाने की आवश्यकता होगी।

क्या यह संभव है और यदि हां, तो मैं क्या गलत कर रहा हूं?


अंत में "ठहराव" कमांड जोड़ें इसे बंद करने से रोकने के लिए
मार्टिन

मेरे पास पहले से ही मेरे बैच फ़ाइल के अंत में एक विराम है, लेकिन कमांड एक और कमांड प्रॉम्प्ट शुरू कर रहे हैं - मुझे नहीं पता कि उस गायब होने को कैसे रोका जाए।
स्टुअर्ट लीलैंड-कोल

किसी फ़ाइल में आउटपुट को निर्देशित करने का प्रयास करें, और देखें कि क्या यह उस पर कुछ प्रिंट करता है: "रनस / उपयोगकर्ता: (पीसी नाम) (व्यवस्थापक उपयोगकर्ता नाम)" नेट स्टॉप \ "(सेवा का नाम) \" >> "log.txt"
मार्टिन

मुझे / savecred विकल्प के साथ कमांड को चलाना होगा अन्यथा लॉग फ़ाइल में पासवर्ड के लिए संकेत दिखाई देता है। अगर मैं runas /user:(PC name)\(username) /savecred "net stop \"(service name)\"" >> log.txtकुछ भी नहीं चलाता है तो लॉग फ़ाइल में आउटपुट होता है।
स्टुअर्ट लीलैंड-कोल

Rob van der Woude का बैच डिबगिंग पृष्ठ देखें: robvanderwoude.com/battech_debugging.php । सबसे महत्वपूर्ण बात, LOGBATCH.BAT को डाउनलोड करें, और इसे इस तरह से चलाएं: LOGBATCH.BAT yourbatch.bat any_parameters_your_batch_needsऔर यह एक लॉग फाइल बनाएगा जिसमें प्रत्येक कमांड / एक्शन का प्रदर्शन yourbatch.batहोगा, जो आपको वहां दिखाई दे रही है।
जेस्चेंज

जवाबों:


12

आप अपनी स्क्रिप्ट में निम्न जोड़ सकते हैं और यह इसे उन्नत करने के लिए बाध्य करेगा। कुछ भी डाउनलोड करने की आवश्यकता नहीं है।

:: BatchGotAdmin
:-------------------------------------
REM  --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
    pushd "%CD%"
    CD /D "%~dp0"
:--------------------------------------

यह सब Requesting administrative privileges...कुछ स्क्रीन पर प्रिंट होने तक होता है।
मफिन मैन

@ द मफिन मैन। अपने कमांड्स को बैच फ़ाइल के अंत में जोड़ें और यह ऊंचाई के बाद उन्हें निष्पादित करेगा।
पेले

1
यह विधि उत्कृष्ट है। इसके लिए कोई अतिरिक्त निर्भरता (जैसे पेसेक) की आवश्यकता नहीं है।
विलियम

उस स्क्रिप्ट के साथ एक अनंत लूप में मिला ...
JackTheKnife

0

अपनी बैच फ़ाइल को दो में विभाजित करें। वह भाग जिसे आप system32 में चिपकाना चाहते हैं, जैसे कि System32। सामान्य सीएमडी में आप जो भाग चलाना चाहते हैं, उसे नियमित फ़ोल्डर में पेस्ट करें, और यहां से दूसरी बैच फ़ाइल को कॉल करें जो कि सिस्टम 32 है। इस तरह दूसरा भाग हमेशा admincmd में चलता है। मैंने इसकी कोशिश की है और यह मेरे लिए काम करता है।


0

अगर आपको थर्ड पार्टी सॉफ्टवेयर से कोई आपत्ति नहीं है, तो आप पासवर्ड रनपासकैप के रूप में चलाने का प्रयास कर सकते हैं । यह आपके पासवर्ड को एक एन्क्रिप्टेड फ़ाइल में बचाएगा। पासवर्ड को बैच फ़ाइल में उजागर नहीं किया जाना चाहिए।


0

"रनस" कमांड आपके कमांड को "सुडो" नहीं करेगा।

एक बैच फ़ाइल से ऐसा करने के लिए, आपको उन आदेशों को "ऊंचा" करने की आवश्यकता है जिन्हें आप स्पॉन कर रहे हैं। एलिवेट पॉवरटॉय स्क्रिप्ट डाउनलोड करें।

http://technet.microsoft.com/en-us/magazine/2008.06.elevation.aspx

अपने आदेशों को निम्नानुसार लॉन्च करें:

runas /user:(PC name)\(admin username) /savecred "elevate.cmd net stop \"(service name)\""

या

runas /user:(PC name)\(admin username) /savecred "elevate sc stop \"(service name)\""

मैं निम्नलिखित 3 आदेशों की कोशिश की है: runas /user:$PcName\$Username /savecred "elevate.cmd sc stop \"$ServiceName\"", runas /user:$PcName\$Username /savecred "elevate.cmd net stop \"$ServiceName\"", runas /user:$PcName\$Username /savecred "elevate.cmd net stop $ServiceName"और उनमें से प्रत्येक यह त्रुटि देता है: RunAs त्रुटि: चलाने में असमर्थ - -2147467259 alfrescoTomcat elevate.cmd शुद्ध रोक: अनिर्दिष्ट त्रुटि
स्टुअर्ट लीलैंड-कोल

3 पंक्ति बैच फ़ाइल जो कमांड को ऊपर
उठाएगी

0

मैं निम्नलिखित कोड का उपयोग करता हूं:

::#################################################################################################################################
:: Elevate this script                                                                                                            #
::#################################################################################################################################

(
    :: Check Admin rights and create VBS Script to elevate
    >nul fsutil 2>&1 || (

        :: Very little red console
        mode con cols=80 lines=3 
        color cf

        :: Message
        title Please wait...
        echo.
        echo                         Requesting elevated shell...

        :: Create VBS script
        echo Set UAC = CreateObject^("Shell.Application"^)>"%TEMP%\elevate.vbs"
        echo UAC.ShellExecute "%~f0", "%TEMP%\elevate.vbs", "", "runas", 1 >>"%TEMP%\elevate.vbs"
        if exist "%TEMP%\elevate.vbs" start /b >nul cscript /nologo "%TEMP%\elevate.vbs" 2>&1
        exit /b
    )

    :: Delete elevation script if exist
    if exist "%~1" >nul del /f "%~1" 2>&1
)

pushd "%~dp0"

.... your code ....

popd

इसे अपने @echo ऑफ और टिप्पणी के बाद डालें।


0

सरलीकृत उत्तर (user325534 के अलावा) यदि आपको केवल कुछ निर्देशिका में काम शुरू करने की आवश्यकता है, तो ईवेटेड एक्सेस के साथ:

@echo off

set MyWorkDir=D:\dev\

echo Requesting administrative privileges...

echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "cmd", "/C start /D %MyWorkDir% cmd", "", "runas", 1 >> "%temp%\getadmin.vbs"

"%temp%\getadmin.vbs"

0

यह कोड cmd को यूजर पासवर्ड मांगने की अनुमति देता है। उपयोगकर्ता को अपना पासवर्ड टाइप करना होगा और फिर executable.batव्यवस्थापक के रूप में चलाया जाएगा

main.bat

@echo off
color 1f
Title Main
Goto start
:Start
runas /user:%username% executable.bat
pause

executable.bat

all code that runs as administrator

0

मैंने अपने कोड को दो भागों में विभाजित किया है

  • एक जिसे व्यवस्थापक विशेषाधिकारों की आवश्यकता होती है।

प्रोग्राम फ़ाइलों में एक निष्पादन योग्य नाम बदलना

  • दूसरा हिस्सा जो शुरू हुआ और मारा गया, वह निष्पादन योग्य था।

इसे ऊंचा शुरू करने से यह कार्यक्रम बेकार हो गया क्योंकि अन्य चीजें जो इस पर निर्भर थीं, वे उन्नत नहीं थीं

बल्ला फ़ाइल के लिए एक शॉर्टकट बनाया गया है जिसमें उन्नयन की आवश्यकता है और इसके गुणों में "व्यवस्थापक के रूप में चलाएं" की जाँच की। अन्य फ़ाइल में शॉर्टकट का उपयोग किया।

कान्स

  • प्रत्येक शॉर्टकट एक नया cmd विंडो खोलता है
  • यदि दोनों भाग एक दूसरे पर निर्भर करते हैं तो मुझे अतिरिक्त काम करने की आवश्यकता है

मैं इतनी लंबाई में चला गया क्योंकि निष्पादन योग्य स्वचालित रूप से अपनी सेटिंग्स में ऑटो-स्टार्टअप को अक्षम करने के बावजूद चल रहा था और msconfig ने भी अपनी सेवा को मैन्युअल रूप से सेट किया। यह मेरा अंतिम प्रयास था कि इसे व्यवहार में लाया जाए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.