نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی پرتال اطلاعاتی
  • خانه
  • ویندوز 8
  • اجازه اجرای اسکریپت ها اسکریپت های PowerShell را طبق یک برنامه اجرا کنید

اجازه اجرای اسکریپت ها اسکریپت های PowerShell را طبق یک برنامه اجرا کنید

1. نوشتن فیلمنامه

یک اسکریپت PowerShell (بدون توجه به نسخه) یک فایل متنی با پسوند * .ps1 است.

در اینجا نمونه ای از یک اسکریپت ساده Power Shell (فایل systemInfo.ps1) آمده است:

# شیء WMI را برای سیستم عامل بازیابی کنید

Get-WmiObject Win32_OperatingSystem

این فایل را می توان به عنوان مثال در FAR Manager ایجاد و ویرایش کرد.

توجه داشته باشیدکه FAR Manager، اگرچه می تواند در کنسول Power Shell کار کند، اسکریپت ها را از زیر خود در محیط کنسول معمولی ویندوز اجرا می کند. cmd ... یعنی از FAR Manager فقط می توان برای ایجاد و ویرایش اسکریپت های PowerShell استفاده کرد، اما برای اجرای آنها نه. اما قبل از اینکه دلسرد شوید، نکته 3 را بخوانید.

2. راه اندازی اسکریپت

اسکریپت باید از کنسول Power Shell اجرا شود نه از کنسول معمولی ویندوز. در کنسول Power Shell، باید به دایرکتوری که اسکریپت در آن قرار دارد بروید (با دستوراتسی دی ) و سپس خود اسکریپت را اجرا کنید، حتما پیشوند آن را با نمادها وارد کنید".\" ... به عنوان مثال، ما مسیر فایل اسکریپت را داریم d: \ work \ systemInfo.ps1 ... سپس دستورات راه اندازی به صورت زیر خواهد بود:

سی دی \

سی دی کار

\ systemInfo.ps1

یا بیشتر (فقط مسیر کامل اسکریپت نشان داده شده است):

d: \ work \ systemInfo.ps1

به احتمال زیاد هنگام اجرای اسکریپت خطای زیر ظاهر می شود:

فایل D: \ work \ systemInfo.ps1 بارگیری نمی شود زیرا اسکریپت ها در این سیستم مجاز نیستند. برای اطلاعات بیشتر «get-help about_signing» را وارد کنید.

خط: 1 کاراکتر: 18

CategoryInfo: NotSpecified: (:)، PSSecurityException

FullyQualifiedErrorId: RuntimeException

خطا به این دلیل ظاهر می شود که به طور پیش فرض Power Shell دارای حداکثر سیاست امنیتی فعال است، که به شما امکان می دهد دستورات PowerShell را در خط فرمان اجرا کنید، اما به شما اجازه نمی دهد یک اسکریپت را با دستورات PowerShell در همان خط فرمان اجرا کنید.

برای فعال کردن اجرای اسکریپت های PowerShell، باید یک فایل * bat ایجاد کنید، به عنوان مثال enableScript.bat با محتوای زیر:

powershell -Command Set-ExecutionPolicy RemoteSigned

این فایل * bat را می توان در هر کنسولی اجرا کرد: یا در PowerShell یا به صورت معمولی cmd ... پس از اجرای این فایل، اسکریپت های PowerShell در کنسول PowerShell اجرا می شوند.

3. اجرای یک اسکریپت PowerShell از یک کنسول cmd معمولی ویندوز

اسکریپت PowerShell را می توان از کنسول معمولی ویندوز نیز اجرا کرد. برای این کار می توانید از دستور زیر استفاده کنید:

Powershell -File ./systemInfo.ps1

بنابراین، اسکریپت ها را می توان به طور مستقیم از مدیر FAR اجرا کرد، و آنها کار خواهند کرد.

اما در اینجا کمی ظرافت وجود دارد. پارامتر-فایل فقط در مسیرهای محلی کار می کند، حتی اگر مسیر نسبی باشد"./". یعنی اگر * .ps1 - فایل روی دیسک محلی استطناب: سپس چنین تماسی کار خواهد کرد. اما اگر بخواهید اسکریپتی را که در یک منبع دامنه قرار دارد اجرا کنید، اسکریپت پیدا نخواهد شد. شاید در نسخه های بعدی PowerShell این مشکل برطرف شود.

