ব্যাচের ফাইলের মধ্যে প্রশাসকের অ্যাক্সেসের জন্য কীভাবে অনুরোধ করবেন


179

আমি আমার ব্যবহারকারীদের তাদের ভিস্তা মেশিনগুলি ইউএসি দিয়ে চালানোর জন্য একটি ব্যাচ ফাইল লেখার চেষ্টা করছি। ফাইলটি তাদের হোস্ট ফাইলটি পুনরায় লিখছে, সুতরাং প্রশাসকের অনুমতি নিয়ে এটি চালানো দরকার। আমার .bat ফাইলের লিঙ্ক সহ তাদের একটি ইমেল পাঠাতে সক্ষম হওয়া দরকার। কাঙ্ক্ষিত আচরণটি হ'ল যখন তারা ফাইলটিতে ডান ক্লিক করে ওপেন বলবে তখন তারা সেই ইউএসি ডায়ালগগুলির মধ্যে একটি পাবে যা স্ক্রিনটি অন্ধকার করে দেয় এবং প্রশাসক হিসাবে চালানোর জন্য অ্যাপ্লিকেশনকে অনুমতি দিতে চায় কিনা তা উত্তর দিতে বাধ্য করে। পরিবর্তে, তারা কমান্ড লাইন উইন্ডোতে কেবল "অ্যাক্সেস অস্বীকৃত" দেখছে।

এটি কি অন্যভাবে করা সম্ভব?


2
আপনি যদি এটি জুড়ে এসেছিলেন এবং আমার মতো, পাওয়ারশেল ব্যবহার করে খুশি হন তবে @ টস্টার-সিএক্স থেকে ওয়ান-লাইনার মিস করবেন না। পারফেক্ট!
মাইকেল রেপুচি

উত্তর:


352

এই স্ক্রিপ্টটি কৌতুক করে! এটি কেবল আপনার ব্যাটের ফাইলের শীর্ষে পেস্ট করুন। আপনি যদি আপনার স্ক্রিপ্টের আউটপুট পর্যালোচনা করতে চান তবে আপনার ব্যাচের ফাইলের নীচে একটি "বিরতি" কমান্ড যুক্ত করুন।

আপডেট: এই স্ক্রিপ্টটি এখন কমান্ড লাইন আর্গুমেন্ট এবং একটি 64 বিট ওএস সমর্থন করার জন্য সামান্য সম্পাদিত।

আপনাকে ধন্যবাদ এনারজি @ https://sites.google.com/site/eneerge/scriptts/batchgotadmin

@echo off

:: BatchGotAdmin
:-------------------------------------
REM  --> Check for permissions
    IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
>nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system"
) ELSE (
>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"
    set params= %*
    echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params:"=""%", "", "runas", 1 >> "%temp%\getadmin.vbs"

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

:gotAdmin
    pushd "%CD%"
    CD /D "%~dp0"
:--------------------------------------    
    <YOUR BATCH SCRIPT HERE>

22
আমি এই নোংরা ডস ব্যাচের আজেবাজে কাজ করতে ঘৃণা করি তবে কখনও কখনও আপনি বাধ্য হন এবং এটি দুর্দান্ত কাজ করে। চিয়ার্স!
ম্যাটটি

4
এই পদ্ধতিটি তর্কগুলি ফরোয়ার্ড করে না আপনি কি জানেন যে এটি কীভাবে করা যায়? মূলত আমি যা পর্যবেক্ষণ করি তা হ'ল প্রথম লাইনে% 1 এর কিছু মান রয়েছে এবং শেষ লাইনে% 1 টি বাতিল। আমার তর্কগুলি ফরোয়ার্ড করা দরকার।
প্রান্ত

3
একটি এফওয়াইআই যেমন উইন্ডোজ 8 এমবেডেড
রবার্ট স্নাইডার

6
এটি আমার মেশিনটিকে স্ক্রিন জুড়ে তির্যকভাবে কমান্ড উইন্ডো খোলার এবং বন্ধ করার সর্পিলটিতে ফেলে দেয়। এটি বন্ধ করার একমাত্র উপায় হ'ল আসল ব্যাচের ফাইলটি মুছুন। এটি বারবার আমার ব্যাচের ফাইলটি চালাচ্ছে এবং ভিবিএস ফাইলটি লিখছে। প্রথমবার এটি অনুমোদনের জন্য জিজ্ঞাসা করেছিল, তবে এর পরে এটি কেবল লুপ হয়।
টমডস্ট্রি

2
আমি অসীম লুপ এবং রিটার্ন কোড 2 দিয়ে টমডাস্ট্রির মতো ঠিক একই সমস্যায় পড়েছি। এটি উইন্ডোজ 8.1 এ ছিল। আমি জানি এটি উইন্ডোজ ৮.০ এ কাজ করেছিল এবং এটি ৮.১ আপডেট বা ইসসু হওয়ার কারণে অন্য কিছু ছিল কিনা তা নিশ্চিত করে বলতে পারি না। আমার জন্য যে সমাধানটি কাজ করেছিল তা হ'ল cacls.exe (বা আইক্যাকলস) ব্যবহার না করে: নেট সেশন> নুল 2> এবং 1 যদি এররোলভেল 1 এর আগে ইউএসিপ্রম্পট ...
ক্রিগ

55

এখানে আমি ব্যবহার করছি একটি ওয়ান-লাইনার:

@echo off
if not "%1"=="am_admin" (powershell start -verb runas '%0' am_admin & exit /b)

echo main code here
pause

মন্তব্য:

  • শুধুমাত্র উইন্ডোজ 7 এবং 10 এ পরীক্ষা করা হয়েছে, আপনাকে উদ্ধৃতি দিয়ে গোলমাল করতে হতে পারে
  • আপাতত যুক্তি সহকারে পাস করা সমর্থন করে না

1
আপনি যদি জানেন যে সেখানে কতগুলি প্যারাম থাকতে পারে, আপনি am_admin if not "%1"=="am_admin" (powershell start -verb runas '%0' 'am_admin "%~1" "%~2"' & exit)যেগুলি
টনি ব্রিক্স

'am_admin %*'সমস্ত কিছু পাস করার জন্যও ব্যবহার করা সম্ভব , কোট এবং স্পেসগুলির সাথে ভাল খেলবেন না: / আপনি shiftপ্রথম আরগটি পপ করতে ব্যাচ ব্যবহার করতে পারেন , এইভাবে ব্যতীত সমস্ত আরগগুলি স্থির করে %0
টস্টার-সিএক্স

এটি উত্তম উত্তর, তবে এটি একটি গ্রহণযোগ্য হওয়া উচিত নয়, কারণ এটি প্রথম দৌড়ে এটি অ্যাডমিন বিশেষাধিকার দিয়ে চালিত হয়েছিল কিনা তা পরীক্ষা করে দেখতে পারে না।
টি.ডুডো

কাজ ডিরেক্টরি অ্যাড রাখার জন্য cd /D %~dp0পরেif not "%1"=="am_admin" (powershell start -verb runas '%0' am_admin & exit /b)
পেড্রো দুয়ার্তে

ভাল উত্তর. % টেম্প%% রচনার অনুমতি নিয়ে এমনকি ভিবি স্ক্রিপ্ট জিনিস অসীম লুপ তৈরি করার সময় কেবলমাত্র কাজ করে।
টোনকি

19

এখানে আমার কোড! এটি দেখতে দুর্দান্ত দেখায় তবে এটি বেশিরভাগ মন্তব্য লাইনের (লাইনগুলি: :) দিয়ে শুরু হয়।

বৈশিষ্ট্য:

  • সম্পূর্ণ যুক্তি ফরোয়ার্ডিং
  • কাজের ফোল্ডার পরিবর্তন করে না
  • ত্রুটি পরিচালনা
  • প্রথম বন্ধনী সহ পাথগুলি গ্রহণ করে (% TEMP% ফোল্ডার ব্যতীত)
  • ইউএনসি পাথ সমর্থন করে
  • ম্যাপযুক্ত ফোল্ডার চেক (অ্যাডমিন ম্যাপড ড্রাইভ অ্যাক্সেস করতে না পারলে আপনাকে সতর্ক করুন)

  • বাহ্যিক গ্রন্থাগার হিসাবে ব্যবহার করা যেতে পারে (এই বিষয়টিতে আমার পোস্টটি দেখুন: https://stackoverflow.com/a/30417025/4932683 )

  • আপনার কোডের যে কোনও জায়গায় প্রয়োজন হলে / কল করা যেতে পারে

এটি কেবল আপনার ব্যাচের ফাইলের শেষের সাথে সংযুক্ত করুন, বা এটি একটি লাইব্রেরি হিসাবে সংরক্ষণ করুন (উপরে দেখুন)

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:RequestAdminElevation FilePath %* || goto:eof
:: 
:: By:   Cyberponk,     v1.5 - 10/06/2016 - Changed the admin rights test method from cacls to fltmc
::          v1.4 - 17/05/2016 - Added instructions for arguments with ! char
::          v1.3 - 01/08/2015 - Fixed not returning to original folder after elevation successful
::          v1.2 - 30/07/2015 - Added error message when running from mapped drive
::          v1.1 - 01/06/2015
:: 
:: Func: opens an admin elevation prompt. If elevated, runs everything after the function call, with elevated rights.
:: Returns: -1 if elevation was requested
::           0 if elevation was successful
::           1 if an error occured
:: 
:: USAGE:
:: If function is copied to a batch file:
::     call :RequestAdminElevation "%~dpf0" %* || goto:eof
::
:: If called as an external library (from a separate batch file):
::     set "_DeleteOnExit=0" on Options
::     (call :RequestAdminElevation "%~dpf0" %* || goto:eof) && CD /D %CD%
::
:: If called from inside another CALL, you must set "_ThisFile=%~dpf0" at the beginning of the file
::     call :RequestAdminElevation "%_ThisFile%" %* || goto:eof
::
:: If you need to use the ! char in the arguments, the calling must be done like this, and afterwards you must use %args% to get the correct arguments:
::      set "args=%* "
::      call :RequestAdminElevation .....   use one of the above but replace the %* with %args:!={a)%
::      set "args=%args:{a)=!%" 
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
setlocal ENABLEDELAYEDEXPANSION & set "_FilePath=%~1"
  if NOT EXIST "!_FilePath!" (echo/Read RequestAdminElevation usage information)
  :: UAC.ShellExecute only works with 8.3 filename, so use %~s1
  set "_FN=_%~ns1" & echo/%TEMP%| findstr /C:"(" >nul && (echo/ERROR: %%TEMP%% path can not contain parenthesis &pause &endlocal &fc;: 2>nul & goto:eof)
  :: Remove parenthesis from the temp filename
  set _FN=%_FN:(=%
  set _vbspath="%temp:~%\%_FN:)=%.vbs" & set "_batpath=%temp:~%\%_FN:)=%.bat"

  :: Test if we gave admin rights
  fltmc >nul 2>&1 || goto :_getElevation

  :: Elevation successful
  (if exist %_vbspath% ( del %_vbspath% )) & (if exist %_batpath% ( del %_batpath% )) 
  :: Set ERRORLEVEL 0, set original folder and exit
  endlocal & CD /D "%~dp1" & ver >nul & goto:eof

  :_getElevation
  echo/Requesting elevation...
  :: Try to create %_vbspath% file. If failed, exit with ERRORLEVEL 1
  echo/Set UAC = CreateObject^("Shell.Application"^) > %_vbspath% || (echo/&echo/Unable to create %_vbspath% & endlocal &md; 2>nul &goto:eof) 
  echo/UAC.ShellExecute "%_batpath%", "", "", "runas", 1 >> %_vbspath% & echo/wscript.Quit(1)>> %_vbspath%
  :: Try to create %_batpath% file. If failed, exit with ERRORLEVEL 1
  echo/@%* > "%_batpath%" || (echo/&echo/Unable to create %_batpath% & endlocal &md; 2>nul &goto:eof)
  echo/@if %%errorlevel%%==9009 (echo/^&echo/Admin user could not read the batch file. If running from a mapped drive or UNC path, check if Admin user can read it.)^&echo/^& @if %%errorlevel%% NEQ 0 pause >> "%_batpath%"

  :: Run %_vbspath%, that calls %_batpath%, that calls the original file
  %_vbspath% && (echo/&echo/Failed to run VBscript %_vbspath% &endlocal &md; 2>nul & goto:eof)

  :: Vbscript has been run, exit with ERRORLEVEL -1
  echo/&echo/Elevation was requested on a new CMD window &endlocal &fc;: 2>nul & goto:eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

এটি কীভাবে ব্যবহার করতে হয় তার উদাহরণ

:EXAMPLE
@echo off

 :: Run this script with elevation
 call :RequestAdminElevation "%~dpfs0" %* || goto:eof

  echo/I now have Admin rights!
  echo/
  echo/Arguments using %%args%%:    %args%
  echo/Arguments using %%*: %*
  echo/%%1= %~1
  echo/%%2= %~2
  echo/%%3= %~3

  echo/
  echo/Current Directory: %CD%
  echo/
  echo/This file: %0
  echo/

pause &goto:eof

[here you paste the RequestAdminElevation function code]

দুর্দান্ত কাজ করে তবে এটি কাজ করার জন্য আমাকে একটি লাইন পরিবর্তন করতে হয়েছিল। &fc;: 2>nulমধ্যে set "_FN=_%~ns1" & echo/%TEMP%| findstr /C:"(" >nul && (echo/ERROR: %%TEMP%% path can not contain parenthesis &pause &endlocal &fc;: 2>nul & goto:eof)1. errorlevel অস্ত যাবার সময় আমি যে বিট মুছে ফেলেছি এবং এটা নিখুঁত কাজ করেন। আমি উইন্ডোজ 10 হোম ব্যবহার করছি।
কিন্যারি

আপনার% টেম্পোর% ফোল্ডারে কি পথের প্রথম বন্ধন রয়েছে? শুধুমাত্র এই ক্ষেত্রে ত্রুটিযুক্ত 1 সেট করার কথা to
সাইবারপঙ্ক

নাঃ। এটি fc;:যেহেতু এটির দরকার আছে : ঠিক পরে? আমি নিশ্চিত না যে সামান্য কিছুটা কেন সমস্যাটি তৈরি করেছিল, কারণ এটি কার্যকর করা উচিত।
কন্যারী

"fc ;: 2> nul" সেখানে ত্রুটির সিগন্যাল করার জন্য প্রস্থান করার আগে ইচ্ছাকৃতভাবে ERRORLEVEL 1 সেট করা আছে। আপনি কি দয়া করে @ কেচো অফ সরিয়ে দৌড়াতে পারেন এবং আমাকে একটি ব্যক্তিগত বার্তায় আউটপুট প্রেরণ করতে পারেন? ধন্যবাদ!
সাইবারপঙ্ক

যাইহোক, echo/%TEMP%| findstr /C:"(" >nulযদি (আপনার %temp%পরিবেশের পরিবর্তনশীলতে কোনও গৃহস্থালি থাকে তবে পরীক্ষাগুলি &&যদি ইতিবাচক হয় তবে কেবল সেই অংশটি চালানো উচিত । আপনার (পরীক্ষাটি কেন ইতিবাচক ফেরা হচ্ছে এটি আশ্চর্যজনক ।
সাইবারপঙ্ক

7

আরেকটি পন্থা হয়

  • স্থানীয়ভাবে একটি শর্টকাট তৈরি করুন এবং এডমিনের অনুমতিের জন্য কল করতে সেট করুন [সম্পত্তি, অ্যাডভান্সড, অ্যাডমিন হিসাবে চালান]

এবং তারপর

  • আপনার ব্যবহারকারীদের শর্টকাট প্রেরণ করুন [বা ব্যাচের ফাইলের মধ্যে একটির চেয়ে শর্টকাটের একটি লিঙ্ক]।

ডেনিস

[পরে যুক্ত করা হয়েছে - হ্যাঁ, আমি এই থ্রেডের তারিখটি খেয়াল করতে ব্যর্থ হয়েছি]]


6

বেন গ্রিপকার সমাধানটি অসীম লুপের কারণ হয়। তাঁর ব্যাচটি এইভাবে কাজ করে (সিউডো কোড):

IF "no admin privileges?"
    "write a VBS that calls this batch with admin privileges"
ELSE
    "execute actual commands that require admin privileges"

যেমন আপনি দেখতে পাচ্ছেন, ভিবিএস প্রশাসকের সুযোগ-সুবিধার অনুরোধে ব্যর্থ হলে এটি একটি অসীম লুপ তৈরি করে।

তবে, অসীম লুপটি ঘটতে পারে, যদিও অ্যাডমিন প্রিভিলিজেস সফলভাবে অনুরোধ করা হয়েছে।

বেন গ্রিপকার ব্যাচ ফাইলে চেকটি কেবল ত্রুটি-প্রবণ। আমি ব্যাচের সাথে চারপাশে খেলেছি এবং পর্যবেক্ষণ করেছি যে চেক ব্যর্থ হওয়া সত্ত্বেও অ্যাডমিন সুবিধাগুলি উপলব্ধ। মজার বিষয় হচ্ছে, চেকটি প্রত্যাশা মতো কাজ করেছে, যদি আমি উইন্ডোজ এক্সপ্লোরার থেকে ব্যাচ ফাইলটি শুরু করি তবে এটি আমার আইডিই থেকে শুরু করার পরে তা হয়নি।

সুতরাং আমি দুটি পৃথক ব্যাচ ফাইল ব্যবহার করার পরামর্শ দিই। প্রথমটি ভিবিএস উত্পন্ন করে যা দ্বিতীয় ব্যাচের ফাইলকে কল করে:

@echo off

echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
set params = %*:"=""
echo UAC.ShellExecute "cmd.exe", "/c ""%~dp0\my_commands.bat"" %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"

"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"

দ্বিতীয়টি, "my_commands.bat" নামে পরিচিত এবং একই ডিরেক্টরিতে অবস্থিত প্রথমটিতে আপনার আসল কমান্ড রয়েছে:

pushd "%CD%"
CD /D "%~dp0"
REM Your commands which require admin privileges here

এটি কোনও অসীম লুপগুলির কারণ না করে ত্রুটি-প্রবণ অ্যাডমিন সুবিধাগুলি পরীক্ষাও সরিয়ে দেয়।


আপনার জন্য কাজ? দুঃখের সাথে আমার জন্য, এটি এবং অন্য থ্রেড থেকে এখানে এবং অন্য সমস্ত একই বিচ্ছিন্ন সমস্যার কারণে ব্যর্থ। "রানাস" পারম (বা কমান্ড) ব্যর্থ হয় যখনই শেল অবজেক্ট অপ্রত্যক্ষভাবে অন্য কোনও প্রোগ্রামের ভিতর থেকে তৈরি হয় । এখানে আগ্রহের থ্রেড ।
লরি স্টার্ন

আমার জন্য কাজ করেছেন :)
শ্রিতাম জগদেব

6

আর একটি পাওয়ারশেলের সমাধান ...

এটি অ্যাডমিন হিসাবে ব্যাচ স্ক্রিপ্ট চালানোর বিষয়ে নয়, বরং কীভাবে ব্যাচ থেকে অন্য প্রোগ্রামকে উন্নত করা যায় ...

আমার কাছে একটি এক্সের জন্য ব্যাচের ফাইল "র‌্যাপার" রয়েছে। তাদের একই "মূল ফাইলের নাম" রয়েছে, তবে বিকল্প এক্সটেনশন রয়েছে। আমি অ্যাডমিন হিসাবে এক্সিকে চালু করতে সক্ষম হয়েছি, এবং স্ক্রিপ্টটি সম্বলিত একটিটিতে ওয়ার্কিং ডিরেক্টরিটি সেট করতে সক্ষম করব, নিম্নলিখিত এক লাইনের পাওয়ারশেল অনুরোধ সহ:

@powershell "Start-Process -FilePath '%~n0.exe' -WorkingDirectory '%~dp0' -Verb RunAs"

অধিক তথ্য

অতিরিক্ত Start-Processবিকল্পগুলিও রয়েছে যা আপনি প্রয়োগ করতে পারেন! চেক আউট করুন: https://docs.microsoft.com/en-us/powershell/module/mic Microsoft.powershell.management/start-process?view=powershell-6

আমি @উপসর্গ ব্যবহার করুন নোট করুন । @echo offএটি এক লাইনের সমতুল্য । আমি %~n0এখানে ব্যাচের স্ক্রিপ্টের "মূল নাম" পেতে এখানে ব্যবহার করি , তারপরে আমি .exeএটি সংলগ্ন বাইনারিটি চিহ্নিত করার জন্য সম্মতি জানাই। %~dp0ব্যাচটি যে ডিরেক্টরিটিকে নির্দেশ করে তার পুরো পথ সরবরাহ করে। এবং, অবশ্যই, পরামিতি টিলা প্রদান করে-Verb RunAs


4

আমি জানি এটি ওপির কোনও সমাধান নয়, তবে যেহেতু আমি নিশ্চিত যে এখানে আরও অনেক ব্যবহারের ঘটনা রয়েছে তাই আমি ভেবেছিলাম আমি ভাগ করে নেব।

এই উত্তরে সমস্ত কোড উদাহরণে আমার সমস্যা হয়েছিল তবে আমি পেয়েছি: http://www.robotronic.de/runasspcEn.html

এটি আপনাকে কেবল অ্যাডমিন হিসাবে চালানোর অনুমতি দেয় না, এটি ফাইলের সাথে এটি পরীক্ষা করে এটি নিশ্চিত করে যে এটি প্রয়োজনীয় কোনও তথ্য যাতে ছড়িয়ে পড়ে না এবং সুরক্ষিতভাবে সংরক্ষণ করে। আমি স্বীকার করব যে এটি কীভাবে ব্যবহার করতে হবে তা নির্ধারণ করার জন্য সবচেয়ে সুস্পষ্ট সরঞ্জাম নয় তবে আমাদের লেখার কোড লেখার পক্ষে এটি যথেষ্ট সহজ হওয়া উচিত।


3

@echo offএবং titleএই কোডের আগে আসতে পারে:

net session>nul 2>&1
if %errorlevel%==0 goto main
echo CreateObject("Shell.Application").ShellExecute "%~f0", "", "", "runas">"%temp%/elevate.vbs"
"%temp%/elevate.vbs"
del "%temp%/elevate.vbs"
exit

:main
    <code goes here>
exit

নিম্নলিখিত উত্তরগুলি নিয়ে আপনার যদি চিন্তা করার দরকার না হয় তবে অন্যান্য অনেকগুলি উত্তর ওভারকিল হয়:

  • পরামিতি
  • ওয়ার্কিং ডিরেক্টরি ( cd %~dp0ব্যাচ ফাইল ধারণকারী ডিরেক্টরিতে পরিবর্তন হবে)

3
@echo off 
Net session >nul 2>&1 || (PowerShell start -verb runas '%~0' &exit /b)
Echo Administrative privileges have been got. & pause

উপরেরগুলি আমার উইন্ডোজ 10 সংস্করণ 1903 এ কাজ করে


1

যেহেতু আমার এই স্ক্রিপ্টটি নতুন কমান্ড প্রম্পটটি পপ আপ করার সাথে সাথে নিজেকে আবার চালাচ্ছে, অসীম লুপে (উইন 7 প্রো ব্যবহার করে) আমার সমস্যা রয়েছে তাই আমি আপনাকে অন্য পদ্ধতির চেষ্টা করার পরামর্শ দিই: আমি কীভাবে আমার ব্যাচের ফাইলটি স্বয়ংক্রিয়ভাবে উন্নত করতে পারি, যাতে এটি থেকে অনুরোধ করা হয় ইউএসি প্রশাসকের অধিকার প্রয়োজন হলে?

সতর্কতা অবলম্বন করুন, আপনাকে এডিট হিসাবে বলা হয়েছে, স্ক্রিপ্টের শেষে এটি যুক্ত করতে হবে, যাতে সুযোগগুলি উন্নত হওয়ার পরে আপনি স্ক্রিপ্ট ডিরেক্টরিতে ফিরে যেতে পারেন: সিডি / ডি% ~ dp0


এই প্রশ্নের আমার উত্তর পরীক্ষা করুন। এটি এই সমস্ত সমস্যা পরিচালনা করে।
সাইবারপঙ্ক

1

টোস্টার-সিএক্স এবং এই পৃষ্ঠায় অন্যান্য আকর্ষণীয় পোস্টের ভিত্তিতে, আমি কীভাবে আমার সমস্যাটি কনফিগার করব এবং কীভাবে সমাধান করব সে সম্পর্কে আমি অন্তর্দৃষ্টি পেয়েছি। আমার অনুরূপ সমস্যা ছিল যেখানে আমি ইচ্ছে করেছিলাম যে ডিস্ক ক্লিনআপ ইউটিলিটি প্রতি সপ্তাহে দুপুরের মধ্যাহ্নে (বৃহস্পতিবার দুপুর ২ টার সময়) প্রতি সোমবার এবং বৃহস্পতিবার দুবার চালিত হয়। তবে এটির জন্য উন্নত অধিকারের প্রয়োজন।

ব্যাচের ফাইলটি ভাগ করা যা আমার মতো অন্যান্য সূচনাপ্রাপ্তদের সহায়তা করতে পারে -

@echo off
echo  Welcome to scheduling 'PC Maintenance Activity'
ping localhost -n 3 >nul
echo -- Step - 1 of 3 : Please give 'Admin' rights on next screen
ping localhost -n 5 >nul
if not "%1"=="am_admin" (powershell start -verb runas '%0' am_admin & exit)
cls
echo -- Step - 2 of 3 : In next screen, select temp areas for cleaning 
during routine scheduled activity
ping localhost -n 3 >nul
C:\Windows\System32\cleanmgr.exe /sageset:112
cls
echo    Now scheduling maintenance activity...
SchTasks /Create /SC WEEKLY /D MON,THU /TN PC_Cleanup /TR 
"C:\Windows\System32\cleanmgr.exe "/sagerun:112 /ST 14:00

cls

echo                         -- Thanks for your co-operation --
echo                    -- Maintenance activity is scheduled for --
echo                       -- Every Monday and Thursday at 2 pm --

ping localhost -n 10 >nul

ধন্যবাদ এই ফোরামে এবং রেম এখানে পোস্ট করে নেওয়ার জন্য অনেক [ https://www.petri.com/forums/forum/windows-scripting/general-scripting/32313-schtasks-exe-need-to-pass-parameters-to-script ] [1]

কার্যের সময় নির্ধারণের সময় তার পোস্টটি argumentচ্ছিক যুক্তিটি কনফিগার করতে সহায়তা করেছিল।


1

এই পোস্ট থেকে এফএসটিআইএল কোয়েরিও রয়েছে যা নীচের কোড সহ ss64.comলিঙ্কযুক্ত রয়েছে:

@Echo Off
Setlocal
:: First check if we are running As Admin/Elevated
FSUTIL dirty query %SystemDrive% >nul
if %errorlevel% EQU 0 goto START

::Create and run a temporary VBScript to elevate this batch file
   Set _batchFile=%~f0
   Set _Args=%*
   :: double up any quotes
   Set _batchFile=""%_batchFile:"=%""
   Set _Args=%_Args:"=""%

   Echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\~ElevateMe.vbs"
   Echo UAC.ShellExecute "cmd", "/c ""%_batchFile% %_Args%""", "", "runas", 1 >> "%temp%\~ElevateMe.vbs"

   cscript "%temp%\~ElevateMe.vbs" 
   Exit /B

:START
:: set the current directory to the batch file location
cd /d %~dp0
:: Place the code which requires Admin/elevation below
Echo We are now running as admin [%1] [%2]
pause

যতক্ষণ না এফএসটিআইএল রয়েছে, এটি একটি নির্ভরযোগ্য বিকল্প।


0

আপনি একটি ব্যাচ ফাইল থেকে প্রশাসকের অধিকারের জন্য অনুরোধ করতে পারবেন না, তবে আপনি% টেম্প% তে একটি উইন্ডোজ স্ক্রিপ্টিং হোস্ট স্ক্রিপ্ট লিখতে পারেন এবং চালাতে পারেন (এবং এটি আপনার ব্যাচকে অ্যাডমিন হিসাবে কার্যকর করে) আপনি শেলটিতে শেলএক্সিকিউট পদ্ধতিটি কল করতে চান। ক্রিয়া হিসাবে "রানাস" সহ অ্যাপ্লিকেশন অবজেক্ট


0

mshtaপ্রশাসক অধিকারের জন্য অনুরোধ জানাতে ব্যবহার করুন :

@echo off
net session >nul 2>&1 && goto :admintasks
MSHTA "javascript: var shell = new ActiveXObject('shell.application'); shell.ShellExecute('%~nx0', '', '', 'runas', 1);close();"
exit /b
:admintasks
rem ADMIN TASKS HERE

বা, পাওয়ারশেল ব্যবহার করে:

powershell -c Start-Process "%~nx0" -Verb runas

-5

কমান্ড ব্যবহার করুন। তবে, আমি মনে করি না আপনি খুব সহজেই একটি .bat ফাইল ইমেল করতে পারেন।


6
এই উত্তরটি ভুল। runasকমান্ড টিলা ঘটান ব্যবহার করা যাবে না।
বিল_সেটওয়ার্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.