Настройка сценария PowerShell для автоматического выполнения

У меня есть несколько строк кода PowerShell, которые я хотел бы использовать в качестве автоматизированного сценария. Я бы хотел, чтобы он работал так, чтобы его можно было вызывать, используя один из следующих вариантов:

  1. Одна командная строка, которая открывает PowerShell, выполняет скрипт и закрывает PowerShell (это будет использоваться для глобальной процедуры сборки)
  2. Файл, который я могу дважды щелкнуть, чтобы запустить вышеуказанное (я бы использовал этот метод при ручном тестировании компонентов моего процесса сборки)

Я просматривал документацию по PowerShell в Интернете, и, хотя я могу найти множество скриптов, мне не удалось найти инструкции о том, как делать то, что мне нужно. Спасибо за помощь.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
18
0
59 092
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Сохраните ваш скрипт как файл .ps1 и запустите его с помощью powershell.exe, например:

powershell.exe .\foo.ps1

Убедитесь, что вы указали полный путь к сценарию, и убедитесь, что вы установили уровень политики выполнения как минимум на «RemoteSigned», чтобы можно было запускать неподписанные локальные сценарии.

Источник за ответ Мэтта.

Я могу запустить его, дважды щелкнув файл, создав пакетный файл со следующим содержимым:

C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe LocationOfPS1File

Приведенная ссылка указывает на некоторую устаревшую документацию. Доступна новая документация здесь.

Jean-François Beauchef 26.03.2016 18:01

От http://blogs.msdn.com/b/jaybaz_ms/archive/2007/04/26/powershell-polyglot.aspx

Если вы хотите запятнать свой красивый сценарий PowerShell с помощью небольшого CMD, вы можете использовать трюк с полиглотом PowerShell-CMD. Сохраните сценарий PowerShell как файл .CMD и поместите эту строку вверху:

@PowerShell -ExecutionPolicy Bypass -Command Invoke-Expression $('$args=@(^&{$args} %*);'+[String]::Join(';',(Get-Content '%~f0') -notmatch '^^@PowerShell.*EOF$')) & goto :EOF

Если вам нужно поддержать цитируемые аргументы, есть более длинная версия, которая также допускает комментарии. (обратите внимание на необычный трюк комментирования CMD с двойным @).

@@:: This prolog allows a PowerShell script to be embedded in a .CMD file.
@@:: Any non-PowerShell content must be preceeded by "@@"
@@setlocal
@@set POWERSHELL_BAT_ARGS=%*
@@if defined POWERSHELL_BAT_ARGS set POWERSHELL_BAT_ARGS=%POWERSHELL_BAT_ARGS:"=\"%
@@PowerShell -ExecutionPolicy Bypass -Command Invoke-Expression $('$args=@(^&{$args} %POWERSHELL_BAT_ARGS%);'+[String]::Join(';',$((Get-Content '%~f0') -notmatch '^^@@'))) & goto :EOF

Пришлось +1 за творчество. Жаль, что Microsoft не видит в этом необходимости.

bigendian 11.07.2012 07:10

Я модифицировал, чтобы добавить -ExecutionPolicy Bypass. Я полагаю, что к моменту запуска этой строки сценарий уже выполняется, поэтому вы должны доверять части PowerShell так же, как и части CMD.

Jay Bazuzi 12.02.2013 02:10

Вы можете подумать о замене Get-Content '%~f0' на Get-Content -LiteralPath '%~f0', если %~f0 содержит квадратные скобки.

Nick 06.03.2015 23:08

Автоматический запуск сценария из другого сценария (например, пакетного файла)

Как предложил Мэтт Гамильтон, просто создайте свой сценарий PowerShell .ps1 и вызовите его, используя:

PowerShell C:\Path\To\YourPowerShellScript.ps1

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

PowerShell .\YourPowerShellScript.ps1

И перед тем, как это сработает, вам нужно будет установить политику выполнения ПК, как это сделать я покажу ниже.


Запустить скрипт вручную, метод 1

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

@ECHO OFF
SET ThisScriptsDirectory=%~dp0
SET PowerShellScriptPath=%ThisScriptsDirectory%MyPowerShellScript.ps1
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '%PowerShellScriptPath%'"

Замените MyPowerShellScript.ps1 в третьей строке именем файла вашего сценария PowerShell.

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

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


Запустить скрипт вручную, метод 2

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

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

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

Start-Process PowerShell -ArgumentList 'Set-ExecutionPolicy RemoteSigned -Force' -Verb RunAs

Set-ExecutionPolicy RemoteSigned -Force - это команда, которая фактически изменяет политику выполнения; это устанавливает его в RemoteSigned, так что вы можете изменить это на что-то другое, если вам нужно. Кроме того, эта строка автоматически запустит PowerShell в качестве администратора для вас, что необходимо для изменения политики выполнения.

вы можете использовать эту команду: powershell.exe -аргумент c: \ scriptPath \ Script.ps1

Другие вопросы по теме