به طور پیش فرض، اسکریپت نویسی است Windows PowerShellدر سیستم ممنوع است به دلایل امنیتی، تمام اسکریپت های PowerShell باید به صورت دیجیتال امضا شوند، این روش نامیده می شود - سیاست اجرا... اگر اسکریپت این شرایط را نداشته باشد، اسکریپت های PowerShell مجاز به اجرا در سیستم نیستند. این در درجه اول به این دلیل است که اسکریپت ممکن است حاوی کد مخربی باشد که می تواند به سیستم عامل آسیب برساند.


PowerShell چندین حالت اجرایی دارد که تعیین می کند چه نوع کدی مجاز است اجرا شود. 5 حالت مختلف اجرا وجود دارد:

محصور
مقدار پیش فرض. اجرای هر اسکریپت مسدود شده و دستورات تعاملی مجاز است.
همه امضا شده
اجرای اسکریپت های امضا شده دیجیتال مجاز است.
امضا از راه دور
اسکریپت های محلی بدون امضا کار می کنند. همه اسکریپت های دانلود شده باید امضای دیجیتالی داشته باشند.
بدون محدودیت
اجرای هر اسکریپت مجاز است. هنگامی که یک اسکریپت بدون امضا را اجرا می کنید که از اینترنت دانلود شده است، برنامه ممکن است درخواست تأیید کند.
میان بر
هیچ چیز مسدود نیست، هیچ هشدار یا درخواستی ظاهر نمی شود.

به طور پیش فرض، PowerShell از این حالت استفاده می کند "محدود"... در این حالت، PowerShell به عنوان یک پوسته تعاملی عمل می کند. اگر قبلاً PowerShell را پیکربندی نکرده‌اید، به جای اجرای اسکریپت، مانند تصویر زیر، یک پیغام خطایی خواهید دید که با رنگ قرمز نوشته شده است.

امن ترین راه برای حل این مشکل این است که سیاست اجرا را به نامحدود تغییر دهید، اسکریپت را اجرا کنید و سپس به خط مشی محدود برگردید.

برای تغییر سیاست اجرا به نامحدود، از کنسول PowerShell با حقوق Administrator استفاده کنید و دستور زیر را اجرا کنید:

Y (آره)

حالا می توانید اسکریپت را اجرا کنید. با این حال، شما سیستم را در معرض خطر جدی قرار می دهید، بنابراین وقتی اسکریپت تمام شد، مطمئن شوید که سیاست اجرا را به حالت محدود بازگردانید. این را می توان با استفاده از دستور زیر انجام داد:

پس از اجرای دستور، از شما خواسته می شود که تغییر سیاست اجرا را تأیید کنید. پاسخ خواهیم داد Y (آره)

اجرای هر اسکریپت مسدود شده است. مقدار پیش فرض.

Set-ExecutionPolicy محدود شده است

اجرای اسکریپت های امضا شده دیجیتال مجاز است.

اسکریپت های آماده شده بر روی رایانه محلی را می توان بدون محدودیت اجرا کرد، اسکریپت های دانلود شده از اینترنت - فقط در صورت داشتن امضای دیجیتال.

Set-ExecutionPolicy RemoteSigned

اجرای هر اسکریپت مجاز است. هنگامی که یک اسکریپت بدون امضا را اجرا می کنید که از اینترنت دانلود شده است، برنامه ممکن است درخواست تأیید کند.

Set-ExecutionPolicy نامحدود

هیچ چیز مسدود نیست، هیچ هشدار یا درخواستی ظاهر نمی شود.

برای اجرای دستورات فوق بدون تایید تغییر، از پارامتر استفاده کنید
-اجبار، برای مثال دستور را اجرا کنید:

Set-ExecutionPolicy Bypass -Force

حال در هنگام اجرای دستورات نیازی به تایید تغییرات انجام شده نیست.

چندین روش مختلف برای اجرای اسکریپت وجود دارد که در زیر به موارد اصلی اشاره شده است:

  1. PowerShell را راه اندازی کنیدو اسکریپت را در آن اجرا کنید (مسیر فایل و نام فایل را مثلاً به این صورت وارد کنید: C: \ Scripts \ test.ps1 یا با دستور cd C: \ Scripts به پوشه اسکریپت بروید و آن را اجرا کنید. با دستور \ test.ps1) پوسته را می توان به روش های مختلفی پیدا کرد و پرتاب کرد. یک راه از طریق منوی شروع است. برای ویندوز 7 - باید به "همه برنامه ها" - "لوازم جانبی" - "Windows PowerShell" بروید و پوسته "Windows PowerShell" را راه اندازی کنید. برای ویندوز 10 - باید گروه را با حرف "W" پیدا کنید و در آن "Windows PowerShell" را پیدا کنید.
  2. "Windows PowerShell ISE" را اجرا کنیدیک برنامه - یک محیط توسعه است که به شما امکان ویرایش و اشکال زدایی اسکریپت های PowerShell را می دهد که به طور پیش فرض همراه با خود PowerShell نیز وجود دارد. پس از راه اندازی کافیست روی دکمه "Open" کلیک کنید یا به منوی File - Open بروید و اسکریپت مورد نظر خود را انتخاب کنید، سپس دکمه F5 یا "Run script" را فشار دهید. می توانید Windows PowerShell ISE را در همان مکان پیدا کنید. به عنوان PowerShell - در منوی "شروع" ...
  3. خط فرمان استاندارد را اجرا کنیدو در آن بنویسید:
    powershell -file<имя_скрипта> (مثال: powershell -file myscript.ps1)

