Запустить программу powershell: Запуск исполняемого файла из PowerShell
Содержание
Запуск исполняемого файла из PowerShell
Задача запустить из PowerShell какой либо исполняемый файл (программу или утилиту командной строки) встречается достаточно часто. PowerShell предлагает для этого несколько различных способов, которые мы и рассмотрим далее в этой статье. Начнем с самого простого…
Прямой запуск
Самый простой способ запустить исполняемый файл в PowerShell — это перейти в директорию с файлом и стартовать его напрямую. Для примера возьмем простенькую программку, выводящую приветствие, и выполним ее командой:
Set-Location ″C:\Program Files″
.\Hello.exe
Обратите внимание, что даже находясь в нужном каталоге, требуется указывать относительный путь к исполняемому файлу. Исключение составляют файлы из директорий, перечисленных в переменной окружения (path). Например различные встроенные программы и утилиты (notepad, calc, ping и т.п.), находящиеся в директории Windows\System32, можно запускать без указания пути.
Оператор &
Если необходимо указать полный путь к исполняемому файлу, то можно воспользоваться оператором & (оператор вызова). Он позволяет выполнить строку текста, указанную в кавычках, как единую команду. Например:
& ′C:\Program Files\Hello.exe′
Поскольку оператор & не анализирует передаваемую команду, то он не может интерпретировать ее параметры. Поэтому дополнительные параметры\аргументы передаются также в виде текста, в кавычках. Для примера возьмем предыдущую программу и немного изменим ее, так что она принимает нужный текст в виде аргумента:
& ′C:\Program Files\Hello.exe′ ′Hello, world′
При желании можно указать нескольких аргументов через запятую:
& ′C:\Program Files\Hello.exe′ ′Hello,′, ′ world′
Для удобства команду и аргументы можно поместить в переменные:
$exe = ′C:\Program Files\Hello.exe′
$arg1 = ′Hello′
$arg2 = ′world′
& $exe $arg1 $arg2
Ну и если аргументов много, то их можно объединить, воспользовавшись такой конструкцией:
$exe = ′C:\Program Files\Hello.exe′
$allargs = @(′Hello,′,′world′)
& $exe $allargs
Invoke-Expression
Командлет Invoke-Expression работает примерно так-же, как и оператор & — берет текстовую строку и выполняет ее в виде команды. Например:
Invoke-Expression -Command ′C:\Windows\Hello.exe′
Однако у него есть один большой недостаток, а именно — неумение работать с пробелами. К примеру, следующая команда вызовет ошибку:
Invoke-Expression -Command ′C:\Program Files\Hello.exe′
Эта особенность делает применение командлета крайне неудобным. Хотя при необходимости подобных ошибок можно избежать с помощью дополнительных кавычек, например так:
Invoke-Expression -Command ″C:\′Program Files′\Hello.exe″
Start-Process
Командлет Start-Process запускает указанный файл в виде процесса, используя метод Start .NET класса Process. Например:
Start-Process -FilePath ′C:\Program Files\Hello.exe′
По умолчанию процесс выполняется в отдельном окне, которое закрывается по окончании процесса. Изменить такое поведение можно с помощью параметров, так следующая команда запустится в текущем окне:
Start-Process -FilePath ′C:\Program Files\Hello. exe′ -NoNewWindow -Wait
Также Start-Process позволяет передать в процесс дополнительные аргументы:
Start-Process -FilePath ′C:\Program Files\Hello.exe′ -ArgumentList ′Hello, world′ -NoNewWindow -Wait
По умолчанию командлет ничего не возвращает, но с помощью параметра -PassThru можно заставить его вернуть объект процесса. Этот объект очень удобно поместить в переменную:
$process = Start-Process -FilePath ′C:\Program Files\Hello.exe′ -Wait -PassThru
из которой можно затем можно узнать многие полезные вещи, такие как статус:
$process.HasExited
время:
$process.ExitTime
или код выполнения:
$process.ExitCode
.NET
В принципе .NET классом Process можно воспользоваться напрямую, без командлета Start-Process. К примеру, запустить процесс можно командой:
[System.Diagnostics.Process]::Start(′C:\Program Files\Hello.exe′)
Такой способ достаточно неудобен и громоздок (на мой взгляд), но чуть более гибок в использовании. Для примера запустим нашу программу в текущем окне, передадим в нее аргументы и заберем результат выполнения:
$process = New-Object -TypeName System.Diagnostics.Process
$process.StartInfo.FileName = ″C:\Program Files\Hello.exe″
$process.StartInfo.Arguments = ″Hello,world″
$process.StartInfo.RedirectStandardOutput = $true
$process.StartInfo.UseShellExecute = $false
$process.Start()
$process.WaitForExit()
$process.StandatdOutput.ReadToEnd()
WMI
С помощью WMI можно сделать практически все, в том числе и запустить программу. Для этого вполне подойдет метод Create WMI-класса Win32_Process. Этот метод запускает процесс на локальном или удаленном компьютере через RPC. Например, для выполнения программы на локальном компьютере можно воспользоваться такой командой:
([wmiclass])″Win32_Process″).Create(′C:\Program Files\Hello.exe′)
А для выполнения на удаленном компьютере команда будет выглядеть так:
([wmiclass])″\\remotecomputer\root\cimv2:Win32_Process″). Create(′C:\Program Files\Hello.exe′)
Как вариант, можно воспользоваться командлетом Invoke-WmiMethod:
Invoke-WmiMethod -Class Win32_Process -Name Create -ArgumentList ″C:\Program Files\Hello.exe″
Либо командлетом Invoke-CimMethod:
Invoke-CimMethod -ClassName Win32_Process -MethodName Create -Arguments @{CommandLine=″C:\Program Files\Hello.exe″}
WMI запускает процесс в отдельном окне и возвращает объект, содержащий идентификатор процесса (ProcessID) и результат выполнения (ReturnValue). ReturnValue может принимать следующие значения:
0 — Sucsessful Completiom
2 — Access Denied
3 — Insufficient Privilege
8 — Uncnown Failure
9 — Path Not Found
21 — Invalid Parameter
Invoke-Command
Командлет Invoke-Command умеет выполнять команды на локальном или удаленном компьютере, используя WinRM. Например, для запуска нашей программы на локальном компьютере используем команду:
Invoke-Command -ScriptBlock {″C:\′Program Files′\Hello.exe″}
При необходимости в программу можно передать аргументы:
Invoke-Command -ScriptBlock {C:\′Program Files′\Hello.exe ″Hello,world″}
Обратите внимание, что Invoke-Command не очень дружит с пробелами, поэтому во избежании ошибок приходится исхитряться с кавычками. Впрочем, подобных проблем можно избежать, например комбинируя использования командлета с оператором &:
Invoke-Command -ScriptBlock {& ′C:\Program Files\Hello.exe′}
В основном Invoke-Command применяется для удаленного управления, его главное достоинство — это возможность одновременного выполнения на нескольких компьютерах. Например:
Invoke-Command -ScriptBlock {″C:\′Program Files′\Hello.exe″} -ComputerName SRV1,SRV2,SRV3
Или так:
$scriptblock = {″C:\′Program Files′\Hello.exe″}
$Computers = @(′SRV1′,′SRV2′,′SRV3′)
Invoke-Command -ScriptBlock $scriptblock -ComputerName $Computers
По умолчанию командлет возвращает результат выполнения программы, а если запустить его в фоновом режиме (параметр -AsJob), то возвращает объект Job:
Invoke-Command -ScriptBlock {C:\′Program Files′\Hello. exe} -ComputerName localhost -AsJob -JobName Hello
Invoke-Item
Командлет Invoke-Item предназначен для применения к файлу действия по умолчанию. Так запустить исполняемый файл можно командой:
Invoke-Item -Path ″C:\Program Files\Hello.exe″
Однако наиболее удобно использовать Invoke-Item для открытия определенного типа файлов. Например так мы откроем текстовый файл:
Invoke-Item -Path ″C:\Files\test.txt″
А так все текстовые файлы в папке:
Invoke-Item -Path ″C:\Files\*.txt″
CMD
Ну и в завершение еще один способ запуска программы из PowerShell — с помощью оболочки cmd. Способ достаточно ″непрямой″, но тем не менее работающий. Следующая команда запускает новый экземпляр cmd, выполняет в нем указанную программу, завершает работу cmd и возвращает результат:
cmd /c ″C:\Program Files\Hello.exe″
Такое вот изобилие способов запустить программу предоставляет PoSh. И каждый из них хорош для определенных ситуаций.
Кстати, статья написана по мотивам PowerShell: Deep Dive and Best Practice. Рекомендую почитать, там еще много интересного.
Windows PowerShell: что это за программа, как запустить и использовать
Windows PowerShell — что это за программа? Такой вопрос довольно часто встречается среди пользователей, начинающих «глубже» изучать Windows. Рядовым пользователям такая программа вообще не нужна. «Рядовой пользователь» — это тот, кто не любит настраивать операционную систему «под себя». Максимум, на что он способен, — это поменять тему рабочего стола. Таких пользователей очень много.
Windows PowerShell — это программа, которая пригодится системным администраторам Windows-серверов или тем, кто хочет «покопаться» в тонких настройках этой операционной системы. При помощи этой программы можно:
запускать исполнение скриптов, влияющих на работу системы;
настраивать, останавливать или активировать внутренние сервисы и службы;
конфигурировать большинство программ, установленных на компьютере.
Многие пользователи компьютеров знают или слышали, что у Linux-систем очень развита конфигурация системы через терминал и командные скрипты. У Виндовс такой способ конфигурации был слабо развит, пока не появилась программа Windows PowerShell.
Windows PowerShell — что это за программа?
Сегодняшняя статья не будет глубоким погружением в работу этой программы, так как все ее возможности описать в рамках одной статьи невозможно. Цель статьи — ответить на вопрос: «Windows PowerShell — что это за программа?», чтобы пользователи смогли решить, стоит ли им дальше ее изучать.
Windows PowerShell — это оболочка для стандартной командной строки и по совместительству язык сценариев для администрирования системы. Эта программа создана на основе «.NET Framework». По сути, эта программа нужна для автоматизирования администрирования операционной системы. Она подходит для системных администраторов и для «продвинутых» пользователей, которые не боятся самостоятельно конфигурировать ОС.
Как запустить Windows PowerShell?
Windows PowerShell — это утилита, которая уже встроена в систему. Если у вас не «обрезанная» операционная система, тогда она уже есть в компьютере. «Обрезанная система» — это операционная система, которая была «обработана» опытными пользователями. То есть они удалили все лишнее из ОС, чтобы сделать ее «легче». Как правило, «обрезанные» системы — это пиратские копии Windows.
Если у вас обычная система, тогда запустить Windows PowerShell очень просто. Воспользуйтесь любым удобным способом:
Через утилиту «Выполнить». Откройте меню «Выполнить» и введите в него команду «powershell». Можно воспользоваться более «продвинутой» версией «PowerShell ISE». Для этого тут же можно ввести команду «PowerShell ISE». «ISE»-версия более предпочтительна, так как имеет более широкие возможности и более удобна.
Через меню «Пуск». Откройте меню «Пуск» и спуститесь в самый низ, где расположены программы на букву «W». Найдите папку «Windows PowerShell» и выберете программу, подходящую для вас. Опять же, это может быть «чистая» «Windows PowerShell» или «Windows PowerShell ISE».
Также, чтобы запустить Windows PowerShell, можно использовать «Диспетчер задач» или «Проводник». Можно запустить программу прямо из папки на диске «С». Но все это более сложные способы, первые два намного легче и проще, поэтому воспользуйтесь ими.
Как используется программа Windows PowerShell?
В Windows PowerShell есть удобный инструмент — «cmdlets». По сути, это функциональные команды, которые формируются по принципу «Действия-Объекты». Например, когда нужна документационная помощь, можно воспользоваться командой «Get-Help». В ответ вы получите документацию по использованию программы Windows PowerShell. Глагол «Get» означает «получить», а в контексте программы Windows PowerShell — «показать», но есть и другие глаголы, формирующие команды. Например:
«Add» — «добавить»;
«Clear» — «очистить»;
«Enable» — «подключить»;
«Disable» — «отключить»;
«New» — «создать»;
«Remove» — «удалить»;
«Set» — «задать»;
«Start» — «активировать»;
«Stop» — «остановить»;
«Export» — «экспортировать»;
«Import» — «импортировать».
Функциональные команды не зависят от регистра, то есть «Start-Script» — это то же самое, что и «start-script». Если нужно ввести сразу несколько команд, тогда они разделяются «точкой с запятой», например: «Start-Script; Export-File».
Внутри Windows PowerShell спрятано очень много функциональных команд. Те, которые часто используются пользователями, укомплектованы в «укороченные» команды — алиасы. Например, вместо «Get-Help» можно ввести просто «help», а вместо «Add-Content» можно использовать «ас». Другими словами, алиасы — это те же синонимы, то есть «Add-Content» и «ac» выполняют одно и то же действие, но пишутся по-разному. Весь перечень «синонимов» можно посмотреть прямо в Windows PowerShell, если ввести команду «Get-Alias».
У команд могут быть собственные аргументы. Например, если нужно остановить какой-то конкретный процесс в системе, вы не можете просто ввести команду «Stop-Process». Нужно указать, какой процесс вы хотите остановить. Хорошо, если вы знаете имя процесса. Если вы не знаете точное имя процесса, тогда посмотрите все запущенные процессы в системе при помощи команды «Get-Process». После этой команды вам откроется список всех запущенных и остановленных процессов. Находите имя процесса, который хотите остановить, и пишете вот такую команду: «Stop-Process {Имя процесса}».
Windows PowerShell: скрипты
Функциональные команды — это удобный инструмент, но Windows PowerShell интересен тем, что с его помощью можно автоматизировать настройку Windows-системы или серверов при помощи скриптов.
В данном случае скрипт PowerShell — это набор команд, которые выполняются комплексно. Например, у вас есть ряд манипуляций с системой, которые вы проводите каждый день. В этом случае вы можете укомплектовать все манипуляции в один скрипт и запускать его, когда это нужно.
По сути, скрипты Windows PowerShell — это текстовые файлы со специальным расширением «.ps1». Их невозможно запустить «двойным щелчком мыши», так как они запускаются только в Windows PowerShell. Прежде чем писать собственные скрипты, нужно ознакомиться с политикой их написания, так как они очень строго регулируются. Политика написания скриптов доступна в самой программе Windows PowerShell при вводе команды «Get-ExecutionPolicy».
Заключение
Windows PowerShell — что это за программа? Это программа, которая помогает управлять серверами или операционной системой Windows. Обычному пользователю она вряд ли пригодится, но системному администратору лучше ее изучить. Она помогает автоматизировать многие операции над системой. Чтобы добиться автоматизации, придется один раз «попотеть» над скриптами, а потом запускать их в нужное время. Перед написанием скриптов нужно обязательно ознакомиться с требованиями к ним, иначе есть риск, что скрипт никогда не запустится в Windows PowerShell, а вы не будете знать почему.
Запуск сценария PowerShell из командной строки и не только
Если вы новичок в языке сценариев PowerShell и хотите узнать, как запускать сценарий PowerShell, вы попали в нужное сообщение в блоге. Этот блог будет учебным пособием, описывающим распространенные способы запуска скриптов и несколько проблем, которые могут возникнуть.
Не читатель? Посмотрите соответствующий видеоурок!
Не видите видео? Убедитесь, что ваш блокировщик рекламы отключен.
Предпосылки
Эта статья поможет вам запустить PowerShell на локальном компьютере. Если вы хотите продолжить, убедитесь, что у вас есть следующие предварительные условия, прежде чем начинать эту статью.
- Компьютер с Windows 10 с правами администратора.
- Windows PowerShell версии 5 или выше. Вы также можете использовать PowerShell v7 . В этом руководстве основное внимание будет уделено Windows PowerShell, поскольку она уже есть в операционной системе Windows.
- Любой редактор текстовых файлов
Работа с политикой выполнения
Если вы впервые пытаетесь выполнить сценарий Windows PowerShell, вы можете столкнуться с распространенной проблемой. PowerShell, вероятно, вернет сообщение об ошибке, в котором говорится, что скрипт «не может быть загружен, поскольку запуск скриптов отключен в этой системе».
PS> .\GetServices.ps1
Файл C:\Temp\GetServices.ps1 не может быть загружен, поскольку в этой системе отключено выполнение сценариев. Для получения дополнительной информации см. about_Execution_Policies на
https://go.microsoft.com/fwlink/?LinkID=135170.
В строке:1 символ:1
.\GetServices.ps1
~~~ ~~ Информация о категории: SecurityError: (:) [], PSSecurityException
FullyQualifiedErrorId: UnauthorizedAccess
PowerShell возвращает указанное выше сообщение об ошибке при попытке запустить PowerShell с установленной политикой выполнения Restricted , Remote Signed или All Signed .
Restricted
Restricted — это набор политик по умолчанию для клиентских компьютеров Windows. Если вы используете PowerShell впервые, ваша политика по умолчанию, вероятно, будет настроена на ограничение всех сценариев.
Вы по-прежнему можете выполнять отдельные команды в терминале, но не в файле сценария. Ограничение распространяется на любой файл, оканчивающийся на .ps1xml
, .psm1
или .ps1
.
Unrestricted
Unrestricted позволяет вам запускать любой скрипт, но предупреждает вас перед выполнением, если скрипт загружается из Интернета. Эта политика обычно используется по умолчанию для любых устройств, отличных от Windows.
Удаленная подпись
Политика удаленной подписи позволяет запускать любой сценарий, имеющий либо (а) цифровую подпись, либо (б) любой сценарий, написанный на локальном компьютере с подписью или без нее.
Если сценарий загружен из Интернета и не подписан, вам необходимо разблокировать файл. Вы можете сделать это, щелкнув файл правой кнопкой мыши и выбрав Свойства . Или вы можете использовать командлет Unblock-File
PowerShell для этого конкретного файла сценария.
Использование политики с удаленной подписью было бы идеальным вариантом при запуске сценария, загруженного из Интернета.
Все подписано
Все подписано требует, чтобы все сценарии были подписаны в цифровом виде доверенным издателем. Сюда входят сценарии, загруженные из Интернета и написанные локально на вашем компьютере.
Изменение политики выполнения PowerShell
Чтобы изменить политику выполнения:
- Откройте Windows PowerShell с . Запустите от имени администратора , чтобы убедиться, что у вас есть самые высокие права для внесения изменений в политику.
Поиск PowerShell в меню «Пуск»
2. При открытии выполните следующую команду PowerShell, чтобы установить политику выполнения вашего компьютера. Политика выполнения, как описано выше, может быть одного из трех различных типов. В этом руководстве используется полезная, но все же безопасная политика выполнения 9.0035 RemoteSigned .
Поскольку в этом руководстве предполагается, что вы загрузили из Интернета файл сценария GetServices.ps1 , установите для политики выполнения значение RemoteSigned .
Политика выполнения RemoteSigned заставляет вас криптографически подписывать каждый сценарий PowerShell, загруженный из Интернета, прежде чем PowerShell запустит его в вашей системе.
3. Вы должны увидеть запрос на подтверждение действия. Введите Y и нажмите Enter, чтобы подтвердить изменение политики.
Изменение политики выполнения
Политика выполнения помогает защитить вас от сценариев, которым вы не доверяете. Изменение политики выполнения может подвергнуть вас
риски безопасности, описанные в разделе справки about_Execution_Policies по адресу https:/go.microsoft.com/fwlink/?LinkID=135170. Вы хотите, чтобы
изменить политику выполнения?
[Y] Да [A] Да для всех [N] Нет [L] Нет для всех [S] Приостановить [?] Справка (по умолчанию «N»):
На этом этапе выполните следующие шаги, чтобы изучить различные методы для запуска сценария PowerShell на вашем компьютере.
Как запустить сценарий PowerShell
Чтобы продемонстрировать запуск сценария PowerShell, вам действительно нужен файл сценария для запуска! Если у вас его нет под рукой, загрузите этот ZIP-файл и извлеките из него файл PS1. Внутри вы найдете простой файл сценария с именем GetServices. ps1 .
Запись-вывод «Список компьютерных служб»
Get-Service
Каждый сценарий PowerShell должен заканчиваться расширением
.ps1
.
Использование консоли
После того, как у вас есть готовый сценарий, вы можете выполнить файл сценария PowerShell несколькими различными способами. Один из самых распространенных способов — через консоль PowerShell.
Для этого:
- Откройте консоль PowerShell, как показано выше.
2. Перейдите к расположению файловой системы, в котором находится ваш сценарий, с помощью командлета Set-Location
PowerShell или псевдонима cd
. Сценарий этого руководства находится в папке C:\Temp 9.каталог 0009.
PS> cd C:\Temp\
3. Запустите скрипт, используя запись через точку ( .
). PowerShell — это оболочка, которая также ищет имена команд. Чтобы отличить команду PowerShell от сценария, вы должны поставить перед сценарием точку. Эта точка представляет текущий каталог.
PS> .\GetServices.ps1
Как запустить сценарий PowerShell из командной строки через расположение PowerShell
Если вы не можете или не хотите запускать сценарии через консоль PowerShell, вы также можете сделать это с помощью старой доброй командной строки (командной строки).
Для запуска сценариев через командную строку необходимо сначала запустить исполняемый файл PowerShell ( powershell.exe ) с расположением PowerShell C:\Program Files\WindowsPowerShell\powershell.exe
, а затем передать путь сценария в качестве параметра к нему.
Вы можете запускать сценарии с параметрами в любом контексте, просто указав их при запуске исполняемого файла PowerShell, например
powershell.exe -Parameter 'Foo' -Parameter2 'Bar'
.
Открыв cmd.exe , вы можете выполнить сценарий PowerShell, как показано ниже. В этом примере запускается движок и передается путь сценария C:\Temp\GetServices.ps1 .
Обратите внимание, что в приведенном ниже примере используется путь расположения PowerShell для запуска сценария. Вам придется сделать это, если папка не находится где-то в вашем PATH.
CMD> C:\Program Files\WindowsPowerShell\powershell.exe "C:\Temp\GetServices.ps1"
Расположение PowerShell для PowerShell 7 использует другой исполняемый файл с именем pwsh.exe , обычно расположенный в C:\Program Files\PowerShell\7\pwsh.exe .
Ниже приведено полезное видео на YouTube, в котором рассказывается о выполнении скрипта через пакетный файл, который выполняет cmd.exe.
Использование PowerShell ISE
Если вы создаете свои собственные сценарии или редактируете чужие, вы, вероятно, будете использовать редактор сценариев, такой как PowerShell ISE или, может быть, Код Visual Studio (VS) . Поскольку ISE поставляется с Windows, давайте сосредоточимся на этом методе в этом руководстве.
Чтобы вызвать сценарий через ISE:
- Перейдите в меню «Пуск», найдите PowerShell ISE и откройте его.
Найдите PowerShell ISE в меню «Пуск»
2. Щелкните Файл → Откройте и найдите свой сценарий.
Открыть сценарий с помощью меню «Файл»
3. Когда сценарий открыт, щелкните зеленую кнопку запуска, чтобы выполнить сценарий. Эта кнопка вызовет скрипт во встроенном терминале PowerShell внизу.
Запуск сценария с помощью PowerShell ISE
Выходные данные примера сценария
Иногда сценарий PowerShell может возвращать выходные данные. Это происходит, когда скрипт, который вы выполняете, создан для возврата объектов , что является фундаментальным компонентом PowerShell.
Если вы запустите пример сценария GetServices.ps1 , вы увидите следующее. Этот сценарий запускает командлет Get-Service
, который возвращает все службы, установленные на вашем локальном компьютере с Windows.
PS> .\GetScripts.ps1
Список компьютерных услуг
Имя состояния Отображаемое имя
------ ---- -----------
Запуск службы Acronis Agent Core Service
Остановлено выполнение активации агента AarSvc_1b668d_1b668d
Запуск AcronisActivePr... Служба Acronis Active Protection
Запуск AcronisCyberPro... Служба Acronis Cyber Protection
Запуск службы AcrSch3Svc Acronis Scheduler2
Запуск службы AdobeARMservice Adobe Acrobat Update Service
Запуск AdobeUpdateService AdobeUpdateService
Запуск AGMService Adobe Genuine Monitor Service
Запуск AGSService Adobe Genuine Software Integrity Se...
---- Усеченный ----
Запуск сценария PowerShell из сценария
Допустим, у вас есть два сценария, и вы хотите, чтобы один вызывал другой. Возможно, у вас есть сценарий с именем GetUser.ps1 и сценарий с именем ResetPassword.ps1 . Внутри сценария GetUser.ps1 вы хотите выполнить ResetPassword.ps1 для сброса пароля пользователя.
Внутри вызывающего сценария ( GetUser. ps1) вы должны добавить строку для выполнения другого сценария так же, как если бы вы вызывали сценарий из командной строки.
Ниже вы можете увидеть, что у вас есть несколько вариантов. Обычно вы должны запускать другой сценарий в том же сеансе или области, чтобы упростить ситуацию, если у вас нет особой причины для запуска сценария в другом сеансе PowerShell.
## Чтобы запустить другой скрипт в новом сеансе
powershell.exe .\ResetPassword.ps1
## Чтобы запустить другой скрипт в том же сеансе
.\ResetPassword.ps1
Как запустить сценарий PowerShell
Сценарии PowerShell — отличный способ автоматизации задач, сбора информации или массового изменения свойств. Большинство команд PowerShell — это всего лишь одна строка, которую можно просто скопировать и вставить в PowerShell. Но как запустить полный сценарий PowerShell?
Существует несколько вариантов запуска сценариев PowerShell: просто из командной строки, с помощью PowerShell ISE или даже запланированного задания.
В этой статье я объясню различные варианты запуска сценария PowerShell. Также я помогу вам с распространенными ошибками, такими как «запуск скриптов отключен в этой системе».
Исправить Запуск сценариев отключен в этой системе
Мы собираемся начать с распространенной ошибки, которая не позволяет большинству пользователей запускать сценарий PowerShell, ошибки «Выполнение сценариев отключено в этой системе». Эта ошибка вызвана политикой выполнения PowerShell.
По умолчанию для политики выполнения PowerShell установлено значение Restricted . Это означает, что сценарии PowerShell вообще не будут выполняться.
Итак, чтобы запустить сценарий PowerShell, нам сначала нужно изменить политику выполнения. Для политики у нас есть несколько вариантов:
Политика выполнения | Описание |
---|---|
Restricted | 0279 |
Без ограничений | Может запускать любой сценарий, показывает предупреждение о загруженных сценариях |
RemoteSigned | Требуется цифровая подпись для загруженных сценариев. Вы можете запускать локально написанные сценарии. Вы можете разблокировать загруженные скрипты , чтобы запускать их без подписи |
ByPass | Вы можете запускать все скрипты, и предупреждения не отображаются |
AllSigned | Вы можете запускать подписанные сценарии только от доверенных издателей |
Политики выполнения разработаны не как модель безопасности, а в большей степени для предотвращения случайного выполнения сценария PowerShell. Оптимальный вариант — использовать политику RemoteSigned , так вы не сможете случайно запустить загруженный скрипт (предварительно его придется разблокировать). Подробнее о политике выполнения читайте в этой статье.
Совет
Узнайте больше о написании собственных сценариев PowerShell в этом полном руководстве
Чтобы изменить политику выполнения в PowerShell (и исправить «Выполнение сценариев отключено в этой системе»), нам нужно запустить PowerShell с правами администратора:
- Нажмите клавишу Windows + X (или щелкните правой кнопкой мыши в меню «Пуск»)
- Выберите Windows PowerShell (admin)
- Запустите команду ниже :
Set-ExecutionPolicy RemoteSigned
Теперь вы сможете запускать сценарии PowerShell.
Запустить сценарий PowerShell
Существует несколько вариантов запуска сценария PowerShell. Самый удобный способ — просто щелкнуть файл правой кнопкой мыши и выбрать «Выполнить с помощью PowerShell ».
Запустить сценарий PowerShell
Но у этого метода есть и обратная сторона. По умолчанию большинство сценариев PowerShell автоматически закрывают окно PowerShell после выполнения сценария. Таким образом, скрипт выполняется, но вы не сможете прочитать какие-либо ошибки или вывод.
Вы можете решить эту проблему, добавив следующую строку в конец скрипта PowerShell, но это не всегда удобно:
Read-Host -Prompt «Нажмите Enter для выхода»
Используйте Windows PowerShell
Лично я предпочитаю запускать сценарии PowerShell из командной строки в самой Windows PowerShell. Это можно сделать двумя способами: сначала запустить PowerShell и перейти к сценарию, либо открыть PowerShell в нужном месте из проводника.
Начнем с последнего, открыв PowerShell в нужном месте из проводника. В проводнике найдите сценарий, который вы хотите запустить, в данном случае это c:\temp\powershell.
- Щелкните правой кнопкой мыши в пустой области проводника (не в файле PowerShell)
- Выберите Открыть окно PowerShell здесь
(В Windows 11 вам нужно будет выбрать Открыть в терминале Windows)
Как вы видим, PowerShell запускается в папке c:\temp\PowerShell. Теперь мы можем запустить сценарий, просто введя имя файла (введите несколько первых букв и нажмите Tab, чтобы заполнить его автоматически)
Вы также можете сначала запустить Windows PowerShell:
- Щелкните правой кнопкой мыши в меню «Пуск» (или нажмите клавишу Windows + X )
- Выберите Windows PowerShell
- Перейдите в папку, где находится скрипт
cd c:\path script
- Запустить сценарий PowerShell
. \PowerShellExampleScript.ps1
Запустить сценарий PowerShell из CMD
Если вы уже пытались запустить PowerShell из cmd что он просто откроет скрипт в блокноте. Не совсем тот результат, который мы ищем.
Чтобы запустить сценарий PowerShell, нам нужно указать командной строке открыть сценарий с помощью PowerShell. Для этого мы можем использовать следующий cmd:
PowerShell c:\path\to\script\PowerShellScript.ps1
Обратите внимание, что вам нужно будет указать полный путь к скрипту PowerShell. Результат работы скрипта отображается в командной строке.
Если вы хотите, чтобы сеанс PowerShell оставался открытым, вы можете добавить в команду параметр -noexit
:
PowerShell -noexit c:\temp\PowerShell\PowerShellExampleScript. ps1
Использование PowerShell ISE
Когда вы загружаете сценарий из Интернета, всегда рекомендуется просмотреть сценарий перед его запуском. Простой способ просмотреть и запустить сценарий PowerShell — использовать PowerShell ISE.
Чтобы открыть файл PowerShell в редакторе, просто щелкните его правой кнопкой мыши и выберите Edit
При первом использовании редактора может потребоваться сначала развернуть панель сценария, чтобы просмотреть содержимое сценария PowerShell. :
Чтобы запустить скрипт в PowerShell ISE, просто нажмите зеленую кнопку воспроизведения на панели инструментов. Результаты сценариев отображаются в консоли:
Запуск сценария PowerShell от имени администратора
Для правильного запуска некоторых сценариев PowerShell требуются права администратора. Им может потребоваться доступ ко всем папкам на вашем системном диске или взаимодействие с другими компьютерами или серверами домена.
Самый простой способ запустить сценарии PowerShell от имени администратора — запустить Windows PowerShell от имени администратора.
- Нажмите Клавиша Windows + X (или щелкните правой кнопкой мыши меню «Пуск»)
- Выберите Windows PowerShell (администратор)
- Нажмите Да в строке безопасности учетной записи пользователя
Теперь вы можете запустить любой PowerShell команда или сценарий с правами администратора. Просто перейдите к сценарию (или даже перетащите его), чтобы запустить его.
Вы также можете запустить сценарий PowerShell от имени администратора из командной строки. Когда у вас открыт PowerShell, мы можем запустить новый процесс PowerShell и запустить его от имени администратора. При желании мы можем даже указать файл, который мы хотим запустить:
# Откройте новые окна PowerShell с правами администратора
Start-Process PowerShell — Глагол runAs
# Запустить скрипт PowerShell с правами администратора
Start-Process PowerShell -Verb runAs -ArgumentList "-file c:\temp\powershell\powershellexamplescript.