چگونه فایل .bat را به صورت خودکار با Run as Administrator اجرا کنیم
سیستم عاملهای جدید ویندوز از مکانیزمی به نام MIC جهت محدود کردن دسترسی به بخشهای حساس ویندوز استفاده میکند و کاربران بطور معمول اعتبار Medium Integrity را دارا میباشند
در اجرا برنامهها و یا اسکریپتها که نیاز به دستری یا تغییر فایلهای سیستمی و یا دسترسی به ریجستری ویندوزی نیازمند است در حالت Administrator به اجرا درآورید، آن وقت به صورت یک جا تمام دسترسیهای سطح بالا در اختیار آن برنامه یا فایل قرار میگیرد. تنها در صورت اعطای این مجوز است که برنامهها و فایلها میتوانند به فایلهای سیستمی ویندوز دسترسی پیدا کنند. بنابراین برای اجرای صحیح و کامل بعضی برنامهها، ارائه مجوز Run as Administrator الزامیست.
راههای ساده ای مانند کلیک راست و Run as Administrator و گزفتن Shift + Ctrl و اجرا برنامه و روش Compatibility Properties برای اجرا موجود است
در این مطلب در ادامه آموزش اسکریپت نویسی فایل .bat میخواهیم نیاز نباشد کاربر از روشهای بالا Run as Administrator انجام بدهد و با اجرا فایل بصورت خودکار در سطح دسترسی Administrator اجرا شود.
مطالعه مطالب و آموزشهای قبلی مفید میباشد:
درباره Batch File و دستورات CMD و .BAT
کد اول
برای اینکار به سادگی میتوانید متن زیر را به ابتدای فایل اسکریپت اضافه کنید و بعد از :start کد اسکریپت خود را قرار دهید
@echo off
setlocal EnableDelayedExpansion & cd /d "%~dp0"
%1 %2
mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :start","","runas",0)(window.close)&exit
:start
این دستور با استفاده از vbscript فایل باز شده را با دسترسی Administrator دورباره اجرا میکند و جهت ادامه کار goto به :start میژند و ادامه اسکریت را اجرا میکند و پنجره اجرای عادی فایل را میبندد.
کد دوم
برای استفاده از این روش متن زیر را در .bat کپی کنید و کد اکریپت مورد نظر را در محل <YOUR BATCH SCRIPT HERE> جاگذاری کنید
@echo off
call :isAdmin
if %errorlevel% == 0 (
goto :run
) else (
echo Requesting administrative privileges...
goto :UACPrompt
)
exit /b
:isAdmin
fsutil dirty query %systemdrive% >nul
exit /b
:run
<YOUR BATCH SCRIPT HERE>
exit /b
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "cmd.exe", "/c %~s0 %~1", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
exit /B`
این اسکریپت با دستور call زیرمجموعه دستور ایجاد میکند و در قسمت:isAdmin توسط دستور fsutil dirty query %systemdrive% (این دستور نام درایو ویندوز را میپرسد از انجا که این کار به دسترسی ادمین نیاز دارد در اینجا استفاده شده است) و چک کردن %errorlevel% بررسی دسترسی ادمین را انجام میدهد اگر دسترسی ادمین باشد اسکریپت شما اجرا میشود در غیر این صورت یک فایل getadmin.vbs در پوشه temp ویندوز با دستور اجرای cmd.exe در حالت Run as Administrator و مسیر دادن خود اسکریت فایل دسترسی را مجدد بررسی میکند. در انتها هم فایل getadmin.vbs را حذف میکند
سلام مهندس جان
با تشکر فراوان از آموزش های عالیتون
من میخوام اسکریپتی درست کنم که یوزر و پسورد آدمین رو بهش بدم که وقتی اجراش کنم با دسترسی یوزر ادمین اجرا بشه و یک سری دستورات رو انجام بده؟
ممنون میشم راهنمایی بفرمایید
با تشکر
سلام
شما میتوانید از دستور Runas استفاده کنید
برای مثال
Runas /noprofile /user:ComputerName\USER "notepad.exe"
سینتکس دستور اینگونه است
runas /noprofile /user:ComputerName\USER /savecred "Path"
::RUNAS [ [/noprofile | /profile] [/env] [/savecred | /netonly] ]
::/noprofile Do not load the user's profile
::/profile Load the user's profile. (default)
::/env Use the current environment instead of user's.
::/netonly Use the credentials for remote access only.
::/savecred Use credentials previously saved by the user.
::/smartcard Load the credentials from a smartcard.
::/user UserName in the form USER@DOMAIN or DOMAIN\USER
::/trustlevel Level One of levels enumerated in /showtrustlevels.
::program The program to run.
سویچ /savecred باعث ذخیره شدن کلمه عبور برای استفاده هیا بعدی میشود
موفق باشین
با تشکر مهندس جان
سوال من اینه که من میخوام این فایل رو بدم به یوزرهایی با دسترسی محدود و میخوام که پسورد رو توی این فایل اسکریپت قرار بدم و تبدیل به exe کنم که بتونم یه کارها رو انجام بده برام بدون اینکه از یوزر پسورد بپرسه.
ممنونم
دوست عزیز من با همین دستوری که گفتم انجام میدم
ببنین قرار دادن رمز کاربر در داخل فایل باعث لو رفتنش میشه برای همین سویچ /savecred باعث میشه که بصورت امن این کلمه عبور در ویندوز ذخیره بشه
برای مثال من یک یوزر به نام amir دارم رمز اون هم ۱۲۳۴ هست نام سیستم هم fbshdf-PC است و میخوام برنامه رو با دسترسی این کاربر اجرا کنم
یک فایل Bat با متن زیر ایجاد میکنم
Runas /user:fbshdf-PC\amir /savecred "C:\Program Files\TimexAW\AmirWebTimex.exe"
وقتی برای بار اول اجرا میکنم از من کلمه عبور پرسیده میشه
اگر کلمه عبور درست باشه در دفعات بعد برنامه بصورت خودکار با همون دسترسی اجرا میشه
در صورتی که سویچ /savecred رو ننویسین در هر برار اجرا کلمه عبور خواسته میشه
امید وارم درست متوجه شده باشم و ای راه حل مفید باشه
من از این روش در داخل شبکه و دامین و هم در تک سیستم استفاده کرده
سلام وقت بخیر.یک سوال داشتم.میخواستم ببینم چجوری میتونم از چند دستور متفاوتی که درون بچ فایلم نوشتم بعد از اجرا یک فایل ریپورت درون هاردم ذخیره بشه.برای مثال من یک بچ فایل درست کردم که درونش اول کد چک کردن اطلاعات کامپیوتر نوشتم بعد چک کردن مشخصات کارت گرافیک و بعد رم و بعد هارد،میخواهم از همه اینها یک ریپورت یک جا درون هارد بهم بده،ممنون میشم راهنمایی کنید
سلام
برای مثال می توانید از دستور
ping 8.8.8.8 >>output.txt
استفاده کنید
برای حالت پیشرفته اینچنین
@echo off
>output.txt (
echo Checking your system infor, Please wating...
systeminfo | findstr /c:"Host Name"
systeminfo | findstr /c:"Domain"
ipconfig /all | find "Physical Address"
ipconfig | find "IPv4"
ipconfig | find "Default Gateway"
)
@pause
ممنونم از وقتی که گذاشتید.اما امکانش هست واضح تر توضیح بدید.من انجام میدم ارور میده.دستور bat فایلم هم اسن است
@echo off
title TEST DOS
systeminfo
wmic path win32_videocontroller get name
wmic memorychip
wmic diskdrive get size,model,index,status
pause
به این صورت باید باشه
@echo off
title TEST DOS
>output.txt (
systeminfo
wmic path win32_videocontroller get name
wmic memorychip
wmic diskdrive get size,model,index,status
)
@pause
ممنون،تست کردم اما باز هم نشد.دستورات بالا مینویسم اصلا اجرا نمیشه bat فایلم
الان مشکل اجرا شدنش حل شد اما همه را ذخیره میکنه جز اطلاعات هارد
تست کردم همه اطلاعات ذخیره میکنه به جز اصلاعات هارد که میشه دستور اخر.دلیلش به نظرتون چیه؟
برای من مشکلی نداره و کلیه دستورات رو میاره
شما یکبار به این صورت تست کن که در فایلهای جداگانه بده
@echo off
title TEST DOS
systeminfo >systeminfo.txt
wmic diskdrive get size,model,index,status >diskdrive.txt
wmic path win32_videocontroller get name >videocontroller.txt
wmic memorychip >memorychip.txt
@pause
سلام من یک دامین دارم که 600 تا کلاینت داره و برای اکتیو کردن ویندوز و آفیس این کلاینت ها به مشکل بر خوردم.سرور kms server رو راه اندازی کردم و الان مشکلی که دارم نمیتونم برم پشت تک تک سیستم ها kms server رو ست کنم.میخوام یک batch فایل داشته باشم که در اون دستورات ست کردن ادرس kms server و اکتیو کردن ویندوز در اون قرار بگیره به صورتی که وقتی فایل اجرا شد به صورت اتومات با دسترسی ادمین دامین که دسترسی اجرای فایل های bat رو داره اجرا بشه و اتومات ویندوز و آفیس رو اکتیو کنه.آیا راه حلی برای این مشکل وجود داره؟
راه حل سریعتر و بهتر دیگه ای نیست که بهم معرفی کنید؟
سلام
این مطلب رو دیدین؟
فعالسازی ویندوز و آفیس با فایل .bat
سلام
من d; فایل vbs برای باز کردن و بستن پورت سوییچ T از طریق telnet با cmd ایجاد کردم .
میخوام اتوماتیک در ساعتهای خاص یک پورت سوییچ فعال و غیر فعال بشه.در task scheduler که میزنم فقط پنجره ی cmd باز میشه و دستورات اجرا نمیشوند .
خیلی عالی بود.تشکر