اگر قبلاً اسکریپت های PowerShell را اجرا نکرده اید، به احتمال زیاد پیامی دریافت خواهید کرد: امکان آپلود فایل وجود ندارد<имя_скрипта>، از آنجایی که اجرای اسکریپت برای این سیستم ممنوع است. برای اطلاعات بیشتر «get-help about_signing» را وارد کنید. این به دلیل این واقعیت است که به دلایل امنیتی و برای جلوگیری از اجرای تصادفی کدهای مخرب، همه اسکریپت ها باید به صورت دیجیتال امضا شوند.

چگونه به اسکریپت PowerShell بدون امضا اجازه اجرا بدهم؟

1. در PowerShell، قبل از اجرای اسکریپت، دستوری را برای فعال کردن اجرای اسکریپت های بدون امضا برای جلسه پوسته فعلی اجرا کنید:

Set-ExecutionPolicy RemoteSigned -Scope Process

2. هنگام راه اندازی از خط فرمان استاندارداز پارامتر -executionpolicy استفاده کنید. اسکریپت را به این صورت اجرا کنید:

<имя_скрипта>

هر دو روش سیاست را فقط برای جلسه فعلی تنظیم می کنند، در حالی که خط مشی امنیتی برای اجرای اسکریپت های PowerShell نوشته شده در رجیستری تغییر نمی کند و ثابت می ماند. اگر می خواهید سیاست امنیتی اجرای اسکریپت را به صورت دائمی تغییر دهید، از این روش استفاده کنید:

3. اجازه دهید برای همیشه اجرا شود: PowerShell را به عنوان Administrator اجرا کنید، سپس دستور را اجرا کنید:

Set-ExecutionPolicy RemoteSigned

توجه داشته باشید:اگر اسکریپت از اینترنت بارگیری شده است، برای جلوگیری از درخواست تأیید راه اندازی، باید به جای RemoteSigned از Bypass استفاده کنید - هرگونه درخواست و هشدار را به طور کامل غیرفعال کنید.

چگونه یک اسکریپت PowerShell را در پس زمینه اجرا کنم؟

برای انجام این کار، فقط از پارامتر راه اندازی -WindowStyle استفاده کنید که می تواند مقادیر زیر را به خود بگیرد: Normal، Minimized، Maximized و Hidden. بنابراین، برای اجرای یک اسکریپت بدون امضا در پس‌زمینه، باید دستور زیر را اجرا کنید:

powershell -executionpolicy RemoteSigned -WindowStyle Hidden -file<имя_скрипта>

در صورت تمایل می توانید -NonInteractive را نیز اضافه کنید تا اسکریپت هیچ سوالی نپرسد. بنابراین، اسکریپت به صورت نامرئی برای کاربر اجرا می شود. در استفاده از این روش مراقب باشید.

اجرای یک اسکریپت PowerShell با پارامترها

در واقع، راه اندازی باید به گونه ای انجام شود که گویی یک برنامه معمولی یا یک فایل bat را با پارامترها اجرا می کنید. به عنوان مثال، برای اجرای یک اسکریپت با پارامترهای دستور، می توانید دستور زیر را بنویسید:

powershell -executionpolicy RemoteSigned -file<имя_скрипта>param1 param2 "یک پارامتر متن دیگر"

در خود اسکریپت می توانید این پارامترها را به صورت زیر دریافت کنید:

پارامتر ($ var1، $ var2، $ var3) echo $ var1، $ var2، $ var3

در PowerShell ISE، می‌توانید یک اسکریپت با پارامترها را به همین روش با استفاده از پنجره فرمان اجرا کنید.

چگونه یک اسکریپت PowerShell را با استفاده از یک میانبر اجرا کنم؟

