Запуск скрипта powershell из bat файла

Содержание

Запуск скриптов PowerShell

Запуск скрипта powershell из bat файла

PowerShell — это новая командная оболочка для Windows, которая по задумкам Microsoft должна вытеснить и заменить cmd. По-умолчанию, эта оболочка уже идет в составе Windows 7 и выше. Если у вас более старая операционная система или вы просто хотите скачать более свежую версию PowerShell, сделать это можно здесь: https://technet.microsoft.com/en-us/scriptcenter/dd742419.aspx

Как запустить скрипт PowerShell?

Есть несколько различных способов запуска скрипта, ниже приведены основные:

  1. Запустить оболочку PowerShell и в ней запустить скрипт (ввести путь до файла и имя файла, например, так: C:\Scripts\test.ps1, или перейти в папку скрипта командой cd C:\Scripts и запустить его командой .\test.ps1)Оболочку можно найти и запустить множеством способов. Один из способов — через меню «Пуск». Для Windows 7 — нужно зайти во «Все программы» — «Стандартные» — «Windows PowerShell» и запустить оболочку «Windows PowerShell». Для Windows 10 — нужно найти группу на букву «W» и в ней вы найдете «Windows PowerShell».
  2. Запустить «Интегрированную среду сценариев Windows PowerShell ISE» — это программа — среда разработки, позволяющая редактировать и отлаживать скрипты PowerShell, которая так же есть по-умолчанию вместе с самим PowerShell. Запустив ее, нужно просто нажать кнопку «Открыть» или зайти в меню Файл — Открыть и выбрать нужный скрипт, затем нажать F5 или кнопку «Выполнить скрипт».Найти 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 -executionpolicy RemoteSigned -file

Оба способа устанавливают политику только для текущего сеанса, при этом, политика безопасности выполнения скриптов PowerShell, прописанная в реестре, не будет изменена и останется прежней. Если вы хотите поменять политику безопасности выполнения скриптов «на постоянно», то используйте такой способ:

3. Разрешить запуск навсегда: запустить оболочку PowerShell от имени «Администратора», затем выполните команду:

Set-ExecutionPolicy RemoteSigned

Однако, я бы не рекомендовал такой способ, чтобы не подвергать ваш компьютер возможным угрозам, т.к. так вы разрешаете выполнение скриптов всем и всегда.

Примечание: Если скрипт был загружен из интернета, то чтобы избежать запроса на подтверждение запуска, нужно вместо RemoteSigned использовать Bypass — полное отключение любых запросов и предупреждений.

Как запустить скрипт PowerShell в фоновом режиме?

Для этого достаточно использовать параметр запуска -WindowStyle, который может принимать значения: Normal, Minimized, Maximized и Hidden. Таким образом, чтобы запустить неподписанный скрипт в фоновом режиме, нужно выполнить команду:

powershell -executionpolicy RemoteSigned -WindowStyle Hidden -file

Так же можно еще при желании добавить -NonInteractive, чтобы скрипт не задавал никаких вопросов. Таким образом, скрипт выполнится незаметно для пользователя. Будmте внимательны, используя такой способ.

Запуск скрипта PowerShell c параметрами

Собственно запуск нужно делать как если бы вы запускали обычную программу или bat-файл с параметрами. Например, для запуска скрипта с параметрами из командной, можно написать такую команду:

powershell -executionpolicy RemoteSigned -file param1 param2 «еще один текстовый параметр»

В самом скрипте вы можете получить эти параметры так:

param ($var1, $var2, $var3) echo $var1, $var2, $var3

В интегрированной среде PowerShell ISE запустить скрипт с параметрами можно аналогично, используя область команд.

Как запустить скрипт PowerShell с помощью ярлыка?

Осуществить такую задачу можно двумя способами:

  1. Создать bat/cmd файл, в котором прописать команду для запуска скрипта (с параметрами вы ознакомились выше)
  2. Создать ярлык на PowerShell, который можно найти в папке c:\Windows\System32\WindowsPowerShell\v\ и в свойствах ярлыка в поле «Объект» дописать необходимые параметры.

Таким образом, например, чтобы запустить скрипт powershell при входе пользователя, можно просто создать ярлык, как описано во 2-м пункте и поместить его в автозагрузку. Так же, создание ярлыка одним из способов выше позволит легко запустить скрипт от имени администратора или от имени любого другого пользователя как обычную программу.

Скриптовый язык PowerShell — довольно мощный инструмент для решения различных задач, но его можно использовать не только для хороших вещей, но и во вред, поэтому, пользуйтесь им с умом 😉

Источник: https://codernotes.ru/articles/powershell/zapusk-skriptov-powershell.html

