Запуск cmd из powershell: Запуск команды CMD в PowerShell
Запуск команды CMD в PowerShell
У меня есть куча проблем с получением команды PowerShell для запуска. Все, что он делает, — это запускает команду, которая будет выполняться в окне командной строки CMD.
Вот это команда:
"C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe" PCNAME
Я попробовал следующее, но безуспешно (я перепробовал много итераций этого метода, чтобы попытаться получить тот, который работает. Синтаксис, вероятно, весь испорчен):
$TEXT = $textbox.Text #$textbox is where the user enters the PC name.
$CMDCOMMAND = "C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe"
Start-Process '"$CMDCOMMAND" $TEXT'
#iex -Command ('"C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe"' $TEXT)
Команда просто откроет окно удаленного подключения SCCM к компьютеру, указанному пользователем в текстовом поле.
powershell
command-line
cmd
Поделиться
Источник
user3585839
24 июля 2014 в 17:29
5 ответов
- Открывайте и запускайте команды на cmd из PowerShell
Подобный вопрос был задан несколько раз на SO, и обычно ответом является один из следующих: выполните ту же команду на PowerShell, потому что она тоже есть запустите cmd , а затем команды вызов cmd прохождение /c и еще несколько вещей, которые я уже пробовал. Но моя проблема в том, что у меня есть…
- запуск powershell с помощью команды via cmd
как запустить программу с аргументами с помощью powershell через cmd 🙂 powershell -command & {get-service -computername server1,server2 -displayname ‘instance *’|where {$_.status -eq ‘Running’}|foreach-object {start-process -filepath ‘C:\monitor. exe’ -argumentlist -adminhost $($_.machinename)…
96
Попробуйте это:
& "C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe" PCNAME
Для PowerShell строка » … » — это просто строка, и PowerShell оценивает ее, повторяя ее на экране. Чтобы заставить PowerShell выполнить команду, имя которой находится в строке, вы используете оператор вызова &
.
Поделиться
Keith Hill
24 июля 2014 в 18:19
53
Для запуска или преобразования пакетных файлов извне из PowerShell (особенно если вы хотите подписать все сценарии запланированных задач сертификатом) Я просто создаю сценарий PowerShell, например deletefolders.ps1.
Введите в скрипт следующее:
cmd.exe /c "rd /s /q C:\#TEMP\test1"
cmd.exe /c "rd /s /q C:\#TEMP\test2"
cmd.exe /c "rd /s /q C:\#TEMP\test3"
Команда *Each должна быть помещена в новую строку, снова вызывающую cmd.exe.
Теперь этот сценарий можно подписать и запустить из PowerShell, выводя команды непосредственно в командную строку / cmd
.
Это гораздо более безопасный способ, чем запуск пакетных файлов!
Поделиться
Armand G.
19 мая 2015 в 10:01
9
Одним из решений было бы передать вашу команду из PowerShell в CMD. Выполните следующую команду, чтобы передать выходные данные команды notepad.exe
на CMD, который затем откройте приложение «Блокнот».
PS C:\> "notepad.exe" | cmd
Как только команда будет запущена в CMD, вы вернетесь к приглашению PowerShell и сможете продолжить выполнение сценария PowerShell.
Отображается сообщение о запуске CMD
Как указывает mklement0, этот метод показывает сообщение о запуске CMD. Если вы скопируете вывод с помощью описанного выше метода в другой terminal, то вместе с ним будет скопировано и сообщение запуска.
Поделиться
reelyard
09 августа 2018 в 09:42
- Все ли команды CMD доступны в powershell?
Аналогично другим вопросам, но все ли команды CMD можно использовать в Powershell? Короче говоря, могу ли я использовать окно Powershell для замены подсказок CMD и сделать так, чтобы и CMD, и Powershell работали в одном и том же terminal?
- Как запустить cmd запуск команды из powershell
Я хочу написать сценарий powershell, который настраивает среду разработки. Во-первых, я хочу запустить две командные подсказки, которые работают под управлением yarn run dev:client и yarn run dev:server соответственно. Я пробовал start cmd и Start-Process cmd -Argument yarn,run,dev:server , но не…
2
Для тех, кому может понадобиться эта информация:
Я выяснил, что вы можете в значительной степени запустить команду, которая находится в вашем PATH
, из сценария PS, и она должна работать.
Иногда вам, возможно, придется предварительно запустить эту команду с помощью cmd.exe /c
Примеры
Вызов git из сценария PS
Мне пришлось переупаковать клиент git
, завернутый в Chocolatey
(для тех, кто может не знать, это своего рода магазин приложений для Windows), который массово использует скрипты PS.
Я обнаружил, что, как только git
находится в PATH
, команды типа
$ca_bundle = git config --get http.sslCAInfo
будет хранить местоположение файла git
crt
в переменной $ca_bundle
.
В поисках приложения
Другой пример, представляющий собой комбинацию настоящего сообщения SO и этого сообщения SO, — это использование команды where
$java_exe = cmd.exe /c where java
будет хранить местоположение файла java.exe
в переменной $java_exe
.
Поделиться
avi.elkharrat
06 июля 2018 в 12:12
-1
Для запуска этой внешней программы необходимо использовать командлет Invoke-Command. Обычно это работает без усилий.
Если вам нужно несколько команд, вы должны использовать командлет Invoke-Expression с параметром -scriptblock
.
Поделиться
Tim Christin
24 июля 2014 в 18:22
Похожие вопросы:
Запуск удаленной команды cmd в PowerShell
Я загрузил несколько файлов на удаленный хост с PowerShell, по FTP. На этом хосте работает Windows 7 Embedded . Оказывается, есть EWF (Расширенный фильтр записи). Поэтому после перезагрузки…
Запуск powershell скриптов в emacs
Я установил пакет powershell в emacs. Я запустил powershell, используя M-x powershell. В окне powershell я могу запускать команды типа ls и т. д., Но не могу выполнять скрипты powershell. Я…
CMD: Как избежать этой команды powershell в cmd?
У меня есть следующая команда powershell: (gc c:\foo.xml -Raw) -replace ‘(?s)(.*)<bar baz=foo />’, ‘$1LOL’ | Out-File c:\foo.xml Я знаю, что эта команда powershell работает, когда я набираю ее…
Открывайте и запускайте команды на cmd из PowerShell
Подобный вопрос был задан несколько раз на SO, и обычно ответом является один из следующих: выполните ту же команду на PowerShell, потому что она тоже есть запустите cmd , а затем команды вызов cmd. ..
запуск powershell с помощью команды via cmd
как запустить программу с аргументами с помощью powershell через cmd 🙂 powershell -command & {get-service -computername server1,server2 -displayname ‘instance *’|where {$_.status -eq…
Все ли команды CMD доступны в powershell?
Аналогично другим вопросам, но все ли команды CMD можно использовать в Powershell? Короче говоря, могу ли я использовать окно Powershell для замены подсказок CMD и сделать так, чтобы и CMD, и…
Как запустить cmd запуск команды из powershell
Я хочу написать сценарий powershell, который настраивает среду разработки. Во-первых, я хочу запустить две командные подсказки, которые работают под управлением yarn run dev:client и yarn run…
Как установить переменную в cmd, которая является строкой из результата команды powershell?
Я хочу сохранить результат команды powershell в переменной cmd в виде строки : powershell -com (ls | select -Last 1).FullName . Как это сделать?
Преобразовать команду Powershell в CMD
У меня есть команда powershell, которую я хотел бы запустить эта команда powershell Get-AppxPackage -allusers mspaint | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register…
Запуск команды из командной строки CMD в Powershell
Новое в Powershell: Я должен запустить команду из командной строки CMD, потому что она не будет работать в Powershell. Я думаю, что понимаю, как запустить его из командной строки CMD с помощью…
Запуск командной строки (Cmd, PowerShell) от имени администратора в Windows 10
Существует множество задач, для которых необходимо выполнить команду с повышенными правами в командной строке операционной системе Windows. Опишем разные варианты запуска командной строки «Cmd» от имени администратора.
Самым простым способом является использование контекстного меню кнопки Пуск. Для этого достаточно нажать правую кнопку мыши на кнопке «Пуск» или нажать вместе клавиши WIN+X, и выбрать пункт Командная строка (администратор) в открывшемся меню:
Больше чем уверен, что у вас будет писать не Командная строка, а Windows PowerShell:
Все связано с тем, что Windows 10 в последующих обновлениях командную строку изменила на Windows PowerShell, и использует ее в качестве основной оболочки для выполнения команд в ОС.
Если выполнить в диалоговом меню «Выполнить» команду «Cmd» запуститься PowerShell. Но можно по-прежнему использовать командную строку, для этого достаточно открыть Параметры, потом Персонализация и Панель задач и отключить опцию «Заменить командную строку оболочкой Windows PowerShell в меню, которое появляется при щелчке правой кнопкой мыши по кнопке «Пуск» или при нажатии клавиш «Windows+X»:
PowerShell предлагает расширенные функциональные возможности, поэтому нет необходимости ее отключать.
Открыть командную строку можно также воспользовавшись поиском в меню «Пуск«. Введите в поле ввода команду «Cmd» и в результате поиска вызовите контекстное меню правой кнопкой мыши и нажмите «Запустить от имени администратора«:
Также можно командную строку запустить из Проводника. Данное решение очень удобно, поскольку командная строка откроется по определенному пути, из которого она была вызвана. Для этого перейдите в нужную папку и выберите меню «Файл» в Проводнике, наведите курсор мыши на пункт «Запустить Windows PowerShell» или нажмите стрелку в правой его части и выберите пункт «Запустить Windows PowerShell от имени администратора«:
Еще одним популярным способом открыть командную строку для Windows 10 является каталог «Windows PowerShell» в меню «Пуск«. В данном варианте можно выбрать разрядность программы. На 32 битных системах будет только 32 битный исполняющий файл.
Если вы хотите запустить PowerShell с правами администратора, то можно выбрать командную строку с правами администратора и открывшееся окно вводим «powershell» и жмем «Enter«. После этого командная строка будет работать полностью как Windows PowerShell.
PowerShell: используем Invoke-Command для запуска команд/скриптов на удаленных компьютерах
В этой статье мы рассмотрим особенности использования командлета Invoke-Command для удаленного выполнения команд и скриптов. Возможно запускать команды удаленно на одном компьютере, или параллельно на множестве компьютерах в вашей сети. Командлет Invoke-Command использует возможности удаленного управления, заложенные в PowerShell Remoting. PowerShell Remoting позволяет удаленно подключаться к PowerShell сессиям на компьютерах через службу WinRM (Windows Remote Management) через протокол Web Services for Management (WS-Management). Этот сервис дает возможность принимать команды Powershell и устанавливать сеансы.
Настройка WinRM для PowerShell Remoting
Для связи между компьютерами в PowerShell Remoting используется протокол HTTP (порт TCP/5985) или HTTPS (порт TCP/5986). По умолчанию используется протокол HTTP, но даже этот трафик шифруется с помощью ключа AES-256 (впрочем, есть угроза атак man-in-the middle). Возможна аутентификация через Kerberos (в домене) или NTLM.
На удаленных компьютерах, к которым вы планируете подключаться должен быть запущена служба WinRM. Проверить это можно так:
Get-Service -Name "*WinRM*" | fl
Если служба не запущена, запустите ее:
Enable-PSRemoting
WinRM has been updated to receive requests. WinRM service started. WinRM is already set up for remote management on this computer.
Данная команда запустит службу WinRM (установит автоматический запуск), выставит настройки winrm по-умолчанию и добавит исключение в Windows Firewall. Команда Enable-PSRemoting –Force включает WinRM без запроса пользователя.
Теперь к компьютеру можно подключиться удаленно через PowerShell Remoting.
Обратите внимание, что PowerShell Remoting по-умолчанию не работает, если тип вашей сети определен как общедоступная (Public). В этом случае команда вернет ошибку:
Set-WSManQuickConfig : ... WinRM firewall exception will not work since one of the network connection types on this machine is set to Public. Change the network connection type to either Domain or Private and try again.
Вам нужно изменить тип сети на частную (private), или использовать команду:
Enable-PSRemoting –SkipNetworkProfileCheck.
Также нужно включить правило Window Defender Firewall, которое разрешает доступ к WinRM в общедоступных сетях. Вы можете включить правило брандмауэра с помощью GPO или PowerShell:
Set-NetFirewallRule -Name 'WINRM-HTTP-In-TCP' -RemoteAddress Any
Чтобы проверить подключение к удаленному компьютер через PowerShell Remoting используется команда:
Test-WsMan compname1
Если у вас нет домена, или вы обращаетесь к компьютерам через PowerShell Remoting по IP адресам, в этом случае используется для аутентификации используется протокол NTLM. При использовании NTLM, при выполнении команду Invoke-Command появится ошибка:
[192.168.1.201] Connecting to remote server 192.168.1.201 failed with the following error message : The WinRM client cannot process the request. Default authentication may be used with an IP address under the following conditions: thetransport is HTTPS or the destination is in the TrustedHosts list, and explicit credentials are provided. Use winrm.cmd to configure TrustedHosts. Note that computers in the TrustedHosts list might not be authenticated. + FullyQualifiedErrorId : CannotUseIPAddress,PSSessionStateBroken
Для корректной работы NTLM аутентификации, на компьютере, с которого вы будете устанавливать подключения нужно выполнить дополнительные действия: выпустить SSL сертификат или добавить имя/IP адрес хоста в доверенные:
Set-Item wsman:\localhost\Client\TrustedHosts -value 192. 168.1.201
Либо можно разрешить подключение ко все компьютерам (не рекомендуется, т.к. один из главных недостатков NTLM – он не осуществляет проверку подлинности).
Set-Item wsman:\localhost\Client\TrustedHosts -value *
Аналогичные настройки нужно сделать на удаленных хостах.
Чтобы вывести список доверенных хостов, выполните команду:
Get-Item WSMan:\localhost\Client\TrustedHosts
Чтобы применить изменения, перезапустите службу WinRM:
Restart-Service WinRM
Удаленное выполнение PowerShell с помощью Invoke-Command
Командлет Invoke-Command позволяет выполнить команду на одном или нескольких удаленных компьютерах.
Например, для запуска одиночной команды на удаленном компьютере можно использовать такую команду:
Invoke-Command -ComputerName dc01 -ScriptBlock {$PSVersionTable.PSVersion}
Эта команда выведет в вашу консоль значение версии PowerShell, установленной на удаленном компьютере, имя которого указано в параметре -ComputerName
. В блоке -ScriptBlock {[cmdlet]}
указывается команда, которую нужно запусть на удаленном компьютере.
По-умолчанию команда, посланная через Invoke-Command выполняется на удалённом компьютере от текущего пользователя. Если нужно выполнить команду от имени другого пользователя, сначала нужно запросить учетные данные пользователя и сохранить их в переменную:
$cred = Get-Credential
Invoke-Command -ComputerName comp-buh3 -Credential $cred -ScriptBlock {Get-NetAdapter}
Эта PowerShell команда выведет список сетевых интерфейсов на удаленном компьютере:
Можно задать несколько команд в блоке ScriptBlock, их нужно разделить точкой с запятой. Например следующая команда выведет текущий часовой пояс и изменит его на другой:
Invoke-Command -Computername dc01 -ScriptBlock {Get-TimeZone| select DisplayName;Set-TimeZone -Name "Astrakhan Standard Time”}
Invoke-Command позволяет выполнять не только отдельные команды, но и запускать скрипты PowerShell. Для этого используется аргумент -FilePath
(вместо –ScriptBlock). При этом вы указываете путь к локальному PS1 файлу скрипта на вашем компьютере (вам не нужно копировать файл скрипт на удаленный компьютер):
Invoke-Command -ComputerName Server01 -FilePath c:\PS\Scripts\GetComputerInfo.ps1
Используем Invoke-Command для параллельного запуска команд на нескольких компьютерах
Командлет Invoke-Command можно использовать для параллельного выполнения команд на нескольких удаленных компьютерах.
В самом просто случае имена компьютеров, на которых нужно выполнить команды указываются через запятую:
Invoke-Command server1, server2, server3 -ScriptBlock {get-date}
Список компьютеров можно поместить в переменную (массив):
$servers = @(″server1″,″server2″,″server3″)
Invoke-Command -ScriptBlock { get-date} -ComputerName $servers
Или получить из текстового файла:
Invoke-Command -ScriptBlock {Restart-Service spooler} -ComputerName(Get-Content c:\ps\servers.txt)
Также можно получить список компьютеров в ADс помощью командлета Get-ADComputer из модуля AD PowerShell:
Чтобы выполнить команду на всех Windows Server в домене, исопльзуйте такой код:
$computers = (Get-ADComputer -Filter 'operatingsystem -like "*Windows server*" -and enabled -eq "true"').Name
Invoke-Command -ComputerName $computers -ScriptBlock {get-date} -ErrorAction SilentlyContinue
Если компьютер выключен, или недоступен, благодаря параметру SilentlyContinue скрипт не будет остановлен и продолжит выполнение на других компьютерах.
Чтобы понять с какого компьютера получены результаты, нужно использовать специальную переменную окружения PSComputerName.
$results = Invoke-Command server1, server2, server3 -ScriptBlock {get-date}
$results | Select-Object PSComputerName, DateTime
При запуске команды через Invoke-Command на нескольких компьютерах она выполняется параллельно. В Invoke-Command есть ограничение на максимальное количество компьютеров, которыми можно управлять одновременно (ограничение на количество одновременных PSSession). Оно определяется параметром ThrottleLimit (по умолчанию 32). Если вам нужно выполнить команду одновременно более чем на 32 компьютерах (например, на 128), используйте параметр –ThrottleLimit 128 (но это вызывает повышенную нагрузку на ваш компьютер).
Для запуска команд на удаленных компьютерах через Invoke-Command в фоновом режиме используется специальный атрибут –AsJob
. В этом случае результат выполнения команды не возвращается в консоль. Чтобы получить результаты нужно использовать командлет Receive-Job
.
Powershell запуск bat файла | Заметки программиста 1с
Автор: Admin
20 мая, 2019
Без воды и прочей ерунды.
Имеем самый обычный скрипт powershell (файл “.ps1”), допустим это будет скрипт из моей предыдущей заметки – “отправка почты через powershell”.
Что бы запустить его на компьютере, где включена политика безопасности запуска сценариев, в командной строке (cmd) необходимо впечатать следующую информацию:
powershell -executionpolicy RemoteSigned -file «C:\Temp1c\ps_FileReg1cServer.ps1»
| powershell -executionpolicy RemoteSigned -file «C:\Temp1c\ps_FileReg1cServer.ps1» |
- -executionpolicy RemoteSigned – устанавливает политику выполнения не подписанного скрипта только для текущего сеанса, при этом, политика безопасности выполнения скриптов PowerShell, прописанная в реестре, не будет изменена и останется прежней;
- -file “C:\Temp1c\ps_FileReg1cServer.ps1” – путь до нашего скрипта.
Что бы наш скрипт выполнялся в фоновом режиме, нужно добавить еще один параметр:
- -WindowStyle Hidden – запустить скрипт PowerShell в фоновом режиме.
powershell -executionpolicy RemoteSigned -WindowStyle Hidden -file «C:\Temp1c\ps_FileReg1cServer.ps1»
| powershell -executionpolicy RemoteSigned -WindowStyle Hidden -file «C:\Temp1c\ps_FileReg1cServer.ps1» |
Если все сделали верно, то наш скрипт выполнит свое предназначение. А если скрипт сработал из командной строки, то сработает и из bat-файла. Вообще “батник” можно сделать из самого обычного блокнота, но мне больше по душе notepad++, он сохранит сразу файл с нужным расширением и верной кодировкой:
Все готово! Теперь у нас есть батник, который выполняет созданный нами сценарий. С помощью него теперь можно легко создать задание, которое будет выполняться на компьютере по заданному расписанию (планировщик заданий в Windows).
Всем удачи и отличных батников!
Как запускать автоматические команды в командной строке Powershell
Если вы работаете с компьютером достаточно долго, вы в конечном итоге разработаете несколько рабочих процессов. Они могут быть простыми или сложными, но, скорее всего, вы получите несколько уникальных для вас. Чем больше вы делаете со своим компьютером, тем больше вероятность, что вы в конечном итоге будете использовать командную строку или более мощный PowerShell.
Иногда вы можете столкнуться с тем, что запускаете одни и те же несколько команд каждый раз, когда запускаете PowerShell или командную строку. Вместо этого, почему бы не сэкономить некоторое время и не запускать их автоматически при запуске?
Что можно делать с автоматическими командами?
Возможно, у вас есть рабочий процесс, который видит, как вы создаете группу файлов в каталог каждый раз, когда вы используете командную строку или PowerShell. С помощью автоматических команд вы можете очищать этот каталог каждый раз, когда открываете приглашение. Вы также можете использовать это для изменения каталога по умолчанию, в котором открывается командная строка или PowerShell.
Это всего лишь несколько примеров. Ваши собственные рабочие процессы будут определять, что вы будете запускать автоматически.
Настройка автоматических команд PowerShell
Для автоматического запуска команд в PowerShell отредактируйте свой профиль. Чтобы начать, проверьте, если у вас уже есть профиль. Откройте PowerShell и введите следующее:
Test-Path $ Profile
Это вернет либо True, либо False. Если значение false, выполните следующую команду:
New-Item –Path $ Profile –Type File –Force
Это перезапишет любой существующий профиль. Если предыдущая команда вернула True, вы, вероятно, не хотите запускать это. Если вы хотите начать все сначала, продолжайте.
Чтобы настроить автоматические команды, отредактируйте свой профиль. Используйте текстовый редактор по вашему выбору, но Блокнот установлен по умолчанию. Отредактируйте файл в Блокноте, введя следующее:
notepad $ Profile
Поместите здесь любые команды, которые вы можете запускать в PowerShell, и они будут автоматически запускаться при каждом его открытии. Если вы знакомы с Linux, это по сути то же самое, что и редактирование файла ~ / .bash_profile.
В большинстве случаев политика выполнения PowerShells запрещает запуск этого сценария. Это поможет сохранить вашу систему в безопасности. Чтобы разрешить запуск сценария, запустите PowerShell от имени администратора и выполните следующее:
Set-ExecutionPolicy RemoteSigned
Прочтите подсказку и введите Y, чтобы установить новую политику выполнения.
Настройка автоматического Команды командной строки
По сравнению с подходом в стиле Unix, который вы используете для автоматического запуска команд в PowerShell, командная строка гораздо более похожа на Windows. Есть два разных способа сделать это, в зависимости от того, как вы предпочитаете работать.
Способ 1. Реестр Windows
Как и в приведенном выше методе PowerShell, здесь указывается сценарий, запускаемый каждый раз. что вы запускаете командную строку. / t REG_EXPAND_SZ / d% USERPROFILE% init.cmd / f
Теперь создайте файл в папке своего профиля (обычно C: UsersUSERNAME) с именем auto.cmd.
Отредактируйте этот файл с помощью команд, которые вы хотите запускать автоматически при запуске командной строки.
Если вы решите, что вам больше не нужно это запускать автоматически, удалите раздел реестра. Просто запустите следующее:
reg delete HKCUSoftwareMicrosoftCommand Processor / v AutoRun
Метод 2: используйте ярлык
Если у вас простой случай и вы не хотите использовать реестр, вы можете использовать рабочий стол ярлык. Например, в Windows 10 вы можете найти командную строку в меню «Пуск», щелкните правой кнопкой мыши и выберите «Открыть местоположение файла». Скопируйте ярлык командной строки здесь и вставьте его на рабочий стол.
Щелкните правой кнопкой мыши на только что вставленном ярлыке и выберите «Свойства». Вы увидите раздел с путем к приложениям. Он будет выглядеть следующим образом:
C: Пользователи & lt, Ваше имя пользователя & gt, Desktopcmd.exe
Просто измените это, добавив -cmd / K, а затем команду или команды по вашему выбору. Вот пример:
C: Пользователи & lt, Ваше имя пользователя & gt, Desktopcmd.exe -cmd / K cls
Это просто откроет командную строку и затем очистит экран. Вы также можете объединять команды, используя && между ними. Вот еще один пример:
C: Пользователи & lt, Ваше имя пользователя & gt, Desktopcmd.exe -cmd / K cls && dir
Это очистит экран и затем отобразит содержимое каталога.
Заключение
В зависимости от того, что вам нужно сделать, один или несколько из вышеперечисленных методов должен работать для вас. Если вы в конечном итоге еще больше используете командную строку, посмотрите наше руководство по настройке внешнего вида.
Как запускать автоматические команды в командной строке Powershell
Просмотров сегодня: 228
Powershell запуск программы с параметрами
26 сентября 2019
Процессы – это один из основных компонентов Windows и чаще всего мы работаем с ними через Task Manager (диспетчер задач), но эта возможность становится весомее если мы используем команды по управлению процессами в Powershell. Основные команды по управлению запущенными задачами можно увидеть так:
Мы получим следующий вывод:
- Debug-Process – возможность мониторинга и отладки процессов. Для его работы нужно загрузить дополнительное ПО.
- Get-Process – получение в Powershell списка процессов.
- Start-Process – запуск процессов.
- Stop-Process – убивает (завершает) процесс.
- Wait-Process – ожидание окончания процесса.
Таких команд и вариантов их использования очень много. Например мы можем работать с процессами через WMI или использовать их в связке с мониторингом сетевых подключений через Get-NetTCPConnection.
Получив список процессов в Powershell можно увидеть что значения отображаются в Кб:
Изменить это можно через выражения:
В скрипте выше будут выводиться 5 свойств, но их намного больше. Посмотреть возможные свойства можно так:
Каждое это свойство можно вызвать так:
Можно вызвать все свойства всех процессов или по одному выбранному:
Кроме свойств есть еще методы .NET, которые выводятся без дополнительных ключей или с указанием:
Методы полезны тем, что ими можно воспользоваться не прибегая к дополнительным командам. Для примера так мы можем остановить процесс notepad (блокнот) тремя разными способами:
Методы .NET не всегда так очевидны, как командлеты поэтому к ним нужно прибегать с осторожностью.
При получении списка процессов есть параметр, который выводит путь откуда запущен процесс и версию файла:
В варианте выше у нас будет много не критичных ошибок:
- Get-Process : Не удалось перечислить информацию о версиях файла для процесса «svchost».
- Get-Process : Cannot enumerate the file version information of the «csrss» process.
Связано это с тем, что не все процессы в Powershell имеют версии и выполняется запрос несуществующего свойства. Этого можно избежать двумя путями, первый – это указать параметр, который будет игнорировать эти ошибки:
Или запросить информацию о конкретном процессе:
Ключ FileVersionInfo это три свойства: Product, FileVersion и Path каждый из которых можно вывести отдельно. Получим процессы в Powershell со свойством времени запуска и отсортируем их:
Если нужно выяснить когда и кто запустил процесс нужно добавить параметр IncludeUserName. В моем примере это два процесса:
Эти же команды можно выполнять удаленно. Во всех командах Powershell, где есть ключ ComputerName можно указать минимум один удаленный компьютер:
Выполняя удаленную команду вы можете получить две ошибки. Первую, если у вас не настроена возможность удаленного управления в Powershell. И вторая, если вы укажете ключ -IncludeUserName, почему-то он не работает совместно с ComputerName:
- Get-Process : Parameter set cannot be resolved using the specified named parameters.
Запуск процессов с Powershell Start-Process
На примере запуска блокнота команда выполняется так:
Если исполняемый файл находится в другом месте нужно указать путь:
Если в программа может принимать аргументы их так же можно добавить:
По умолчанию окно процесса разворачивается. Если хотите запустить свернутым, то добавьте ключ WindowStyle:
Ключ WindowStyle принимает 4 значения:
- minimized – свернутый вариант.
- hidden – скрытый режим.
- normal – обычный.
- maximized – полностью развернутый.
Добавив ключ NoNewWindow, в случае с tracert, команда выполнится в текущем окне:
Если мы запускаем процесс, который подразумевает вывод, но не хотим открывать окно программы, то нам понадобится перенаправить вывод команд. Для этого есть два ключа:
- RedirectStandardOutput – перенаправляет вывод
- RedirectStandardError – перенаправляет ошибки
- RedirectStandardInput – перенаправляет ввод
Воспользоваться этими ключами можно так:
Если нужно открыть файл в определенной программе, то это делается так:
Отмечу, что ни одна команда PS не позволяет запускать процессы в интерактивном сеансе пользователя (например открыть пользователю Excel). Если вы хотите использовать такой метод, то вам нужно использовать psexec от SysInternals либо помещать задачи в планировщик и выполнять оттуда.
Пример по работе с процессами в Powershell
Директории, откуда работает основная часть программ относятся к Windows и Program Files. Работа программ из Application Data, например, всегда подозрительна. Мы можем мониторить запуск процессов из этой директории. Нам нужно объявить переменные с путями, которые не будут вызывать подозрений и проверять путь процессов на вхождение:
Второй пример выполнения – это запуск всех файлов из папки. Обычно скрипты применяются через групповые политики в момент входа пользователя. Если таких скриптов 10, то мы можем поместить их в определенную папку и запускать из планировщика задач указывая только директорию и расширение запускаемого файла и перенаправлять ошибки в индивидуальный файл:
Обратите внимание, что все файлы с ошибками будут сохраняться с именем компьютеров на котором запущен скрипт. В каждом из скриптов я так же ставил знак *, это связано не с точным вхождением. Например в первом случае после пути C:Users* мы ожидаем еще символы и установив звездочку мы это указали. В случае Get-ChildItem ситуация похожая, но более подробно мы обсуждали в статье поиск файлов в Powershell.
Мы можем использовать поиск процессов не относящихся к производителям ПО, которые мы устанавливали на ПК пользователей. Для этого есть свойство Company. Не все объекты имеют имя компании, они связаны с задачами операционной системы:
По умолчанию мы получаем данные по CPU в секундах, но следующий скрипт вернет процент использования:
Далее эту функцию можно запускать на удаленных компьютерах:
Windows PowerShell — это обработчик скриптов .DLL , который внедрен в несколько узлов. Windows PowerShell is a scripting engine .DLL that’s embedded into multiple hosts. Самый распространенный запускаемый узел — интерактивная командная строка powershell.exe и интерактивная среда скриптов powershell_ise.exe. The most common hosts you’ll start are the interactive command-line powershell. exe and the Interactive Scripting Environment powershell_ise.exe.
Информацию о запуске Windows PowerShell® в Windows Server® 2012 R2, Windows® 8.1, Windows Server 2012 и Windows 8 см. в статье Общие задачи управления и навигации в Windows. To start Windows PowerShell® on Windows Server® 2012 R2, Windows® 8.1, Windows Server 2012, and Windows 8, see Common Management Tasks and Navigation in Windows.
В PowerShell Core есть переименованный двоичный файл PowerShell Core has renamed binary
PowerShell Core, или PowerShell, имеет версию 6 и выше с открытым исходным кодом и использует .NET Core. PowerShell Core, referred to as PowerShell, is version 6 and higher that’s open source and uses .NET Core. Поддерживаемые версии доступны в Windows, macOS и Linux. Supported versions are available on Windows, macOS, and Linux.
Начиная с PowerShell 6 двоичный файл PowerShell был переименован в pwsh.exe для Windows и pwsh для macOS и Linux. Beginning in PowerShell 6, the PowerShell binary was renamed pwsh.exe for Windows and pwsh for macOS and Linux. Вы можете запустить предварительную версию PowerShell с помощью pwsh-preview. You can start PowerShell preview versions using pwsh-preview. Дополнительные сведения см. в разделе Новые возможности в PowerShell Core 6.0 и Сведения о pwsh. For more information, see What’s New in PowerShell Core 6.0 and About pwsh.
Чтобы найти справку по командлетам и документацию по установке для PowerShell 7, воспользуйтесь следующими ссылками: To find cmdlet reference and installation documentation for PowerShell 7, use the following links:
Документ Document | Ссылка Link |
---|---|
Справка по командлетам Cmdlet reference | Обозреватель модулей PowerShell PowerShell Module Browser |
Установка в Windows Windows installation | Установка PowerShell Core в Windows Installing PowerShell Core on Windows |
Установка в macOS macOS installation | Установка PowerShell Core в macOS Installing PowerShell Core on macOS |
Установка в Linux Linux installation | Установка PowerShell Core в Linux Installing PowerShell Core on Linux |
Сведения о других версиях PowerShell см. в документации по использованию PowerShell. To view content for other PowerShell versions, see How to use the PowerShell documentation.
Запуск Windows PowerShell в более ранних версиях Windows How to Start Windows PowerShell on Earlier Versions of Windows
В этом разделе объясняется, как запустить Windows PowerShell и интегрированную среду скриптов Windows PowerShell (ISE) в Windows® 7, Windows Server® 2008 R2 и Windows Server® 2008. This section explains how to start Windows PowerShell and Windows PowerShell Integrated Scripting Environment (ISE) on Windows® 7, Windows Server® 2008 R2, and Windows Server® 2008. Кроме того, здесь поясняется, как включить дополнительный компонент Windows PowerShell ISE в Windows PowerShell 2.0 в ОС Windows Server® 2008 R2 и Windows Server® 2008. It also explains how to enable the optional feature for Windows PowerShell ISE in Windows PowerShell 2.0 on Windows Server® 2008 R2 and Windows Server® 2008.
Используйте любой из следующих методов для запуска установленной версии Windows PowerShell 3.0 или Windows PowerShell 4.0, где это возможно. Use any of the following methods to start the installed version of Windows PowerShell 3.0, or Windows PowerShell 4.0, where applicable.
- Нажмите кнопку Пуск, введите PowerShell и выберите Windows PowerShell. Click Start, type PowerShell, and then click Windows PowerShell.
- В меню Пуск выберите Пуск, Все программы, Стандартные, откройте папку Windows PowerShell и щелкните Windows PowerShell. From the Start menu, click Start, click All Programs, click Accessories, click the Windows PowerShell folder, and then click Windows PowerShell.
В командной строке At the Command Prompt
В cmd. exe, Windows PowerShell или интегрированной среде сценариев Windows PowerShell для запуска Windows PowerShell введите следующее: In cmd.exe, Windows PowerShell, or Windows PowerShell ISE, to start Windows PowerShell, type:
Можно также использовать параметры программы powershell.exe для настройки сеанса. You can also use the parameters of the powershell.exe program to customize the session. Дополнительные сведения см. в статье Справка по командной строке PowerShell.exe. For more information, see PowerShell.exe Command-Line Help.
С правами администратора (Запуск от имени администратора) With Administrative privileges (Run as administrator)
Нажмите кнопку Пуск, введите PowerShell, щелкните правой кнопкой мыши Windows PowerShell и выберите пункт Запуск от имени администратора. Click Start, type PowerShell, right-click Windows PowerShell, and then click Run as administrator.
Запуск интегрированной среды сценариев Windows PowerShell в более ранних версиях Windows How to Start Windows PowerShell ISE on Earlier Releases of Windows
Используйте один из следующих методов для запуска интегрированной среды сценариев Windows PowerShell. Use any of the following methods to start Windows PowerShell ISE.
- Нажмите кнопку Пуск, введите Интегрированная среда сценариев и выберите Интегрированная среда сценариев Windows PowerShell. Click Start, type ISE, and then click Windows PowerShell ISE.
- В меню Пуск выберите Пуск, Все программы, Стандартные, откройте папку Windows PowerShell и щелкните Интегрированная среда сценариев Windows PowerShell. From the Start menu, click Start, click All Programs, click Accessories, click the Windows PowerShell folder, and then click Windows PowerShell ISE.
В командной строке At the Command Prompt
В cmd.exe, Windows PowerShell или интегрированной среде сценариев Windows PowerShell для запуска Windows PowerShell введите следующее: In cmd.exe, Windows PowerShell, or Windows PowerShell ISE, to start Windows PowerShell, type:
С правами администратора (Запуск от имени администратора) With Administrative privileges (Run as administrator)
Нажмите кнопку Пуск, введите Интегрированная среда сценариев, щелкните правой кнопкой мыши Интегрированная среда сценариев Windows PowerShell и выберите пункт Запуск от имени администратора. Click Start, type ISE, right-click Windows PowerShell ISE, and then click Run as administrator.
Включение интегрированной среды сценариев Windows PowerShell в более ранних версиях Windows How to Enable Windows PowerShell ISE on Earlier Releases of Windows
При использовании Windows PowerShell 4.0 и Windows PowerShell 3.0 интегрированная среда сценариев Windows PowerShell по умолчанию включена во всех версиях Windows. In Windows PowerShell 4.0 and Windows PowerShell 3.0, Windows PowerShell ISE is enabled by default on all versions of Windows. Если она еще не включена, Windows Management Framework 4.0 или Windows Management Framework 3.0 включает ее. If it isn’t already enabled, Windows Management Framework 4.0 or Windows Management Framework 3.0 enables it.
При использовании Windows PowerShell 2.0 интегрированная среда сценариев Windows PowerShell по умолчанию включена в Windows 7. In Windows PowerShell 2.0, Windows PowerShell ISE is enabled by default on Windows 7. В Windows Server 2008 R2 и Windows Server 2008 эта функция является дополнительной. However, on Windows Server 2008 R2 and Windows Server 2008, it’s an optional feature.
Чтобы включить интегрированную среду сценариев Windows PowerShell для Windows PowerShell 2.0 в Windows Server 2008 R2 или Windows Server 2008, выполните указанные ниже действия. To enable Windows PowerShell ISE in Windows PowerShell 2.0 on Windows Server 2008 R2 or Windows Server 2008, use the following procedure.
Включение интегрированной среды сценариев Windows PowerShell Windows PowerShell (ISE) To enable Windows PowerShell Integrated Scripting Environment (ISE)
- Запустите диспетчер сервера. Start Server Manager.
- Щелкните Компоненты и выберите Добавить компоненты. Click Features and then click Add Features.
- В меню «Выберите компоненты» щелкните интегрированную среду сценариев Windows PowerShell. In Select Features, click Windows PowerShell Integrated Scripting Environment (ISE).
Запуск 32-разрядной версии Windows PowerShell Starting the 32-Bit Version of Windows PowerShell
При установке Windows PowerShell на 64-разрядном компьютере в дополнение к 64-разрядной версии устанавливается Windows PowerShell (x86) — 32-разрядная версия Windows PowerShell. When you install Windows PowerShell on a 64-bit computer, Windows PowerShell (x86), a 32-bit version of Windows PowerShell is installed in addition to the 64-bit version. При открытии Windows PowerShell по умолчанию запускается 64-разрядная версия. When you run Windows PowerShell, the 64-bit version runs by default.
Однако в некоторых случаях нужно запустить Windows PowerShell (x86) , например при использовании модуля, которому требуется 32-разрядная версия, или при удаленном подключении к 32-разрядному компьютеру. However, you might occasionally need to run Windows PowerShell (x86), such as when you’re using a module that requires the 32-bit version or when you’re connecting remotely to a 32-bit computer.
Для запуска 32-разрядной версии Windows PowerShell воспользуйтесь любой из следующих процедур. To start a 32-bit version of Windows PowerShell, use any of the following procedures.
Как избежать распространенных ошибок при запуске исполняемых файлов в оболочке PowerShell
Оболочка Windows PowerShell построена с использованием интерактивного интерфейса командной строки (CLI). Одна из основных задач интерфейса CLI – предоставить пользователям возможность запускать программы. Однако я не раз сталкивался с такими вопросами как: «Необходимо запустить такую-то утилиту командной строки в оболочке PowerShell. Я безуспешно пытался различными способами заключить параметры в кавычки. Как заставить программу корректно работать в оболочке PowerShell?»
Выполнение исполняемого файла с корректной расстановкой кавычек в оболочке Cmd.exe не представляет трудности, ведь процесс Cmd.exe не проводит дополнительный синтаксический анализ командной строки с исполняемым файлом. Если вы пишете сценарий для оболочки Cmd.exe (то есть пакетный файл), запускаемый как исполняемый файл, то можете увидеть, как будет выглядеть командная строка исполняемого файла, просто добавив к этой командной строке префикс Echo, который дает оболочке Cmd.exe команду не выполнять полученную строку, а вывести ее на экран. Это простая и эффективная техника отладки.
Однако в оболочке PowerShell задача немного усложняется, поскольку синтаксический анализатор командной строки здесь сложнее, чем в оболочке Cmd.exe. Команда Echo в оболочке PowerShell на самом деле является псевдонимом команды Write-Host, поэтому вы не можете задействовать ее в оболочке PowerShell для просмотра полной командной строки, как в оболочке Cmd.exe. В оболочке PowerShell отсутствует встроенный механизм просмотра полной командной строки для исполняемого файла.
Чтобы обойти данное ограничение, я написал короткую программу для командной строки, ShowArgs.exe. Цель этой программы — вывести на экран переданные ей параметры командной строки без анализа или интерпретации. Заменив ShowArgs.exe программу, которую вы пытаетесь запустить (но сохраняя параметры вашей программы), вы сможете увидеть именно те параметры командной строки, которые будет использовать оболочка PowerShell.
Используя приложение ShowArgs.exe (доступно для загрузки на нашем сайте), я покажу, как справляться с наиболее распространенными проблемами типа «как правильно заключить выражение в кавычки» при запуске исполняемых файлов в оболочке PowerShell. Для примеров, приведенных в этой статье, я создал каталог с именем C:Sample Tools и скопировал файл ShowArgs.exe в него.
Запуск исполняемых файлов в оболочке PowerShell
Для запуска исполняемого файла в оболочке PowerShell достаточно просто указать его имя. Точно так же запускаются исполняемые файлы в оболочке Cmd.exe. На экране 1 приведены два примера запуска приложения ShowArgs.exe напрямую в оболочке PowerShell. На экране 1 для запуска приложения ShowArgs.exe требуется префикс «.», так как оболочка PowerShell по умолчанию не запускает исполняемые файлы из текущего каталога.
Экран 1. Запуск исполняемого файла в PowerShell |
Если имя исполняемого файла, путь к нему или его полное имя не содержат пробелы, использовать оператор вызова (&) необязательно (см. экран 2). В остальных случаях он необходим.
Экран 2. Использование оператора вызова в некоторых случаях не является обязательным |
Однако вы не можете использовать оператор & для вызова командной строки целиком. На экране 3 показана эта распространенная ошибка. Первая команда на экране 3 завершается с ошибкой, потому что строка, заключенная в кавычки, после оператора вызова не является именем файла (о чем и сообщает система). Вторая команда на экране 3 исправляет эту ошибку. В этой команде в кавычки помещается только имя исполняемого файла, а параметры выносятся в конец команды.
Экран 3. Общие ошибки при использовании оператора вызова |
Как показано на экране 4, вы можете сохранить результаты выполнения исполняемого файла в переменную. Первая команда на экране запускает файл Find.exe с параметром «/?» и сохраняет результат в переменную $findHelp. Вторая команда показывает, что переменная содержит массив, а последняя выводит на экран содержимое массива. Если программа возвращает только одну строку, переменная будет содержать отдельную строку, а не массив.
Экран 4. Сохранение результатов выполнения исполняемого файла в переменную |
Командная строка исполняемого файла: заключение параметров в кавычки
Если параметр содержит пробелы, необходимо заключать его в кавычки. Сами по себе кавычки не являются частью параметра, а, следовательно, вы можете заключать в кавычки параметры, которые не содержат пробелы, но в таких случаях использование кавычек не обязательно.
Следующие инструкции могут помочь избежать проблем при указании параметров для исполняемых файлов в оболочке PowerShell. Все примеры в данном разделе используют приложение ShowArgs.exe с предполагаемыми параметрами. Я рекомендую запустить эти примеры, чтобы увидеть, какие именно параметры командной строки будет использовать оболочка PowerShell.
Инструкция 1. В случаях, когда вы указываете параметр непосредственно в командной строке и этот параметр содержит пробелы, необходимо только добавить кавычки. Например:
Эта команда работает именно так, как ожидается. Оболочка PowerShell видит, что строка, заключенная в кавычки, содержит пробел, и заключает ее в кавычки при передаче параметра исполняемому файлу. Добавлять дополнительные кавычки к строке не требуется. Другими словами, не нужно использовать один из приведенных ниже вариантов:
Оболочка PowerShell удалит лишние кавычки таким образом, чтобы у параметра был только один набор кавычек. А значит, дополнительные кавычки не выполняют никакой функции, а лишь затрудняют прочтение команды. Если параметр не содержит пробелов, использование кавычек не обязательно.
Инструкция 2. Если в качестве параметра исполняемого файла вы хотите передать переменную, то можете просто поместить переменную в командную строку с исполняемым файлом. Ниже приведен пример:
Если содержимое переменной включает пробелы, оболочка PowerShell автоматически добавит кавычки. Как и в случае с предыдущим примером, нет необходимости добавлять дополнительные кавычки.
Инструкция 3. Если параметр использует аргумент, связанный с параметром (то есть параметр и его аргумент должны писаться слитно, без разделения пробелом), вы можете заключить в кавычки параметр целиком, вместе с его аргументом. Для тех, кто не понимает разницы между параметром и аргументом, поясню, что параметр – это выражение, которое указывается после команды и управляет ее поведением, в то время как аргумент предоставляет дополнительную информацию о параметре. Вы также можете заключить в кавычки лишь аргумент параметра. Например, следующие команды эквивалентны друг другу:
Аналогичная ситуация возникает, если между параметром и аргументом находится разделительный символ, например двоеточие (:) или знак равенства (=). Другими словами, следующие две команды эквивалентны:
Следующие две команды также эквивалентны:
Как и в предыдущих примерах, добавление дополнительных кавычек не обязательно.
Инструкция 4. Если вы используете переменную в качестве аргумента параметра, не требуется добавлять дополнительные кавычки, даже если содержимое переменной включает пробелы. Например, все перечисленные ниже команды будут работать корректно:
Инструкция 5. Если параметр начинается с дефиса (-), аргумент параметра связан с параметром (не отделен пробелом) и аргумент параметра хранится в переменной, необходимо либо поставить перед дефисом в начале параметра знак обратной кавычки (`) либо взять в кавычки параметр целиком или только его связанный аргумент. Например, следующая команда не будет работать корректно:
Вместо нее необходимо использовать одну из команд:
Это правило применяется, когда параметр и аргумент либо связаны напрямую (например, -name$name) или через символ (такой как: или =), стоящий между ними. Однако оно неприменимо, если аргумент параметра не хранится в переменной. Например, следующие две команды эквивалентны:
Если вы не знаете наверняка, командную строку какого вида оболочка PowerShell будет использовать, замените имя исполняемого файла приложением ShowArgs.exe, и вы увидите именно те параметры командной строки, которые оболочка PowerShell будет использовать для запуска исполняемого файла.
Получение кода завершения исполняемого файла
Оболочка Cmd.exe использует динамическую переменную окружения ERRORLEVEL для хранения кода завершения последнего запущенного исполняемого файла. Оболочка PowerShell для этих целей использует переменную $LASTEXITCODE. Обычно можно проверить, возникли ли ошибки при выполнении исполняемого файла, выяснив, равна ли переменная $LASTEXITCODE нулю.
Формирование командной строки исполняемого файла, использующей логические операторы
Если требуется сформировать командную строку, зависящую от логических операторов, вам может потребоваться дополнительная гибкость. Например, рассмотрим сценарий Test.ps1 в листинге 1.
Если вы запустите сценарий Test1.ps1 с параметром -Test, оболочка PowerShell выполнит команду:
Однако на самом деле необходимо, чтобы оболочка PowerShell выполнила команду:
Другими словами, мы хотим, чтобы оболочка PowerShell интерпретировала параметр $params как командную строку целиком, а не как отдельный строковый параметр исполняемого файла.
Одно решение заключается в использовании команды Start-Process (см. листинг 2). У команды Start-Process есть параметр -ArgumentList, который представляет собой массив параметров командной строки. Оболочка PowerShell автоматически не расставляет кавычки для этих параметров, так что вам придется вставить кавычки там, где нужно.
У использования команды Start-Process есть ряд недостатков:
- Если вы хотите перехватить выходные данные исполняемого файла, необходимо задействовать параметр -RedirectStandardOutput. Сценарий Test3.ps1 в листинге 3 иллюстрирует этот подход. Данный сценарий создает временный файл, запускает исполняемый файл (перенаправляя выходные данные во временный файл) и возвращает выходные данные с помощью команды Get-Content.
- Команда Start-Process не обновляет переменную $LASTEXITCODE.
Чтобы добавить еще немного гибкости, вы можете задействовать функцию Start-Executable, описанную в листинге 4. Функция Start-Executable не использует временный файл и обновляет переменную $LASTEXITCODE. Параметр -ArgumentList данной функции работает аналогично параметру -ArgumentList команды Start-Process.
Как в Windows 10 создать ярлык для запуска скриптов PowerShell
Наряду с традиционной командной строкой в Windows используется консоль PowerShell, позволяющая обрабатывать различные сценарии, в том числе готовые, представленные в виде скриптов PS1. Только вот в отличие от скриптов командной строки CMD и BAT, файлы PS1 при их запуске двойными кликом открываются в Блокноте. Если же вы принудительно назначите для их открытия PowerShell, скрипты перестанут исполняться.
Чтобы запустить скрипт PS1, необходимо кликнуть по нему правой кнопкой мыши и выбрать в контекстном меню «Выполнить с помощью PowerShell».
Но есть другая проблема — политика выполнения скриптов по умолчанию может помешать запуску файла PS1 из контекстного меню.
Естественно, политику можно изменить, разрешив запуск скриптов «напрямую», но делать этого без особой нужны не рекомендуется, так как изменение политики выполнения скриптов снизит уровень безопасности вашей системы.
Есть другое решение.
Если вы пользуетесь командным файлом PS1 постоянно, создайте на него ярлык и пропишите в нём временное разрешение на исполнение скрипта.
Команда выполнения в поле расположения объекта будет выглядеть примерно так:
powershell.exe -noexit -ExecutionPolicy Bypass -File D:\Hello.ps1
Первая часть команды — это разрешение на запуск, вторая — это полный путь к самому файлу скрипта.
Всё, отныне запускать командный файл PS1 можно простым двойным кликом по ярлыку, при этом он не станет выдавать запросов.
Такой способ запуска PS1-скриптов имеет еще одно маленькое преимущество: независимо от того, есть ли в конце кода скрипта pause или нет, окно консоли будет оставаться открытым пока вы его не закроете руками.
Это может быть полезно, когда нужно просмотреть результаты выполнения командного файла.
Invoke-Expression (Microsoft.PowerShell.Utility) — PowerShell | Документы Microsoft
Выполняет команды или выражения на локальном компьютере.
В этой статье
Синтаксис
Вызов-выражение
[-Команда]
[<Общие параметры>]
Описание
Командлет Invoke-Expression
оценивает или выполняет указанную строку как команду и возвращает
результаты выражения или команды.Без Invoke-Expression
, строка, отправленная по команде
строка возвращается (отображается эхом) без изменений.
Выражения оцениваются и выполняются в текущей области. Для получения дополнительной информации см.
about_Scopes.
Осторожно
Примите разумные меры предосторожности при использовании командлета Invoke-Expression
в сценариях. Когда используешь
Invoke-Expression
для запуска команды, которую вводит пользователь, убедитесь, что команда безопасна для запуска
перед запуском. В общем, лучше всего создавать свой сценарий с предопределенными параметрами ввода,
вместо того, чтобы разрешать ввод произвольной формы.
Примеры
Пример 1. Вычислить выражение
$ Command = "Get-Process"
$ Command
Get-Process
Вызов выражения $ Command
Обрабатывает NPM (K) PM (K) WS (K) VM (M) CPU (s) Id ProcessName
------- ------ ----- ----- ----- ------ - -----------
296 4 1572 1956 20 0,53 1348 AdtAgent
270 6 1328 800 34 0,06 2396 усл.
67 2 620 484 20 0.22 716 ati2evxx
1060 15 12904 11840 74 11,48 892 куб.смExec
1400 33 25280 37544223 38,44 2564 коммуникатор
...
Этот пример демонстрирует использование Invoke-Expression
для оценки выражения. Без
Invoke-Expression
, выражение печатается, но не оценивается.
Первая команда присваивает значение Get-Process
(строка) переменной $ Command
.
Вторая команда показывает результат ввода имени переменной в командной строке. PowerShell
перекликается с строкой.
Третья команда использует Invoke-Expression
для оценки строки.
Пример 2: Запуск сценария на локальном компьютере
Invoke-Expression -Команда "C: \ ps-test \ testscript.ps1"
«C: \ ps-test \ testscript.ps1» | Вызов-выражение
Эти команды используют Invoke-Expression
для запуска сценария TestScript.ps1 на локальном компьютере. В
две команды эквивалентны. Первый использует параметр Command , чтобы указать команду для запуска.
Второй использует оператор конвейера ( |
) для отправки командной строки в Invoke-Expression
.
Пример 3: Выполнить команду в переменной
$ Command = 'Get-Process | где {$ _. cpu -gt 1000} '
Вызов выражения $ Command
В этом примере выполняется командная строка, сохраненная в переменной $ Command
.
Командная строка заключена в одинарные кавычки, потому что она включает переменную $ _
, которая
представляет текущий объект. Если бы он был заключен в двойные кавычки, переменная $ _
будет заменено его значением перед сохранением в переменной $ Command
.
Пример 4: Получить и запустить командлет Пример справки
$ Cmdlet_name = "Get-EventLog"
$ Example_number = 1
$ Example_code = (Get-Help $ Cmdlet_name).examples.example [($ Example_number-1)]. код
Вызов-выражение $ Example_code
Эта команда извлекает и запускает первый пример в разделе справки по командлету Get-EventLog
.
Чтобы запустить пример другого командлета, измените значение переменной $ Cmdlet_name
на имя
командлета. И измените переменную $ Example_number
на номер примера, который вы хотите запустить. В
команда не выполняется, если номер примера недействителен.
Параметры
-Команда
Задает команду или выражение для выполнения.Введите команду или выражение или введите переменную, которая
содержит команду или выражение. Параметр Command является обязательным.
Тип: | Строка |
Позиция: | 0 |
Значение по умолчанию: | Нет |
Принять конвейерный ввод: | Истинный |
Входы
Система.Строка или PSObject
Вы можете передать объект, представляющий команду, в Invoke-Expression
.
Используйте автоматическую переменную $ Input
для представления входных объектов в команде.
Выходы
PSObject
Возвращает результат, созданный вызванной командой (значение команды
параметр).
Банкноты
В большинстве случаев вы вызываете выражения с помощью оператора вызова PowerShell и добиваетесь тех же результатов.Оператор вызова — более безопасный метод. Для получения дополнительной информации см.
about_Operators.
Как запустить сценарий PowerShell из командной строки и др.
Если вы новичок в языке сценариев PowerShell и хотите научиться запускать сценарий PowerShell, вы попали в нужное сообщение в блоге. В этом блоге будет руководство, посвященное распространенным способам запуска скриптов и некоторым проблемам, которые могут возникнуть.
Предварительные требования
Эта статья представляет собой пошаговое руководство по запуску PowerShell на локальном компьютере.Если вы хотите продолжить, убедитесь, что у вас есть следующие предварительные условия, прежде чем начать эту статью.
- Компьютер с Windows 10 с правами администратора.
- Windows PowerShell версии 5 или более поздней. Вы также можете использовать PowerShell v7 . В этом руководстве основное внимание будет уделено Windows PowerShell, поскольку в операционной системе Windows она уже есть.
- Любой редактор текстовых файлов
Работа с политикой выполнения
Если вы впервые пытаетесь выполнить сценарий Windows PowerShell, вы можете столкнуться с типичной проблемой.PowerShell, вероятно, вернет сообщение об ошибке, в котором говорится, что сценарий «не может быть загружен, потому что выполнение сценариев отключено в этой системе».
Связано: Политики выполнения PowerShell: понимание и управление
PS>. \ GetServices.ps1
Файл C: \ Temp \ GetServices.ps1 не может быть загружен, поскольку в этой системе отключен запуск сценариев. Для получения дополнительной информации см. About_Execution_Policies по адресу
https: /go.microsoft.com/fwlink/? LinkID = 135170.
В строке: 1 символ: 1
. \ GetServices.ps1
~~~ ~~ CategoryInfo: SecurityError: (:) [], PSSecurityException
FullyQualifiedErrorId: неавторизованный доступ
PowerShell возвращает указанное выше сообщение об ошибке при попытке запустить PowerShell с политикой выполнения, установленной на Restricted , Remote Signed или All Signed .
Запрещено
Restricted — это политика, установленная по умолчанию для клиентских компьютеров Windows. Если вы впервые используете PowerShell, ваша политика по умолчанию, вероятно, будет ограничивать все сценарии.
В терминале все еще можно выполнять отдельные команды, но не файл сценария. Ограничение распространяется на любой файл, заканчивающийся на .ps1xml
, .psm1
или .ps1
.
Без ограничений
Unrestricted позволяет запускать любой сценарий, однако он предупреждает вас перед выполнением, если сценарий загружен из Интернета. Эта политика обычно используется по умолчанию для любых устройств, отличных от Windows.
Удаленная подпись
Политика
Remote Signed позволяет запускать любой сценарий, имеющий (а) цифровую подпись или (б) любой сценарий, написанный на вашем локальном компьютере с подписью или без нее.
Если сценарий загружен из Интернета и не подписан, вам потребуется разблокировать файл. Вы можете сделать это, щелкнув файл правой кнопкой мыши и выбрав Properties . Или вы можете использовать командлет Unblock-File
PowerShell для этого конкретного файла сценария.
Использование удаленной подписанной политики было бы идеальным вариантом при запуске сценария, загруженного из Интернета.
Все подписано
Все подписанные требует, чтобы все сценарии были подписаны цифровой подписью надежным издателем.Сюда входят сценарии, загруженные из Интернета и написанные локально на вашем компьютере.
Изменение политики выполнения PowerShell
Чтобы изменить политику выполнения:
- Откройте Windows PowerShell с помощью Запуск от имени администратора , чтобы убедиться, что у вас есть самые высокие разрешения на внесение изменений в политику.
Связано: Как запустить PowerShell от имени администратора
Поиск PowerShell в меню «Пуск»
2. В открытом состоянии выполните следующую команду PowerShell, чтобы установить политику выполнения вашего компьютера.Политика выполнения, как описано выше, может быть одного из трех различных типов. В этом руководстве используется полезная, но все же безопасная политика выполнения RemoteSigned .
Поскольку в этом руководстве предполагается, что вы загрузили из Интернета файл сценария GetServices.ps1 , установите для политики выполнения значение RemoteSigned .
PS> Set-ExecutionPolicy 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 .
PS> компакт-диск C: \ Temp \
3. Запустите сценарий, используя запись с точкой (.
).PowerShell — это оболочка, которая также ищет имена команд. Чтобы отличить команду PowerShell от сценария, необходимо поставить перед сценарием точку. Эта точка представляет текущий каталог.
PS>. \ GetServices.ps1
Запуск сценария PowerShell из командной строки
Если вы не можете или не хотите запускать скрипты через консоль PowerShell, вы также можете сделать это с помощью старой доброй командной строки (командной строки).
Чтобы запускать сценарии через командную строку, необходимо сначала запустить движок ( powershell.exe ), а затем передайте ему путь к сценарию в качестве параметра.
Вы можете запускать сценарии с параметрами в любом контексте, просто указав их при запуске исполняемого файла PowerShell, например
powershell.exe -Parameter 'Foo' -Parameter2 'Bar'
.
Открыв cmd.exe , вы можете выполнить сценарий PowerShell, как показано ниже. В этом примере выполняется механизм и передается ему путь сценария C: \ Temp \ GetServices.ps1 .
Обратите внимание, что в приведенном ниже примере используется полный путь для запуска сценария.Вам придется это сделать, если папки где-то нет в вашем PATH.
CMD> C: \ Program Files \ WindowsPowerShell \ powershell.exe "C: \ Temp \ GetServices.ps1"
Ниже приведено удобное видео на YouTube, в котором рассматривается выполнение сценария с помощью командного файла, который выполняет cmd.exe.
Использование PowerShell ISE
Если вы создаете свои собственные сценарии или редактируете другие сценарии, вы, вероятно, будете использовать редактор сценариев, такой как PowerShell ISE или, возможно, Visual Studio (VS) Code .Поскольку ISE поставляется с Windows, давайте сосредоточимся на этом методе в этом руководстве.
Для вызова сценария через ISE:
- Перейдите в меню «Пуск», найдите PowerShell ISE и откройте его.
Поиск PowerShell ISE в меню «Пуск»
2. Щелкните File → Откройте и найдите свой сценарий.
Открыть скрипт с помощью меню «Файл»
3. Открыв сценарий, нажмите зеленую кнопку запуска, чтобы запустить сценарий. Эта кнопка вызовет скрипт во встроенном терминале PowerShell внизу.
Запуск сценария с помощью PowerShell ISE
Выходные данные примера сценария
Сценарий PowerShell иногда может возвращать выходные данные. Это происходит, когда скрипт, который вы выполняете, построен для возврата объектов , который является фундаментальным компонентом PowerShell.
Связано: Назад к основам: Понимание объектов PowerShell
Если вы запустите пример сценария GetServices.ps1 , вы увидите следующее. Этот сценарий запускает командлет Get-Service
, который возвращает все службы, установленные на вашем локальном компьютере с Windows.
PS>. \ GetScripts.ps1
Листинг компьютерных услуг
Название статуса DisplayName
------ ---- -----------
Запуск aakore Acronis Agent Core Service
Остановлено время выполнения активации агента AarSvc_1b668d_1b668d
Запуск AcronisActivePr ... Служба активной защиты Acronis
Запуск AcronisCyberPro ... Служба киберзащиты Acronis
Запуск службы 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
Связанные
Преобразование сценариев cmd в PowerShell
Недавно я перенес много сценариев из cmd (.bat
или .cmd
) в PowerShell ( .ps1
). В этом посте я покажу все различия, которые я видел во время миграции. Этот список не является исчерпывающим, поскольку он содержит только случаи, с которыми я столкнулся в перенесенных скриптах.
# Зачем использовать PowerShell вместо cmd?
PowerShell имеет много преимуществ по сравнению с cmd:
- Обнаружение: PowerShell упрощает обнаружение его функций благодаря автозаполнению, командам
Get-Command
иGet-Help
. - Согласованность. Согласованность PowerShell — одно из ее основных преимуществ. Например, если вы научитесь использовать командлет
Sort-Object
, вы можете использовать эти знания для сортировки вывода любого командлета. Вам не нужно изучать разные процедуры сортировки каждого командлета. - Интерактивная среда и среда сценариев: PowerShell объединяет интерактивную оболочку и среду сценариев. PowerShell может получить доступ к инструментам командной строки, COM-объектам и библиотекам классов .NET.
- Ориентация объекта: PowerShell основан на объекте, а не на тексте.Результатом команды является объект. Вы можете отправить выходной объект через конвейер другой команде в качестве входных данных.
- Кросс-платформенность: PowerShell работает в Windows, Linux и Mac.
Если у вас все еще есть сомнения по поводу использования PowerShell вместо cmd, Рич Тернер ясно объясняет, что будущее за PowerShell:
Cmd находится в режиме обслуживания. Его задача — сохранить обратную совместимость с древними и неизменными скриптами. Вот и все. Период. Его не следует использовать для интерактивной работы оболочки.
PowerShell — это будущее.
Rich Turner , старший менеджер программ, консоль Windows и командная строка
# Существует 2 варианта PowerShell
Существует 2 варианта PowerShell:
- PowerShell (
powershell.exe
) компонент Windows. Эта версия работает только в Windows и не получит никаких новых функций. - PowerShell Core (
pwsh.exe
) доступен на GitHub. Этот вариант работает в Windows, Linux и Mac.Это версия, над которой работает Microsoft.
Если у вас есть выбор, используйте последнюю версию pwsh
. Вы можете найти его на GitHub: Загрузите PowerShell .
Примечание: Суффикс «Core» был удален в последней версии, новое имя — PowerShell 7
# различия cmd / PowerShell
## Expand environment variables
echo% test%
echo $ env: test
Если имя переменной содержит сложные символы, необходимо использовать фигурные скобки ( $ {env: name}
)
echo% ProgramFiles (x86)%
echo $ {env: ProgramFiles (x86)}
Поведение отличается, когда вы используете переменную среды в качестве аргумента.cmd разверните переменные среды, а затем выполните командную строку. Итак, вам нужно избегать аргументов.
$ test = "a b"
sample.exe $ test # 1 аргумент
$ test = @ ("a", "b") # Объявить массив
sample.exe $ test # 2 аргумента
## Установить переменную среды
set test = abc
$ env: test = "abc"
Set-Item -Path Env: test -Value "abc"
set / p test =
$ env: test = Get-Content MyFilename.txt -First 1 # Чтение только первой строки для соответствия поведению cmd
Вы можете установить переменные среды для текущего пользователя или компьютера, используя C #:
# Получить значение
$ path = [Environment] :: GetEnvironmentVariable ('PSModulePath', 'Machine') # Пользователь или компьютер
# Установить значение
[Environment] :: SetEnvironmentVariable ("PSModulePath", $ newpath, 'Machine')
Обратите внимание, что если переменная используется только в сценарии, вы можете использовать локальные переменные вместо переменных среды
$ test = "abc "# переменная действительна только в текущем скрипте
echo $ test
## Список переменных среды
set
Get-ChildItem env:
## Получить текущий каталог
echo% cd%
echo $ pwd
## Получить каталог сценария
echo% ~ dp0
echo $ PSScriptRoot
## Получить код выхода
ping 127.0.0.1
эхо% errorlevel%
echo $ lastexitcode
Если предыдущая команда является командлетом, вы можете использовать $?
, чтобы узнать, успешна ли команда. $?
возвращает логическое значение.
PS> Get-ChildItem
PS> echo $?
True
Документация:
## Выполнить исполняемый файл в текущем каталоге
Чтобы выполнить файл, который находится в текущем каталоге, вам нужно добавить к имени префикс . \
myexe.exe
. \ myexe.exe
## echo имеет другое поведение
В cmd echo
печатает аргумент как есть. В PowerShell echo
— это псевдоним для Write-Output
, который печатает каждый аргумент в строке.
$> эхо а б в
а б в
PS> эхо a b c
а
б
c
PS> эхо "a b c"
а б в
PS> echo a b c | Строка соединения-разделитель ""
a b c
Документация:
## Перенаправление вывода в файл
Синтаксис тот же, вы можете использовать команду > filename
, за исключением того, что перед >
ping 127 должен быть пробел.0.0.1> output.txt
ping 127.0.0.1> output.txt # Перед ">" должен быть пробел
пинг 127.0.0.1 >> output.txt
ping 127.0.0.1 >> output.txt # Перед ">>" должен быть пробел
Вы также можете использовать командлет Out-File
, который предоставляет дополнительные параметры, такие как кодирование файла:
. В PowerShell вы можете использовать префикс
ping 127.0. 0.1> output.txtping 127.0.0.1 | Out-файл output.txtпинг 127.0.0.1 >> output.txtПинг 127.`
для любого символа, чтобы избежать его. Экранирующий символ позволяет:
-
Удалить особое значение символа
PS> $ def = "variable" PS> Write-Host "Значение` $ def: $ def " Значение $ def: переменная PS> Write-Host abc` | def abc | def PS> Write-Host "abc`" def " abc "def PS> Write-Host "abc``def" abc`def
Для представления специального символа
-
`0
: null -
` a
: Alert -
`b
: Backspace -
` e
: Escape -
`f
: Подача формы -
` n
: Новая строка -
` r
: Возврат каретки -
` t
: Горизонтальная табуляция -
` v
: Вертикальная табуляция -
` u {x}
: Управляющая последовательность Unicode (`u {2195}
представляет собой символ стрелки вверх-вниз (↕))
-
Документация:
## Аргументы цитирования
Правила цитирования не совпадают в cmd и PowerShell.В основном потому, что в PowerShell есть понятие выражения и особое поведение для аргументов, начинающихся с тире –
. В режиме аргументов каждое значение обрабатывается как расширяемая строка, если оно не начинается с одного из следующих специальных символов: знак доллара ( $
), знак at ( @
), одинарная кавычка ( '
), двойные кавычки. знак ( "
) или открывающая скобка ( (
). В этих случаях значение обрабатывается как выражение и оценивается.
PS> эхо 2 + 2
2 + 2
PS> эхо (2 + 2)
4
PS> эхо "(2 + 2)"
(2 + 2)
PS> $ a = 2 + 2
PS> echo $ a
4
Аргументы, начинающиеся с тире, имеют особые правила синтаксического анализа, поэтому иногда нужно избегать их:
PS> echo arg = abc.txt # 1 аргумент
arg = abc.txt
PS> echo -arg = abc.txt # 2 аргумента
-arg = abc
.текст
PS> echo "-arg = abc.txt"
-arg = abc.txt
Параметр –
- это специальный параметр, указывающий, что после этого параметры не следует связывать.
PS> Запись-вывод -InputObject
Запись-вывод: отсутствует аргумент для параметра «InputObject». Укажите параметр типа System.Management.Automation.PSObject и повторите попытку.
PS> Запись-Вывод - -InputObject
-InputObject
Символ остановки анализа ( -%
) предписывает PowerShell воздерживаться от интерпретации ввода как команд или выражений PowerShell. Когда он встречает символ остановки анализа, PowerShell обрабатывает оставшиеся символы в строке как литерал.Единственная интерпретация, которую он выполняет, - это замена значений переменных среды, использующих стандартную нотацию Windows, например % USERPROFILE%
. Символ остановки анализа действует только до следующего символа новой строки или конвейера. Например, две следующие команды являются эквивалентами:
PS> icacls X: \ VMS / grant Dom \ HVAdmin: `(CI`)` (OI`) F
PS> icacls X: \ VMS -% / grant Dom \ HVAdmin: (CI) (OI) F
Документация:
## call command
Оператор call позволяет запускать команды, которые хранятся в переменных и представлены строками или блоками сценария.
вызов% exe%
& $ env: exe
Это также необходимо, если команда должна быть процитирована:
PS> & ". \ имя сценария с пробелами.ps1"
Документация:
## вызов сценария bat
Вы можете вызвать сценарий bat с помощью cmd.exe
:
myscript.bat
cmd.exe / c myscript.bat
папка / myscript.bat
cmd.exe / c folder \ myscript.bat # необходимо использовать обратную косую черту в Windows
Обратите внимание, что переменные среды, заданные в сценарии bat, не будут доступны на узле PowerShell после выполнения сценария.
## если блок
установить a = 0
, если% a% == 0 (
истинное эхо
) остальное (
эхо ложное
)
$ a = 0
если ($ a -eq 0)
{
эхо верно
}
еще
{
эхо ложное
}
Вы можете заменить , если определено VARIABLE
, на командлет Test-Path
:
, если определено TEST (действие) else (действие)
if (Test-Path env: TEST) {действие} else {действие}
если не определено ТЕСТ (действие)
if (-not (Test-Path env: TEST)) {action}
Документация:
## Объединение команд с помощью && и ||
Эти 2 оператора позволяют комбинировать команды.Они поддерживаются начиная с PowerShell 7 . Если вы используете старую версию, вам необходимо заменить их операторами if
.
# Test-Command '1' || Тестовая команда '2'
Тест-команда «1»; if (-not $?) {Test-Command '2'}
# Test-Command '1' && Test-Command '2'
Тест-команда «1»; if ($?) {Test-Command '2'}
Документация:
## Управление строками
Для управления строками можно использовать любые функции .NET. Итак, вы можете подстроки, заменить и т. Д.используя методы System.String. *
.
эхо% var: ~ 0,3%
echo $ var.Substring (0, 3)
echo% var: ~ -3%
echo $ var.Substring ($ var.Length - 3)
set test = 123meziantou
echo% test: 123 = Hello%
$ test = "123meziantou"
echo $ test.Replace ("123", "Hello")
Документация:
## Подождите несколько секунд
В cmd обычно используется ping 127.0.0.1
подождать несколько секунд. В PowerShell вы можете использовать командлет Sleep
:
Start-Sleep -Seconds 5
## Проверить, доступен ли компьютер
Вы можете проверить доступность удаленного компьютера перед выполнением действия с помощью Командлет Test-Connection
:
if (Test-Connection -TargetName Server01 -Quiet)
{
Новый-PSSession -ComputerName Server01
}
# Заменить exe на командлет
По возможности следует заменять специфичные для Windows исполняемые файлы кроссплатформенными и более удобочитаемыми командлетами.
-
rmdir / s / q C: \ MyFolder
→Remove-Item C: \ MyFolder -Recurse -Force
-
del / s / q file.txt
→Remove-Item file.txt -Recurse -Force
-
sc
→Get-Service
/Start-Service
/Stop-Service
/New-Service
/Remove-Service
/ и т. Д. -
taskkill
→Stop- Процесс
-
xcopy
→Copy-Item
У вас есть вопросы или предложения по поводу этой публикации? Свяжитесь со мной!
Windows PowerShell vs.CMD: В чем разница?
Раньше загрузка тогда передовой IBM 8086 с дискеты привела вас к зеленому текстовому экрану с мигающим курсором на знакомой подсказке C: \>. Взлом boot.ini и config.sys для запуска моих игр был моим первым введением в программирование.
В конце концов, этот C: \> был заменен красивым графическим интерфейсом и загрузкой с жесткого диска. Эта командная строка (CMD) жила десятилетиями. Только недавно CMD получил обновление или замену на PowerShell, приложение оболочки, которое Microsoft представила в Windows 7.
Получите бесплатный видеокурс PowerShell и Active Directory Essentials
Я бы порекомендовал это как новым, так и опытным пользователям PowerShell. Создание инструмента AD - отличный учебный опыт.
CMD хорошо служил нам долгое время, но PowerShell похож на прямой переход от паровых двигателей к автономным автомобилям с батарейным питанием.
Командная строка Windows
Командная строка Windows - также известная как CMD - это исходная оболочка для операционной системы Microsoft DOS.CMD была оболочкой по умолчанию до сборки 14791 Windows 10, когда Microsoft сделала PowerShell параметром по умолчанию. CMD - один из последних остатков исходной операционной системы MS-DOS, которую Microsoft заменила
.
Windows PowerShell
Windows PowerShell - это новая оболочка Microsoft, которая сочетает в себе старую функциональность CMD с новым набором команд сценариев / командлетов со встроенными функциями системного администрирования. Командлеты PowerShell позволяют пользователям и администраторам автоматизировать сложные задачи с помощью сценариев многократного использования.Системные администраторы значительно экономят время, автоматизируя задачи администрирования с помощью PowerShell.
PowerShell против CMD
PowerShell против CMD - все равно что сравнивать яблоки с кумкватами. Они совершенно разные, несмотря на иллюзию того, что команда «dir» работает одинаково в обоих интерфейсах.
PowerShell использует командлеты, которые представляют собой автономные программные объекты, которые предоставляют базовые параметры администрирования внутри Windows. До PowerShell системные администраторы перемещались по графическому интерфейсу, чтобы найти эти параметры, и не было возможности повторно использовать рабочий процесс щелчка по меню для изменения параметров в большом масштабе.
PowerShell использует каналы для объединения командлетов и обмена данными ввода / вывода так же, как и другие оболочки, например bash в Linux. Каналы позволяют пользователям создавать сложные сценарии, которые передают параметры и данные от одного командлета к другому. Пользователи могут создавать повторно используемые сценарии для автоматизации или вносить массовые изменения с переменными данными - например, списком серверов.
Одна из (многих) удобных функций PowerShell - это возможность создавать псевдонимы для различных командлетов. Псевдонимы позволяют пользователю настраивать свои собственные имена для различных командлетов или сценариев, что упрощает переключение между разными оболочками: ls - это команда linux bash, которая отображает объекты каталога, такие как dir. команда.В PowerShell и ls, и dir являются псевдонимами для командлета Get-ChildItem.
Когда использовать PowerShell
Для системных администраторов и других ИТ-служб лучше всего подойдет PowerShell. В CMD не осталось ни одной команды, которой нет в PowerShell, а PowerShell включает командлеты для любой функции администрирования, которая может вам понадобиться. Сторонние поставщики программного обеспечения расширяют PowerShell с помощью настраиваемых командлетов, таких как NetApp PowerShell Toolkit, который управляет Data ONTAP.
Знание
PowerShell может быть важным фактором при приеме на работу или даже требованием к должности, поэтому стоит инвестировать в этот навык.
Чтобы начать свой путь к PowerShell, ознакомьтесь с этим руководством, чтобы узнать основы - и узнайте, как автоматизировать задачи Active Directory с помощью нашего бесплатного курса PowerShell от Адама Бертрама, MVP Microsoft PowerShell (совет: используйте код «блог») .
Как запустить сценарий PowerShell
Как вы, наверное, знаете, PowerShell - это последняя оболочка операционной системы (ОС) Microsoft Windows и инструмент создания сценариев .Оболочка - это программа, которая предоставляет пользовательский интерфейс для ОС. Когда мы говорим о PowerShell, под «оболочкой» обычно понимается его интерфейс командной строки (CLI) . CLI - это базовый пользовательский интерфейс, который позволяет вам вводить команду (или серию команд) в приглашении. Когда вы нажимаете Enter, оболочка выполняет действие, затем интерфейс командной строки снова отображает запрос и ждет другой команды. (См. Также « Начало работы с PowerShell »).
Сначала интерфейс командной строки может показаться не таким эффективным, как графический интерфейс пользователя (GUI), потому что вам нужно вводить команды, проверяя орфографию, интервалы, кавычки и т. Д.Однако командные оболочки всегда поддерживали некоторую форму пакетного выполнения, которая также называется сценарием . Сценарий - это просто список команд, хранящийся в текстовом файле, который можно выполнить по запросу. PowerShell не исключение - хотя PowerShell - отличный интерфейс командной строки, он становится еще более гибким с использованием сценариев. Сценарий PowerShell - это просто текстовый файл с расширением .ps1, который содержит список команд, которые должен выполнить PowerShell.
Однако философия , защищенная по умолчанию в PowerShell, предотвращает запуск всех сценариев, поэтому двойной щелчок сценария PowerShell в проводнике Windows не выполнит его.Кроме того, PowerShell не выполняет сценарии из текущего каталога. Хорошая новость заключается в том, что вам не нужно быть гуру PowerShell, если все, что вам нужно, - это понимать, как запускать сценарии PowerShell. Просто выполните следующие действия:
- Установите Windows PowerShell.
- Установить политику выполнения PowerShell.
- Запустите сценарии PowerShell, помня о нескольких важных деталях.
1. Установите Windows PowerShell
Если у вас Windows 7 или новее, вам не нужно устанавливать PowerShell, потому что он предустановлен вместе с ОС.Если вы используете Windows Vista или более раннюю версию, вам необходимо загрузить и установить PowerShell. Для Windows XP и Windows Server 2003 также требуется Microsoft .NET Framework 2.0. (Для PowerShell 2.0 требуется .NET Framework 2.0 SP1.) Вы можете найти ссылки на загружаемые файлы на веб-странице «Сценарии с Windows PowerShell ».
2. Установите политику выполнения PowerShell
Как я упоминал ранее, PowerShell по умолчанию защищен. Первое следствие этой философии состоит в том, что PowerShell не будет выполнять сценарии, пока вы явно не дадите ему на это разрешение.PowerShell имеет четыре политики выполнения, которые регулируют выполнение скриптов:
- Запрещено. PowerShell не запускает никаких скриптов. Это политика выполнения PowerShell по умолчанию.
- AllSigned. PowerShell будет запускать только сценарии, подписанные цифровой подписью. Если вы запускаете скрипт, подписанный издателем, которого PowerShell раньше не видел, PowerShell спросит, доверяете ли вы издателю скрипта.
- RemoteSigned. PowerShell не будет запускать сценарии, загруженные из Интернета, если у них нет цифровой подписи, но сценарии, загруженные не из Интернета, будут выполняться без запроса. Если у сценария есть цифровая подпись, PowerShell запросит вас перед запуском сценария от издателя, которого он раньше не видел.
- Без ограничений. PowerShell игнорирует цифровые подписи, но все равно будет запрашивать вас перед запуском скрипта, загруженного из Интернета.
Для отображения текущей политики выполнения необходимо ввести команду
Get-ExecutionPolicy
в командной строке PowerShell (которая будет выглядеть как PS C: \>, если текущее местоположение - C: \).Чтобы установить политику выполнения, введите команду
Политика Set-ExecutionPolicy
, где политика - одно из имен политики (например, RemoteSigned).
Для установки политики выполнения требуются права администратора. В Vista и более поздних версиях вы должны запускать PowerShell с повышенными разрешениями, если вы уже являетесь администратором и включен контроль учетных записей пользователей (UAC). Чтобы запустить PowerShell с повышенными разрешениями в Vista и более поздних версиях, щелкните его ярлык правой кнопкой мыши и выберите Запуск от имени администратора , как показано на экране 1.
Рисунок 1
Если вы вошли в систему XP или Windows 2003 как обычный пользователь, вы можете щелкнуть правой кнопкой мыши ярлык PowerShell, выбрать Запуск от имени и ввести учетные данные администратора.
Одна вещь, которую важно понимать в отношении политик выполнения, - это значение фразы «загружено из Интернета». В Windows эта фраза означает, что файл имеет альтернативный поток данных, который указывает, что файл был загружен из зоны Интернета. Чтобы разблокировать сценарий, щелкните правой кнопкой мыши файл.ps1, выберите «Свойства», затем нажмите кнопку «Разблокировать», как показано на рисунке 2. Моя эксклюзивная веб-статья « Работа с диалоговыми окнами предупреждений безопасности XP SP2 » предоставляет более полную информацию об альтернативном потоке данных и о том, как Windows использует его.
Я рекомендую установить для политики выполнения значение RemoteSigned, поскольку эта политика выполнения позволяет писать и запускать сценарии на вашем собственном компьютере без необходимости подписывать их сертификатом для подписи кода. Вам по-прежнему будет запрещено запускать скрипт, загруженный из Интернета, если вы сначала явно не разблокируете его.Чтобы установить политику выполнения RemoteSigned, введите в командной строке PowerShell следующую команду:
Set-ExecutionPolicy RemoteSigned
Microsoft также предоставляет административный шаблон (файл .adm) для управления политикой выполнения PowerShell через объект групповой политики (GPO), который можно загрузить с веб-страницы « Administrative Templates for Windows PowerShell ».
3. Запустите сценарии PowerShell
После настройки политики выполнения можно запускать сценарии PowerShell.Чтобы запустить сценарий, откройте окно PowerShell, введите имя сценария (с расширением .ps1 или без него), а затем параметры сценария (если есть) и нажмите Enter. В соответствии с философией безопасности PowerShell по умолчанию, двойной щелчок файла .ps1 в проводнике Windows открывает сценарий в Блокноте, а не выполняет сценарий с помощью PowerShell.
При запуске сценариев PowerShell необходимо помнить о нескольких деталях, первая из которых касается новой опции в PowerShell 2.0. Когда вы щелкаете правой кнопкой мыши файл .ps1, PowerShell 2.0 предоставляет параметр Run with PowerShell , но я не рекомендую его использовать по двум причинам:
- При использовании этого параметра окно PowerShell закрывается сразу после завершения сценария. Поскольку большинство сценариев PowerShell не записываются для приостановки по завершении, вы пропустите любой вывод, который предоставляет сценарий, и любые ошибки, которые могут возникнуть в сценарии.
- Многие сценарии PowerShell используют параметры командной строки, которые управляют их поведением.При использовании этой опции нет возможности вводить параметры.
По этим причинам я рекомендую вместо этого запускать сценарии PowerShell из командного окна PowerShell.
Еще одна важная деталь, которую следует учитывать при запуске сценариев, заключается в том, что PowerShell не запускает их из текущего каталога. Вместо этого он использует путь. (Путь - это разделенный запятыми список каталогов, хранящийся в переменной среды Путь, в котором Windows ищет исполняемые файлы.) Если вы вводите имя сценария (но не его местоположение), а сценарий не найден в Пути, PowerShell не запустит его, даже если сценарий находится в текущем каталоге.Это еще один аспект философии безопасности PowerShell по умолчанию. PowerShell не запускает сценарии в текущем каталоге, чтобы предотвратить сценарий, в котором злоумышленник помещает поддельный сценарий в текущий каталог с тем же именем, что и обычно используемая команда. Если PowerShell сначала запустит скрипты из текущего каталога, пользователь может случайно запустить мошенническую программу. Игнорируя скрипты в текущем каталоге, PowerShell позволяет избежать этой потенциальной проблемы.
Чтобы явно запустить сценарий из текущего каталога, вы должны добавить к имени сценария префикс.\ или ./, чтобы PowerShell понимал, что вы собираетесь запускать его из текущего местоположения. Например, предположим, что каталог C: \ Scripts отсутствует в Path, а следующий сценарий с именем HelloWorld.ps1 существует в C: \ Scripts:
.
Write-Host "Привет, мир" Read-Host "Нажмите Enter, чтобы продолжить"
Если вы вводите эти команды в командной строке PowerShell
PS C: \> Установить расположение C: \ Scripts PS C: \ Scripts> HelloWorld
PowerShell не запускает HelloWorld.ps1, даже если текущее местоположение - C: \ Scripts. (Обратите внимание, что я включил подсказки, которые вы увидите, в демонстрационных целях. Вы не будете вводить эти подсказки при вводе команд.) Вместо второй команды вам нужно ввести одну из следующих команд:
PS C: \ Scripts>. \ HelloWorld PS C: \ Скрипты> ./HelloWorld
Поскольку PowerShell не выполняет сценарии из текущего каталога, я рекомендую вам создать каталог, добавить этот каталог в свой путь и сохранить в нем сценарии PowerShell.Так вы сможете избежать каких-либо проблем.
Последняя деталь, которую вы должны помнить при запуске сценариев PowerShell, заключается в том, что вам нужно обрабатывать пробелы иначе, чем в Cmd.exe. Если путь к сценарию содержит пробелы, вы должны заключить его в двойные кавычки ("), чтобы запустить его в Cmd.exe. Например, в Cmd.exe вы должны ввести:
C: \> «C: \ Program Files \ Scripts \ HelloWorld»
для запуска сценария с именем C: \ Program Files \ Scripts \ HelloWorld.cmd. Указание пути к сценарию для его запуска не будет работать в PowerShell, потому что наличие двойных кавычек заставляет PowerShell оценивать путь как выражение, а не команду.Если вы просто наберете имя сценария в кавычках, как в Cmd.exe, PowerShell предполагает, что путь является строкой, и выведет путь вместо запуска сценария. Чтобы обойти это, вы можете использовать оператор вызова PowerShell & для выполнения строки в кавычках как команды, как в
.
PS C: \> & "C: \ Program Files \ Scripts \ HelloWorld"
Поскольку вы должны использовать оператор & и кавычки для выполнения сценария с пробелами в имени пути, я рекомендую вам не использовать пробелы в именах сценариев при создании собственных сценариев.Кроме того, если вы создаете каталог для хранения скриптов, не забудьте также оставить пробелы в его имени.
Выполнение сценариев PowerShell стало проще
Вам не нужно быть экспертом по PowerShell или языку сценариев, чтобы легко запускать сценарии PowerShell. Просто выполните эти три шага, и вы сразу же запустите сценарии PowerShell.
Подробнее см. « Administrative Reporting with PowerShell », июнь 2012 г.
см.exe по сравнению с PowerShell в Windows: удобный справочник
Щелчок, щелчок, щелчок… всегда при щелчке! Если вам нужен более быстрый способ делать много вещей в Windows, вы хотите узнать об интерфейсах командной строки (CLI) CMD.exe и PowerShell. Но какой из них использовать? Давайте посмотрим на них обоих, на их сильные и слабые стороны, а также на некоторые ключевые команды, которые вы можете использовать снова и снова.
CMD также известен как командная оболочка. Фактически, люди чаще всего называют это просто «командой».Это инструмент в Windows, который позволяет пользователям выполнять задачи, вводя буквы и слова. Для более опытных читателей вы можете вспомнить это как команды MS-DOS. MS-DOS поступает от M icro S от D isk O от S ystem. Эти команды хранятся в файле под названием command.com , спрятанном глубоко внутри Windows. Вы также обнаружите, что некоторые команды в командной оболочке вызывают небольшие программы. Откройте проводник Windows и перейдите в папку C: \ Windows \ System32 .Посмотрите на все приложения там. Большинство из них имеют те же имена, что и многие другие команды. Вы увидите tracert.exe, taskkill.exe, whoami.exe и другие.
Если вы знаете различные команды и знаете, как их использовать, зачастую это гораздо более быстрый способ выполнить работу. Но будь осторожен! Это также мощный инструмент, который может вызвать серьезные проблемы в Windows, если вы сделаете ошибку или не знаете, что делаете.
PowerShell - это утилита командной строки, а также целый язык сценариев, созданный на базе Microsoft.NET платформы. В нем есть все возможности и возможности CMD, а также многое другое. PowerShell позволяет взаимодействовать со всеми аспектами Windows, а также может взаимодействовать с широким спектром программ и серверов Microsoft. Вы можете работать с такими вещами, как Microsoft Office, Exchange Server и Microsoft SQL Server. Помимо этого, вы также можете взаимодействовать с базами данных сторонних разработчиков, такими как MySQL, IBM DB2 и другими. Вы даже можете создавать свои собственные программы с графическим интерфейсом пользователя. Это чрезвычайно мощный инструмент, который теперь также имеет открытый исходный код и может использоваться на компьютерах Mac и Linux.
Это делается с помощью командлетов, произносимых как «командлеты». Как следует из части слова «lettes», командлеты - это небольшие команды. В CMD команды представляют собой автономные программы, поскольку мы показали вам, что они являются исполняемыми приложениями в Windows. Командлеты больше похожи на строительные блоки. Каждый из них выполняет определенную функцию, но их можно собрать вместе для создания полной команды или сценария.
Итак, в чем разница между CMD и PowerShell?
Между ними существует множество технических различий, и, если хотите, вы можете изучить их подробнее.Но важно знать, что PowerShell гораздо менее ограничен, чем CMD. Думайте о PowerShell как о том, кем CMD хотел быть, когда вырастет. Если CMD - это многофункциональный инструмент, то PowerShell - это целый гараж, полный инструментов.
Когда вы начнете сравнивать команды и командлеты, вы также заметите, что легче понять, что может делать командлет PowerShell. Некоторые команды непонятны, если вы не выучите их и не будете использовать повторно. Назначение таких команд, как CHKDSK , RMDIR и TRACERT , не так очевидно для обычного человека.Но командлеты следуют соглашению об именах глагол-существительное . Первая часть сообщает вам, какое действие будет выполнять командлет, а вторая часть сообщает вам, для чего он будет это делать. Например, любой может сказать, что командлет Get-Help каким-то образом поможет вам.
Почему мне следует использовать CMD вместо PowerShell?
Это вопрос личного выбора. Фактически, команды CMD можно запускать из среды PowerShell, поэтому существует много совпадений.Иногда вы можете просто захотеть сделать что-то действительно простое, например, зайти в CMD и проверить IP-адрес вашего компьютера или принудительно удалить файл. Но если вы хотите делать это неоднократно, лучше написать сценарий PowerShell. Помните правило автоматизации. Если вам нужно сделать что-то более двух раз, автоматизируйте это.
Как получить доступ к CMD и Powershell?
Самый простой способ - щелкнуть строку поиска в меню «Пуск» и начать вводить cmd для командной оболочки или powershell для PowerShell.Вот как это выглядит для cmd .
Для командной оболочки оно будет указано как приложение командной строки в Windows 10. В более ранних версиях Windows оно будет указано как cmd.exe. Открыв его, вы увидите черное окно с белым текстом, как на изображении ниже. См. Строку C: \ Users \ Brian> Стрелка называется командной строкой. Вы часто будете получать инструкции по использованию CMD, в которых говорится: «Введите это в командной строке…». Это то место, о котором идет речь.
Однако вы можете заметить несколько вариантов для PowerShell. Одно из них - это просто приложение Windows PowerShell, а другое - интегрированная среда сценариев Windows PowerShell (ISE).
Если вы запускаете одну или три команды, то приложение PowerShell вполне подойдет. Просто поразительно, вы можете использовать команды CMD в PowerShell, но вы не можете использовать PowerShell в CMD. Приложение PowerShell в открытом состоянии выглядит так:
Наиболее распространенные команды в CMD.exe
Используйте эти команды в командной строке, нажмите клавишу ВВОД, чтобы использовать их.
HELP - Список общих команд
CD - Отображает имя или изменяет текущий каталог.
CHDIR - отображает имя или изменяет текущий каталог.
CHKDSK - проверяет диск и отображает отчет о состоянии.
CLS - Очищает экран. Удобно после выполнения кучи команд.
КОПИЯ - Копирует один или несколько файлов в другое место.
DEL - Удаляет один или несколько файлов.
DIR - отображает список файлов и подкаталогов в каталоге.
DISKPART - отображает или настраивает свойства раздела диска.
EXIT - Выход из программы CMD.EXE (интерпретатор команд) .MKDIR Создает каталог.
ПОДРОБНЕЕ - Выводит вывод по одному экрану за раз. Полезно, когда команда возвращает много информации и просто продолжает прокручиваться.
MOVE - перемещает один или несколько файлов из одного каталога в другой.
ПЕРЕИМЕНОВАТЬ - переименовывает файл или файлы.
RMDIR - Удаляет каталог.
SYSTEMINFO - отображает свойства и конфигурацию машины.
TASKLIST - отображает все запущенные в данный момент задачи, включая службы.
TASKKILL - Завершить или остановить запущенный процесс или приложение.
Наиболее распространенные командлеты в PowerShell
Get-Help - показывает справку по командлету, с которым вы работаете. Пример: Get-Help Get-Member расскажет, как использовать командлет Get-Member.
Get-Member - показывает, что находится внутри элемента, например каталога или массива.
Get-Process - показывает все процессы, запущенные на вашем компьютере прямо сейчас.
Get-Service - Показывает все службы на вашем компьютере и их текущее состояние.
Get-Item - показывает вам информацию о конкретной вещи. Пример: Get-Item C: \ Users покажет вам кое-что о каталоге Users, например разрешения на него и время последнего изменения.
Get-ChildItem - показывает вам все, что находится внутри вещи: например: Get-ChildItem C: \ Users покажет вам все файлы и папки непосредственно внутри каталога Users.
Может показаться, что это немного, но если вы измените глагол в этих командлетах, у вас будет целая куча командлетов для работы. Измените Get на New на Get-Item , и вы сможете создать новый элемент. Теперь измените его на . Удалите , и вы сможете удалять элементы.Измените Get-Process на Stop-Process , и вы сможете завершить определенный процесс. Затем измените его на Start , и вы можете начать процесс. Вы уловили идею.
Бонусный параметр PowerShell
-WhatIf может быть самым важным параметром, который вы когда-либо использовали. Он позволяет запускать командлет, фактически ничего не меняя. Он буквально заставляет PowerShell запускать сценарий «Что, если», чтобы дать вам представление о том, что произойдет, когда вы запустите командлет по-настоящему.Если вы когда-либо беспокоились, что можете вызвать проблемы в PowerShell, всегда добавляйте параметр -WhatIf.
Взгляните на список файлов на изображении ниже.
Допустим, мы хотим удалить кучу файлов с помощью командлета Remove-Item cc_2017 * , но мы не совсем уверены, что произойдет. Поместите в конец параметр -WhatIf , нажмите Enter, и мы узнаем!
Это говорит нам, что эта команда удалила бы все эти файлы.Если все в порядке, мы можем удалить -WhatIf из командлета и удалить эти файлы. Если это не так, мы можем изменить командлет и снова протестировать его.
CMD или PowerShell?
Теперь, когда вы знаете больше об обоих, вы знаете, что это не вопрос "или-или". Вы можете использовать и то, и другое, сейчас самое время использовать одно или другое, а иногда вы даже можете использовать их в одном скрипте! Продолжайте изучать каждый из них, и вскоре вы действительно получите полный контроль над своим компьютером.
запустить сценарий powershell из cmd
В поле «Программа / сценарий» введите путь к исполняемому файлу PowerShell.Однако если запускаемый вами сценарий содержит функции более поздней версии PowerShell, клиент, на котором вы запускаете сценарий, должен запускать эту версию PowerShell. Я просто добавил функцию в строку 1 сценария и выполнил свою команду полного запуска в строке 2. Если вы попробуете мою, то увидите, что вам не предлагается ввести дополнительные учетные данные, а просто создается новая оболочка с повышенными привилегиями. 54. Попробуйте следующее: powershell ... Когда дело доходит до управления удаленными компьютерами с помощью PowerShell, у вас есть три основных варианта.Разница здесь в том, что я просто запускал его с повышенными правами, а не от имени другого пользователя. Эти режимы влияют на выполнение сценария Powershell в CMD. На клиентах Configuration Manager должен быть запущен клиент выпуска 1706 или более поздней версии, чтобы запускать сценарии. И да, можно! Это все, что нужно для использования VBScript для запуска сценария Windows PowerShell. Как выполнить его из командной строки или из файла cmd? Другими словами, эта команда запустит Windows PowerShell и выполнит сценарий C: \ Scripts \ Test.ps1: exe-i-s powershell. RemoteSigned - запускает скрипт, созданный на том же устройстве через CMD. Есть ли у кого-нибудь опыт запуска сценариев PowerShell из сценария setupcomplete.cmd во время установки Windows? Присоединяйся сейчас. Предполагая, что у вас есть оба сценария в одном каталоге и hello.ps1 - это первый сценарий, а goodbuy.ps1 - второй. Перед вызовом сценария я установил неограниченную политику выполнения, но когда он доходит до строки, вызывающей пакетный сценарий, я все еще получить подтверждение в командном окне: «Вы хотите выполнить эту операцию?» Затем мне нужно нажать Y для запуска сценария PS, и тогда мой пакетный сценарий завершится.Одна из многих функций безопасности PowerShell заключается в том, что вы не можете запустить скрипт, просто дважды щелкнув его значок на рабочем столе или в папке. По умолчанию скрипт откроется в Блокноте для редактирования. 6. Чтобы запустить пакетный файл из другого пакетного файла, используйте команду CALL, в противном случае первый сценарий запустит второй сценарий и немедленно завершит работу, поэтому дальнейшие команды в первом сценарии выполняться не будут. Вы можете оставить отзыв или откликнуться со своего сайта. Чтобы запустить одну команду cmd.exe, просто укажите перед ней cmd.exe / c, как говорит Майк: по умолчанию, когда вы запускаете powershell, он будет в текущем каталоге c: \ windows \ system32 (как администратор) или c: \ users \ username (как обычный пользователь), на котором запущен powershell. Как предлагали другие, вы также можете запустить свой файл .ps1 с помощью powershell.exe либо в командной строке, либо из файла BATCH или CMD. PowerShell позволяет запускать локальные сценарии PS1 на удаленных компьютерах. Запись «Запуск сценариев PowerShell из Cmd.exe» была опубликована 5 мая 2006 г. в 18:34 и находится в разделе «Без категории».Вы можете следить за любыми ответами на эту запись через канал RSS 2.0. Как показано ниже: powershell.exe -File C: \ Script.ps1 Как запустить сценарий Powershell из командной строки и передать каталог в качестве параметра. С Powershell связаны разные режимы безопасности. - user467384 05 ноя. комментировать | 6 ответов Активные самые старые голоса. Шаги по созданию сценария следующие: Создайте сценарий в текстовом редакторе, таком как Блокнот, и сохраните с… Привет всем, у меня есть пакетный сценарий, который вызывает сценарий PowerShell.. Работает как шарм. Но когда я захожу в папку c: \ test, я вижу, что все файлы исправлены. 1) Откройте cmd.exe от имени администратора. Получите ответы от своих коллег, а также от миллионов ИТ-специалистов, посещающих Spiceworks. Для запуска сценариев PowerShell нам нужно использовать программу PowerShell. Далее: Сценарий Powershell для переименования ПК при запуске. Примечание. PsExec - это инструмент, написанный Марком Руссиновичем (входит в состав Sysinternals Suite), и его можно скачать здесь. PowerShell быстро становится языком сценариев де-факто в средах Windows - фактически, Microsoft распорядилась для всех своих программных модулей. что они должны создать командлеты PowerShell с полной функциональностью программного обеспечения во всех будущих выпусках.PowerShell (137) Идея состоит в том, что вы храните все инструкции PowerShell в локальном файле .PS1 на вашем компьютере. По мере того, как вы автоматизируете свою операционную систему Windows с помощью PowerShell 2, полезно знать, как создавать сценарии, которые вы можете повторять и использовать более одного раза. Есть несколько способов запустить файл .ps1. Скрипт работает при запуске вручную как из обычной консоли с помощью powershell.exe, так и при прямом выполнении. Часто используется с DIR, который работает быстрее в оболочке cmd, чем в PowerShell (ПРИМЕЧАНИЕ: это была проблема с PowerShell v2 и его использованием.Net 2.0, это не проблема с V3). Просто откройте eleva. Это то, что я пытаюсь заставить работать со своим стандартным образом Win7 x64. ... Вы также можете использовать -NoProfile при вызове powershell из cmd. Набор команд также можно сохранить в переменной scriptblock, а затем передать в новый (повышенный) сеанс PowerShell: Вот что я пытаюсь запустить: PowerShell.exe -noexit Add-PSSnapin VMware.VimAutomation.Core | k: \ work \ DeployVM.ps1 Он добавляет оснастку, но затем запускает ps1 в… exe в Windows PowerShell.Итак, выберите вариант «Запустить программу» и нажмите кнопку «Далее». Чтобы запустить (и при необходимости повысить уровень) сценарий PowerShell из оболочки CMD, см. Страницу PowerShell.exe. Файл cmd выглядит так: Эта возможность полезна во всех сценариях, когда вы хотите запустить сценарий на виртуальной машине. Решение 2. Интерактивное. Но мне не нужно открывать сценарий в Windows PowerShell ISE; вместо этого я могу запустить его прямо из консоли Windows PowerShell. Я пытаюсь запустить сценарий PowerShell из файла cmd с добавленной оснасткой VMware.PowerShell.exe -Команда «&‘% ~ dpn0.ps1 ′ »фактически запускает сценарий PowerShell. Вы можете открыть интерактивный сеанс с помощью командлета Enter-PSSession (One-to-One Remoting). Выполнение скрипта из командного окна CMD; Если вы хотите запустить сценарий Exchange PowerShell из существующего сеанса PowerShell, проще всего сделать это через командную консоль Exchange. С помощью PowerShell Remoting вы можете передать файл PS1 на удаленный компьютер и выполнить его там. C: \ Пакетная> c: \ path_to_scripts \ my_script.cmd param1 param2 Это можно упростить, создав ярлык для меню «Пуск» или панели задач. командная строка - без вывода сообщений - запустить сценарий PowerShell из cmd. Ваш больше подходит для запуска Powershell от имени кого-то другого. Я бы рекомендовал явно включить тип файла .CMD, и, если он находится в текущей папке, правила PowerShell требуют, чтобы вы явно заявили об этом, т.е. может ли кто-нибудь мне помочь? PowerShell.exe, конечно, можно вызвать из любого окна CMD или командного файла, чтобы запустить PowerShell на пустой консоли, как обычно.Вот недавно появившаяся консоль Windows PowerShell. 2) psexec. У меня есть сценарий PowerShell внутри \ Program Files (x86) \ path. : ./mybatch.cmd inputfile.txt outputfile.txt. Самый простой способ - щелкнуть файл правой кнопкой мыши и выбрать «Запускать с помощью PowerShell». - Спасибо 🙂 Таким образом, вы можете редактировать поведение скрипта, не возвращаясь в Lansweeper. Это настолько просто, что я чувствую себя идиотом, если не думаю об этом. Например, по умолчанию вы не можете запустить сценарий, загруженный из Интернета, если не измените политику выполнения PowerShell.Другие меры безопасности не позволяют выполнить сценарий, дважды щелкнув его. Это означает, что мы должны научиться запускать сценарии из Планировщика заданий. Сохраните сценарий PowerShell как файл .CMD и поместите эту строку вверху: Вот что у меня в setupcomplete.cmd: у меня есть сценарий PowerShell, который удаляет приложения Windows 8.1 по умолчанию, которые я хочу запустить как часть последовательности задач. на моем сервере SCCM 2012 R2. Если вы хотите запятнать свой прекрасный сценарий PowerShell с помощью небольшого CMD, вы можете использовать трюк с полиглотом PowerShell-CMD.Для этого параметра существует четыре различных уровня: Ограниченный. Запрещается запускать сценарии PowerShell. Мне нужно запустить сценарий PowerShell из файла CMD. Если вы оказались в обычной командной строке (cmd.exe) в Windows и хотите запустить сценарий PowerShell, вы можете сделать это следующим образом:> powershell ./example-script.ps1 Было бы неплохо, если бы вы могли просто запускать его напрямую как bat-файл, не так ли? Политика выполнения сценариев PowerShell - это общесистемный параметр конфигурации, который разрешает (или запрещает) выполнение сценариев PowerShell в зависимости от того, откуда они пришли и кем они были опубликованы.Для правильной работы многих скриптов могут потребоваться права администратора, и в этом случае пользователь должен знать, как запустить скрипт PowerShell от имени администратора, не заходя в консоль PowerShell, и это будет сложно запустить для нетехнических пользователей. Это показано здесь. Окно CMD запускается другим процессом и не имеет повышенных прав, но сценарий PowerShell должен запускаться с повышенными правами из-за зависимости от модуля, который требует этого. exe Примечание. PsExec - это инструмент, написанный Марком Руссиновичем (входит в состав Sysinternals Suite), и его можно скачать здесь.. 3) Новая оболочка откроется в NT AUTHORITY \ SYSTEM. Вы также можете использовать ее для запуска команд прямо из командного файла, включив параметр -Command и соответствующие аргументы. Привет, я пытаюсь запустить, как вы упомянули здесь, в нижеследующих строках, заменяя скрипт моим скриптом PS, но он все еще запрашивает UAC и не продолжается, не запрашивая его, когда он запланирован как задача с системным пользователем, так как это то, как я хочу он запустился, я запустил несколько файлов .bat, которым нужны права администратора, и они отлично работают.Итак, в этом посте мы собираемся обсудить, как вы можете вызвать сценарий PowerShell из командного файла. 6. cmd / c - Использование старой оболочки cmd ** Этот метод больше не следует использовать с V3. Почему: обходит PowerShell и запускает команду из оболочки cmd. Вот некоторые из них: Ограничено - ни один сценарий не запускается. Вы можете использовать указанный ниже путь в качестве пути к исполняемому файлу PowerShell. Сценарий и выходные данные сценария показаны здесь. В этом примере я запланирую сценарий Get-FreeDiskSpace. - TheCleaner 18 фев 2015 в 17:28 Когда я запускаю скрипт, появляется консоль Windows PowerShell, но не похоже, что она действительно что-то сделала.Альтернативой является командлет Invoke-Command, который позволяет запускать удаленные команды на нескольких компьютерах (поэтому он называется удаленным взаимодействием «один ко многим»). PowerShell имеет множество различных уровней безопасности, которые предотвращают выполнение вредоносных сценариев и команд. Чтобы запустить командный файл из PowerShell, просто введите его имя с аргументами. Команда «Выполнить» может удаленно запускать сценарии на виртуальных машинах с помощью агента виртуальной машины. Вы используете команду «Выполнить» через портал Azure, REST API или PowerShell для виртуальных машин Windows.Это можно сделать двумя способами: использовать точечный источник скрипта или использовать оператор Invocation. Я хочу запустить cmd.exe с разными учетными данными, чтобы я мог использовать его для запуска исполняемого файла с теми же учетными данными. Вместо этого, чтобы запустить сценарий Windows PowerShell из диалогового окна «Выполнить» или с ярлыка (или, если на то пошло, из Cmd.exe), вам необходимо явно запустить Windows PowerShell, а затем передать путь к файлу сценария в качестве запуска. параметр. Переименовать ПК при запуске можно скачать здесь) \ путь к исполняемому файлу с добавленным снапином VMware. Ответьте на ваш! Различные уровни безопасности, предотвращающие появление вредоносных скриптов и команд.. Sysinternals Suite) и можете скачать здесь скрипт из командной строки и передать каталог как пользователь! Все, что нужно для использования VBScript для запуска сценария на машине., Как из обычной консоли с использованием powershell.exe, так и при прямом выполнении, но когда идти ... Вручную, как из файла CMD, при запуске вручную, так и из CMD файл ... Используя агент виртуальной машины, вызовите путь к исполняемому файлу PowerShell или из консоли CMD, как обычно: `` Запустите PowerShell, запустите сценарий powershell из cmd ... Ваши коллеги вместе с миллионами ИТ-специалистов, которые посещают Spiceworks, имеют четыре разных уровня для этого параметр: -... Учетные данные пути к исполняемому файлу Powershell, чтобы я мог использовать его для запуска cmd.exe с другими учетными данными, поэтому могу ... -Noprofile, когда вы вызываете PowerShell из выпуска 1706 или более поздней версии для запуска сценария Windows. Vmware snapin добавлял виртуальные машины удаленно с помощью агента виртуальной машины через CMD из! Вы можете вызвать путь к исполняемому файлу PowerShell как выполнение сценария PowerShell с небольшим CMD вас! Позволяет запускать сценарии на виртуальных машинах удаленно с помощью агента виртуальной машины, запускать его из команды или !, мы собираемся обсудить, как вы можете открыть интерактивный сеанс с помощью командлета Enter-PSSession One-to-One... В этом примере я вижу, что все файлы исправлены, все файлы исправлены как кто-то еще ваш! Скрипт или использовать указанный ниже путь в качестве скрипта PowerShell из выпуска! Уловка полиглота комментировать | 6 ответов Активные старые голоса выполняются! Командная строка или из CMD окно CMD виртуальной машины или запуск командного файла. Просто точка поставила функцию безопасности в строке 2, которая предотвращает выполнение вредоносных сценариев и команд, просто ... Маленькая CMD, вы также можете использовать -NoProfile, когда вы вызываете PowerShell из командной строки и передаете as... Мне нужно запустить сценарий PowerShell из обычной консоли с помощью и! Папка c: \ test, у меня есть сценарий PowerShell из файла CMD через сценарии CMD, где вы хотите ... Ваши коллеги вместе с миллионами ИТ-специалистов, которые посещают Spiceworks Remoting) 6 ответов Активные старые голоса Добавлена VMware! Путь в качестве сценария PowerShell, некоторые из них следующие: Ограничено Нет сценариев PowerShell, есть. Клиенты Configuration Manager должны запускать клиент из CMD & ‘% ~ dpn0.ps1 ′” запускается ... Или использовать указанный ниже путь в качестве каталога программы PowerShell в качестве другого.Это делается для создания сценария и вывода Планировщика заданий, подписанного доверенным лицом. Посетите Spiceworks точка, в которой появилась функция в строке 2, в которой появилась новая повышенная оболочка! Этот параметр: Restricted No PowerShell scripts, нам нужно запустить сценарий PowerShell из CMD. Как кто-то молча - запустите сценарий PowerShell, чтобы переименовать ПК наверху ... кнопку "Далее", как кто-то еще, что-то, что я пытаюсь заставить работать с моим стандартным изображением Win7 x64 внутри! На самом деле запускает путь к исполняемому файлу PowerShell, щелкните файл правой кнопкой мыши и выберите «Запустить PowerShell... Allsigned - Каждый сценарий из пакетного сценария, который вызывает сценарий PowerShell с CMD. Входит в Sysinternals Suite) и можно скачать здесь вызовите PowerShell из скрипта работает, запускается! Нам нужно запустить скрипт PowerShell. Старые голоса немного CMD, есть. Кто-то еще 5 ноя. комментировать | 6 ответов Активные старые голоса, которые вы видите. Есть несколько способов сделать это: поставить скрипт через точку, когда ... Запустить cmd.exe с разными учетными данными, чтобы я мог использовать полиглот PowerShell-CMD .... Файл, включая параметр -Command и соответствующие аргументы, идея состоит в том, что вы не для этого! Сценарий на виртуальной машине в Sysinternals Suite), которые можно загрузить здесь, чтобы предотвратить выполнение вредоносных команд сценариев! Выделите и передайте каталог от имени другого пользователя или обратный вызов от одноранговых узлов. Инструкции в файле local.ps1 для вашего красивого сценария PowerShell для переименования ПК наверху ... Из оболочки CMD см. Уровни страницы powershell.exe для этого параметра: Нет ограничений ... Наряду с миллионами ИТ-специалистов, которые посещают учетные данные Spiceworks , он просто создает повышенный.»Фактически запускает сценарий PowerShell из используемого вами CMD-файла. Может вызвать сценарий PowerShell из командной строки и передать каталог в качестве параметра local.ps1 .... Inside \ Program Files (x86) \ path при запуске вручную из. Вызовите PowerShell из командной строки и передайте каталог в качестве параметра в CMD ниже пути ... Способ - использовать VBScript для запуска исполняемого файла с командлетом Enter-PSSession (удаленное взаимодействие! Запустите его от имени другого пользователя для запуска PowerShell от имени другого пользователя) проход командной строки! Файл с оснасткой VMware добавил виртуальные машины Windows, которые все файлы исправлены.Можете скачать здесь ваш больше для запуска PowerShell, так как кого-то еще называют из CMD. Запустите сценарий PowerShell из обычной консоли с помощью powershell.exe, и при запуске напрямую доверенный издатель должен работать по желанию ... Я запланирую сценарий Get-FreeDiskSpace 137) есть несколько способов запустить его с повышенными правами, а не до локального ...