دو راه برای انجام این کار وجود دارد:

  1. یک فایل bat/cmd بسازید که در آن دستور اجرای اسکریپت را بنویسید (پارامترهای بالا را دیده اید)
  2. یک میانبر برای PowerShell ایجاد کنید که در پوشه c: \ Windows \ System32 \ WindowsPowerShell \ v یافت می شود.<версия>\ و پارامترهای لازم را در ویژگی های میانبر در قسمت "Object" اضافه کنید.

بنابراین، به عنوان مثال، برای اجرای یک اسکریپت powershell زمانی که کاربر وارد سیستم می شود، می توانید به سادگی یک میانبر همانطور که در نقطه 2 توضیح داده شد ایجاد کنید و آن را در راه اندازی قرار دهید. همچنین، ایجاد یک میانبر به یکی از روش های بالا، اجرای اسکریپت را به عنوان مدیر یا هر کاربر دیگری به عنوان یک برنامه معمولی آسان می کند.

زبان برنامه نویسی PowerShell یک ابزار کاملاً قدرتمند برای حل مشکلات مختلف است، اما می توان از آن نه تنها برای چیزهای خوب، بلکه برای آسیب نیز استفاده کرد، بنابراین از آن عاقلانه استفاده کنید؛)

بیشتر پاسخ‌های موجود، چگونگی را توضیح می‌دهند، اما تعداد بسیار کمی توضیح می‌دهند که چرا. و قبل از شروع به اجرای کد از افراد غریبه در اینترنت، به خصوص کدهایی که اقدامات امنیتی را غیرفعال می کند، باید دقیقاً بفهمید که چه کاری انجام می دهید. بنابراین در اینجا کمی جزئیات بیشتر در مورد این موضوع وجود دارد.

سیاست های اجرای Windows PowerShell به شما امکان می دهد شرایطی را تعریف کنید که تحت آن Windows PowerShell فایل های پیکربندی را بارگیری می کند و اسکریپت ها را اجرا می کند.

مزایایی که در PowerShell Basics - Execution Policy and Code Signing ذکر شده است:

  • کنترل اجرا... مدیریت سطح اعتماد برای اجرای اسکریپت ها
  • فرمان Highjack... جلوگیری از وارد شدن دستورات در مسیر من.
  • شناسایی... آیا اسکریپت توسط توسعه‌دهنده‌ای که من به آن اعتماد دارم ایجاد و امضا شده است و/یا با گواهی یک مرجع صدور گواهینامه مورد اعتماد من امضا شده است.
  • تمامیت... اسکریپت ها توسط بدافزار یا کاربران مخرب قابل تغییر نیستند.

برای بررسی سیاست اجرای فعلی، می توانید Get-ExecutionPolicy را اجرا کنید. اما احتمالاً اینجا هستید زیرا می خواهید آن را تغییر دهید.

برای این کار، cmdlet Set-ExecutionPolicy را اجرا کنید.

هنگام به روز رسانی یک سیاست اجرایی باید دو تصمیم مهم بگیرید.

نوع سیاست اجرا:

  • محصور† - هیچ اسکریپتی روی سیستم نمی تواند فایل محلی، راه دور یا دانلود شده را اجرا کند.
  • همه امضا شده... همه اسکریپت های در حال اجرا نیاز به امضای دیجیتال دارند.
  • RemoteSigned- همه اسکریپت های راه دور (UNC) یا قابل دانلود باید امضا شوند.
  • بدون محدودیت- برای هر نوع اسکریپت نیازی به امضا نیست.

دامنه تغییرات جدید

  • ماشین محلی† - سیاست اجرا بر همه کاربران رایانه تأثیر می گذارد.
  • کاربر فعلی... خط مشی اجرا فقط بر کاربر فعلی تأثیر می گذارد.
  • روند... خط مشی اجرا فقط بر روند فعلی Windows PowerShell تأثیر می گذارد.

† = مقدار پیش فرض

به عنوان مثال: اگر می خواهید سیاست را به RemoteSigned for CurrentUser فقط تغییر دهید، باید دستور زیر را اجرا کنید:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

توجه داشته باشید... برای تغییر سیاست اجرا، باید اجرا کنید PowerShell به عنوان مدیر... اگر در حالت عادی باشید و سعی کنید سیاست اجرا را تغییر دهید، خطای زیر را دریافت خواهید کرد:

دسترسی به کلید رجیستری "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ ShellIds \ Microsoft.PowerShell" ممنوع است. برای تغییر خط مشی اجرا برای محدوده پیش فرض (LocalMachine)، Windows PowerShell را با گزینه Run as administrator راه اندازی کنید.