Provide A Batch File To Run Your PowerShell Script From; Your Users Will Love You For It

Запуск скрипта powershell из bat файла

Aside — This post has received many tangential questions in the comments. Your best bet at getting an answer to those questions is to check Stack Overflow and/or post your question there.

A while ago in one of my older posts I included a little gem that I think deserves it’s own dedicated post; calling PowerShell scripts from a batch file.

Читайте также  Удаленный запуск программы через cmd

Why call my PowerShell script from a batch file?

When I am writing a script for other people to use (in my organization, or for the general public) or even for myself sometimes, I will often include a simple batch file (i.e. *.bat or *.cmd file) that just simply calls my PowerShell script and then exits. I do this because even though PowerShell is awesome, not everybody knows what it is or how to use it; non-technical folks obviously, but even many of the technical folks in our organization have never used PowerShell.

Let’s list the problems with sending somebody the PowerShell script alone; The first two points below are hurdles that every user stumbles over the first time they encounter PowerShell (they are there for security purposes):

  1. When you double-click a PowerShell script (*.ps1 file) the default action is often to open it up in an editor, not to run it (you can change this for your PC).
  2. When you do figure out you need to right-click the .ps1 file and choose Open With –> Windows PowerShell to run the script, it will fail with a warning saying that the execution policy is currently configured to not allow scripts to be ran.
  3. My script may require admin privileges in order to run correctly, and it can be tricky to run a PowerShell script as admin without going into a PowerShell console and running the script from there, which a lot of people won’t know how to do.
  4. A potential problem that could affect PowerShell Pros is that it’s possible for them to have variables or other settings set in their PowerShell profile that could cause my script to not perform correctly; this is pretty unly, but still a possibility.

So imagine you’ve written a PowerShell script that you want your grandma to run (or an HR employee, or an executive, or your teenage daughter, etc.). Do you think they’re going to be able to do it? Maybe, maybe not.

You should be kind to your users and provide a batch file to call your PowerShell script.

The beauty of batch file scripts is that by default the script is ran when it is double-clicked (solves problem #1), and all of the other problems can be overcome by using a few arguments in our batch file.

Ok, I see your point. So how do I call my PowerShell script from a batch file?

First, the code I provide assumes that the batch file and PowerShell script are in the same directory. So if you have a PowerShell script called “MyPowerShellScript.ps1” and a batch file called “RunMyPowerShellScript.cmd”, this is what the batch file would contain:

@ECHO OFFSET ThisScriptsDirectory=%~dp0SET PowerShellScriptPath=%ThisScriptsDirectory%MyPowerShellScript.ps1PowerShell -NoProfile -ExecutionPolicy Bypass -Command «& '%PowerShellScriptPath%'»;

Line 1 just prevents the contents of the batch file from being printed to the command prompt (so it’s optional). Line 2 gets the directory that the batch file is in. Line 3 just appends the PowerShell script filename to the script directory to get the full path to the PowerShell script file, so this is the only line you would need to modify; replace MyPowerShellScript.ps1 with your PowerShell script’s filename. The 4th line is the one that actually calls the PowerShell script and contains the magic.

The –NoProfile switch solves problem #4 above, and the –ExecutionPolicy Bypass argument solves problem #2. But that still leaves problem #3 above, right?

Call your PowerShell script from a batch file with Administrative permissions (i.e. Run As Admin)

If your PowerShell script needs to be run as an admin for whatever reason, the 4th line of the batch file will need to change a bit:

@ECHO OFFSET ThisScriptsDirectory=%~dp0SET PowerShellScriptPath=%ThisScriptsDirectory%MyPowerShellScript.ps1PowerShell -NoProfile -ExecutionPolicy Bypass -Command «& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File «»%PowerShellScriptPath%»»' -Verb RunAs}»;

We can’t call the PowerShell script as admin from the command prompt, but we can from PowerShell; so we essentially start a new PowerShell session, and then have that session call the PowerShell script using the –Verb RunAs argument to specify that the script should be run as an administrator.

And voila, that’s it. Now all anybody has to do to run your PowerShell script is double-click the batch file; something that even your grandma can do (well, hopefully). So will your users really love you for this; well, no. Instead they just won’t be cursing you for sending them a script that they can’t figure out how to run. It’s one of those things that nobody notices until it doesn’t work.

So take the extra 10 seconds to create a batch file and copy/paste the above text into it; it’ll save you time in the long run when you don’t have to repeat to all your users the specific instructions they need to follow to run your PowerShell script.

I typically use this trick for myself too when my script requires admin rights, as it just makes running the script faster and easier.

Bonus

One more tidbit that I often include at the end of my PowerShell scripts is the following code:

# If running in the console, wait for input before closing.if ($Host.Name -eq «ConsoleHost»){ Write-Host «Press any key to continue…» $Host.UI.RawUI.FlushInputBuffer() # Make sure buffered input doesn't «press a key» and skip the ReadKey(). $Host.UI.RawUI.ReadKey(«NoEcho,IncludeKeyUp») > $null}

This will prompt the user for keyboard input before closing the PowerShell console window. This is useful because it allows users to read any errors that your PowerShell script may have thrown before the window closes, or even just so they can see the “Everything completed successfully” message that your script spits out so they know that it ran correctly. Related side note: you can change your PC to always leave the PowerShell console window open after running a script, if that is your preference.

Читайте также  Исчезает панель задач при запуске браузера

I hope you find this useful. Feel free to leave comments.

Happy coding!

Several people have left comments asking how to pass parameters into the PowerShell script from the batch file.

Here is how to pass in ordered parameters:

PowerShell -NoProfile -ExecutionPolicy Bypass -Command «& '%PowerShellScriptPath%' 'First Param Value' 'Second Param Value'»;

And here is how to pass in named parameters:

PowerShell -NoProfile -ExecutionPolicy Bypass -Command «& '%PowerShellScriptPath%' -Param1Name 'Param 1 Value' -Param2Name 'Param 2 Value'»

And if you are running the admin version of the script, here is how to pass in ordered parameters:

PowerShell -NoProfile -ExecutionPolicy Bypass -Command «& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File «»»»%PowerShellScriptPath%»»»» «»»»First Param Value»»»» «»»»Second Param Value»»»» ' -Verb RunAs}»

And here is how to pass in named parameters:

PowerShell -NoProfile -ExecutionPolicy Bypass -Command «& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File «»»»%PowerShellScriptPath%»»»» -Param1Name «»»»Param 1 Value»»»» -Param2Name «»»»Param 2 value»»»» ' -Verb RunAs}»;

And yes, the PowerShell script name and parameters need to be wrapped in 4 double quotes in order to properly handle paths/values with spaces.

Источник: https://blog.danskingdom.com/allow-others-to-run-your-powershell-scripts-from-a-batch-file-they-will-love-you-for-it/

Как автоматизировать рутинные задачи обслуживания в Windows 10

Запуск скрипта powershell из bat файла

Часто приходится удалять старые файлы, очищать ненужные данные, запускать постоянно используемые программы и выполнять другие действия вручную? Мы предлагаем вам ознакомиться с несколькими способами по автоматизации повторяющихся задач в Windows 10

Часто ли вам приходится удалять старые файлы, очищать ненужные данные, запускать постоянно используемые программы и выполнять другие действия вручную? Если ваш ответ звучит утвердительно, то мы предлагаем вам ознакомиться с несколькими способами по автоматизации повторяющихся задач в Windows 10 с целью экономии времени. Хотя слишком много времени от автоматизации вы не выиграете, в любом случае вам не придется периодически выполнять одни и те же действия вручную.

Для начала мы рассмотрим несколько встроенных средств Windows, которые помогают автоматизировать определенные задачи, а затем приведем примеры такой автоматизации.

Используемые инструменты

Скорее всего, вы уже сталкивались с такими инструментами, как Командная строка, PowerShell и Планировщик заданий. Если вы — новичок, то ознакомьтесь с описанием данных встроенных средств Windows.

Командная строка и пакетные файлы .BAT

Командная строка в Windows 10 является преемником командной строки MS-DOS и представляет собой программу-интерпретатор командной строки. Файл, который содержит несколько команд или инструкций называется «пакетным файлом» и обычно имеет расширение .bat. Он может использоваться для автоматизации рутинных задач, например, для резервного копирования файлов и папок на переносной диск. Чтобы найти командную строку введите cmd или Командная строка в меню «Пуск» и выберите предложенный вариант.

Вам нужно лишь собрать необходимые команды в текстовом файле с расширением «.bat» или «.cmd». Вы можете просто открыть файл для его выполнения — Windows 10 выполнит команды в файле последовательно или в соответствии с запрограммированным порядком.

Полный список команд с описанием доступен на сайте Microsoft.

Скрипты PowerShell

PowerShell — мощный фреймворк для управления и автоматизации для продвинутых пользователей и системных администраторов. Если вам нужен обширный потенциал для автоматизации, то вам стоит изучить и использовать PowerShell.

Командная строка гораздо проще в изучении и использовании, чем PowerShell, потому что последний предлагает больше гибкости и функциональных возможностей.

Чтобы получить доступ к Windows PowerShell, введите PowerShell в поисковой строке меню Пуск. Вы увидите две программы — «PowerShell» и «PowerShell ISE». PowerShell представляет собой интерпретатор командной строки, а PowerShell ISE применяется для написания скриптов (с расширением «.ps1»), которые содержат группу команд, также, как и пакетные файлы .bat.

Полный список команд Powershell с описанием доступен на сайте Microsoft.

Планировщик заданий

Другой полезный инструмент Windows, который поможет в автоматизации — Планировщик заданий, программа для запуска различных программ и задач по расписанию. Запланированные задания запускаются в определенное время или через определенные интервалы времени. Пользователь может настроить показ сообщений или уведомлений по завершению задачи и выполнять другие дополнительные действия. Более того, вы можете настроить задачи под ваши нужды.

Чтобы запустить планировщик, введите фразу Планировщик заданий в поисковой строке меню Пуск. Обратите внимание, что некоторые программы Windows и некоторые сторонние приложения (например, Google Chrome) создают запланированные задачи для нужд обслуживания, поэтому не стоит редактировать или отключать уже имеющиеся задачи.

Мы уже публиковали подробный материал по использованию Планировщика заданий.

Приступим к автоматизации

Теперь, когда вы получили базовую информацию о необходимых инструментах, давайте попробуем создать несколько скриптов и заданий. При правильной настройке, приведенные ниже сценарии помогут автоматизировать различные задачи обслуживания на вашем компьютере без необходимости вмешательства в эти действия.

Запуск нескольких приложений

Если вам приходится каждый раз при запуске компьютера открывать одни и те же файлы (например, электронные таблицы), то вы можете автоматизировать эти действия. Для этого нужно определить путь папок, файлов или программ, которые нужно открыть после загрузки операционной системы и создать пакетный файл.

Например, вы можете создать пакетный файл для открытия папки Документы, браузера Google Chrome, документа Word с помощью кода, указанного ниже. Обратите внимание, что переменная «%USERPROFILE%» соответствует вашей пользовательской директории в Windows.

@echo off :: Открываем папку Документы start %USERPROFILE%\Documents\ :: Запускаем Chrome start chrome.exe :: Открываем документ comss.docx на рабочем столе start «» «%USERPROFILE%\Desktop\comss.docx» exit

Запуск приложений от имени администратора

В предыдущем примере у вас должно все получиться, но запуск программ в том способе происходит без прав администратора. В результате программа, которая требует повышенных прав для запуска покажет запрос службы контроля учетных записей, который нужно подтвердить вручную. Если вы это не сделаете, программа не запуститься или завершит работу.

Читайте также  Запуск Windows программ на Android

С этой проблемой нам поможет справиться Планировщик заданий. Только данный встроенный инструмент позволяет запускать программу с правами администратора без участия пользователя. Вы можете запустить приложение или несколько приложений (с помощью пакетного скрипта), используя Планировщик заданий. Разберем, как это сделать:

  • Откройте Планировщик заданий. Выберите Действие > Создать задачу в верхнем меню или одноименную функцию на панели «Действия» справа.
  • На вкладке «Общие» укажите название, например «Задача администратора», и отметьте галочку «Выполнить с наивысшими правами».
  • На вкладке «Триггеры» нажмите «Создать..» и поле «Начать задачу:» укажите вариант «При запуске».
  • На вкладке «Действия» также нажмите «Создать..».
  • В открывшемся окне выберите действие «Запуск программы», в поле «Программа / Сценарий» укажите ваш исполняемый или пакетный файл и нажмите ОК.
  • Теперь убедитесь, что на вкладке «Параметры» отмечена опция «Выполнять задачу по требованию» и нажмите ОК для добавления задачи.
  • Все готово. Теперь указанная программа будет запускаться автоматически с правами администратора сразу после запуска системы.

Удаление старых файлов

Если вам нравятся технологии или вы являетесь разработчиком, и вам часто приходится скачивать и тестировать различные программы, то спустя некоторое время (достаточно и месяца) в вашей системе накопится большое количество уже ненужных файлов. К нам на помощь снова приходит пакетный файл.

Аналогичным образом вы можете создать .bat файл для удаления старых файлов определенного расширения или файлов в определенных директориях или вложенных папках, возраст которых превышает заданный предел. Приведенный ниже код удаляет документы .docx в папке Документы возрастом более 20 дней (вы можете указать своё число дней, изменив значение, следующее за аргументом /d).

@echo off forfiles /p «%USERPROFILE%\Documents» /s /m *.docx /d -20 /c «cmd /c del @path» echo Document files older than 20 days deleted pause exit

Вы также можете изменить путь, изменив значение, следующие за аргументом /p на свою папку, файлы в которой нужно удалить. Опять же, переменная «%USERPROFILE%» соответствует вашей пользовательской директории в Windows.

Очистка корзины

Рекомендуется удалять содержимое корзины регулярно для освобождения пространства на диске. Это очень простая задача, которая не займет много времени, но даже об этом действии можно забыть, внедрив автоматизацию. Данное задание можно обрабатывать в автоматическом режиме с помощью Планировщика заданий. Приведем шаги по автоматической оптимизации свободного пространства на жестком диске.

  • Откройте Планировщик заданий.
  • Откройте Библиотека планировщика заданий и в меню «Действие» выберите пункт «Создать папку» и назовите ее «Мои задачи».
  • Выберите папку «Мои задач» и в меню «Действие» выберите «Создать задачу».
  • В окне создания задачи на вкладке «Общие» укажите название «Очистка корзины».
  • На вкладке «Триггеры» нажмите кнопку «Создать…» и в поле «Начать задачу:» в открывшемся окне выберите «По расписанию».
  • Выберите опцию «Еженедельно или ежемесячно» в зависимости от ваших предпочтений и нажмите ОК.
  • На вкладке «Действия» выберите «Создать…» и в поле «Программа / Сценарий» введите «PowerShell.exe»
  • В том же окне в поле «Добавить аргументы (необязательно)» введите следующий запрос -NoProfile -Command «Clear-RecycleBin -Force» и нажмите ОК.
  • На этом все. Просто сохраните задание, и корзина будет очищаться регулярно автоматически.

Отключение компьютера

Чтобы не засиживаться за монитором допоздна, рекомендуем применить небольшой трюк — настроить автоматическое отключение компьютера в определенное время. Для этого воспользуемся скриптом.

Приведенный ниже скрипт покажет сообщение в 11 вечера и выключить компьютер спустя 120 секунд (2 минуты). Вы можете указать другое время, изменив значение переменной %time%

@echo off :a If %time%==23:00:00.00 goto :b goto a: :b shutdown.exe /s /f /t 120 /c «Time To Say Good Night!» exit

Примечание: чтобы сохранить прогресс работы у вас будет целых 120 секунд, вместо 30 секунд по умолчанию. Вы можете остановить процесс отключения компьютера, нажав Win + R, введя команду shutdown -a и нажав Enter. Очень просто, не правда ли?

Резервное копирование файлов и папок

Конечно, существует много сторонних решений для резервного копирования файлов, в том числе облачные сервисы Dropbox или Backup and Sync от Google. Однако, если вы хотите иметь полный контроль над своими конфиденциальными файлами и не хотите «светить» их на облачных серверах, тогда можно настроить автоматическое резервное копирование на переносной жесткий диск или флешку. Нам снова поможет пакетный скрипт. Ничего не нужно скачивать, все делается очень просто.

Обратите внимание, что данный метод просто копирует определенные файлы и папки и не создает стандартные точки восстановления системы или копии системы. В нашем примере воспользуемся командой robocopy для резервного копирования файлов. Следующий скрипт позволяет создать полную резервную копию содержимого пользовательской папки и системного реестра.

@echo off :: Укажите папку для резервного копирования ниже set sourcedir=%USERPROFILE%\Documents\ :: Укажите путь до папки на переносном хранилище set targetdir=D:\Backup if not exist «%targetdir%» mkdir «%targetdir%» echo ### Backing up your profile robocopy %sourcedir% %targetdir% * /e /j /r:10 /v echo ### Backing up the registry if exist «%targetdir%\regbackup.reg» del «%targetdir%\regbackup.reg» regedit.exe /e «%targetdir%\regbackup.reg» echo ### Backup is all completed pause exit

Некоторые замечания

Скорее всего, вам понравится заниматься автоматизацией задач. Однако для удобства, вместо приложения Блокнот лучше воспользоваться более продвинутым редактором кода, например Notepad++. Так например, вы сможете без лишних трудностей добавлять сообщения на русском языке, используя меню Notepad++ «Кодировки» -> «Кодировки» -> «Кириллица» -> «OEM 866».

Вы можете подробно ознакомиться с различными командами для решения широкого круга задач автоматизации по ссылкам выше. Надеемся, что данная статья будет вам полезна и вы сможете повысить уровень продуктивности, не отвлекаясь на рутинные задачи.

Если вы хотите поделиться примерами своих скриптов или настроенных заданий автоматического обслуживания, воспользуйтесь формой комментариев ниже.

По материалам Hongkiat

Источник: https://www.comss.ru/page.php?id=5491