اگر می‌خواهید محدودیت‌های داخلی را برای اسکریپت‌های خودتان که از اینترنت دانلود نشده‌اند (یا حداقل حاوی فراداده UNC نیستند)، تشدید کنید، می‌توانید خط‌مشی را مجبور کنید اسکریپت‌های امضا شده را اجرا کند. برای امضای اسکریپت های خود، می توانید دستورالعمل های موجود در مقاله Sign PowerShell Scripts نوشته اسکات هانسلمن را دنبال کنید.

توجه داشته باشید... اکثر مردم هنگام باز کردن Powershell می توانند این خطا را دریافت کنند زیرا اولین کاری که PS در هنگام راه اندازی سعی می کند انجام دهد این است که اسکریپت پروفایل کاربری خود را اجرا کند که محیط شما را تنظیم می کند، اما شما آن را دوست دارید.

فایل معمولا در پوشه قرار دارد

% User Profile % \ My Documents \ WindowsPowerShell \ Microsoft.PowerShellISE_profile.ps1

با اجرای متغیر powershell می توانید مکان دقیق را پیدا کنید

نمایه $

اگر نمایه چیزی که شما به آن اهمیت می‌دهید ندارد و نمی‌خواهید نگران تنظیمات امنیتی خود باشید، می‌توانید به سادگی آن را حذف کنید و powershell چیزی را که نتواند انجام دهد پیدا نمی‌کند.

سلام به همه امروز می خواهم به شما بگویم چگونه یک اسکریپت PowerShell را در ویندوز اجرا کنید. موقعیتی را تصور کنید، اسکریپتی نوشتید که نمایش اطلاعات را در اکتیو دایرکتوری بسیار ساده می کند، اسنپ این پاورشل را باز می کنید، مسیر اسکریپت را می نویسید، enter را فشار می دهید و با خطا مواجه می شوید.

امکان آپلود فایل وجود ندارد<путь к вашему файлу>، از آنجایی که اجرای اسکریپت برای این سیستم ممنوع است. برای اطلاعات بیشتر «get-help about_signing» را وارد کنید.

بیایید ببینیم چگونه آن را حل کنیم.

PowerShell تعدادی حالت اجرا دارد که تعیین می کند چه نوع کدی مجاز است اجرا شود. همه اینها توسط یک کلید رجیستری در HKLM کنترل می شود. 4 حالت اجرای مختلف وجود دارد:

محدود(محدود شده): خط مشی اجرای پیش فرض اجازه اسکریپت را نمی دهد و فقط دستورات تعاملی را می دهد.

همه امضا کردند(همه امضا): به همه اسکریپت ها اجازه کار می دهد. درست است، همه اسکریپت ها و فایل های پیکربندی باید توسط ناشر مورد اعتماد شما امضا شوند. این حالت شما را در معرض خطر اسکریپت های امضا شده (اما مخرب) پس از دریافت تاییدیه اعتماد به ناشر قرار می دهد.

حذف شد امضا شد(Remote Signed): اسکریپت های محلی بدون امضا کار می کنند. همه اسکریپت های دانلود شده باید امضای دیجیتالی داشته باشند.

نامحدود(بدون محدودیت): همه اسکریپت ها و فایل های پیکربندی دریافت شده از برنامه های ارتباطی مانند Microsoft Outlook، Internet Explorer، Outlook Express و Windows Messenger پس از تأیید اینکه متوجه شده اید که فایل از اینترنت آمده است، کار می کنند. نیازی به امضای دیجیتال نیست. این حالت شما را در معرض خطر اجرای اسکریپت های بدون امضا و مخرب قرار می دهد.

به طور پیش فرض، PowerShell از حالت محدود استفاده می کند. در این حالت، PowerShell فقط به عنوان یک پوسته تعاملی کار می کند. اجازه اسکریپت‌نویسی را نمی‌دهد و فقط فایل‌های پیکربندی را بارگیری می‌کند که توسط ناشر مورد اعتماد شما امضا شده است.

اجازه اجرای اسکریپت های powershell را بدهید

برای اجرای اسکریپت هایی که ایجاد کرده اید، باید اجرای اسکریپت های غیرقابل اعتماد را با استفاده از دستور فعال کنید. Set-ExecutionPolicy از راه دور طراحی شدو تایید (توجه !!! برای اجرای این دستور باید PowerShell را با حقوق مدیر اجرا کنید). پس از آن، می توانید اجرای اسکریپت را مجدداً راه اندازی کنید.

در مورد سوال، Y را فشار دهید تا اجرای اسکریپت ها فعال شود. پس از این دستکاری ها، می توانید اسکریپت خود را اجرا کنید.

مقالات مرتبط برتر