В качестве простейшего примера работ
в среде PowerShell рассмотрим,
каким образом можно изменять ее параметры,
обеспечивая комфортность работы
пользователя. По своему желанию
пользователь может устанавливать
размеры и расположение окна PowerShell,
характеристики используемых шрифтов,
выбор цвета и другие параметры.
Проще всего эти установки выполняются
с помощью диалогового окна оболочки.
Для его вызова нужно установить курсор
мыши на заголовке окна, кликнуть правой
кнопкой и выбрать пункт Свойства в
появившемся контекстном меню. Должно
появиться диалоговое окно (рис.
4)
О
кно
имеет несколько вкладок (Общие, Шрифт,
Расположение, Цвета), каждая из которых
позволяет настраивать определенную
группу параметров. Здесь можно
буферирование и запоминание интерактивно
выполняемых команд с целью их последующего
использования отдельным блоком в
сценарии.
После выбора и установки всех нужных
параметров следует нажать кнопку ОК.
Система тут же требует указаний, к какому
объекту применить эти изменения (рис.
5). Если изменения свойств должны
действовать постоянно, то следует
выбрать переключатель Сохранить
свойства для других окон
Рис. 4 Диалоговое окно для установки
параметров оболочки.
с тем же
именем,
если изменения предусмотрены как
разовые, то выбирается Изменить
свойства только текущего окна.
Рис. 5 Выбор объекта установки параметров
оболочки.
Кроме инструментальных средств настройки
командного окна имеется возможность
применения чисто программных средств,
являющихся неотъемлемой частью самой
оболочки.
По умолчанию командлет Get-Host
без параметров отображает информацию
о самой оболочке (региональные настройки,
версия и т.п.):
Рис. 6 Обобщенные данные оболочки
PowerShell и место размещения
ее параметров
В команде (Get-Host).UI
имя командлета взято в круглые скобки.
Это обозначает, что требуется выполнить
данный командлет и сформировать выходной
объект. Только после этого извлекается
свойство объекта UI. Пройдя
эту цепочку, получаем доступ к параметрам
командного окна:
Рис. 7 Параметры командного окна оболочки
PowerShell
Значение каждого из перечисленных
параметров можно изменить, настраивая
внешний вид окна по желанию. При изменениях
параметров целесообразно объект RawUI
сохранить в качестве значения отдельной
переменной [1]. Покажем, например, как
изменить цвет фона и текста. Свойство
BackgroundColor отвечает за цвет
фона, а ForegroundColor – за цвет
текста. В качестве цветов можно
использовать следующие 16: Black,
Gray, Red,
Magenta, Yellow,
Blue, Green,
Cyan, White,
DarkGreen, DarkCyan,
DarkRed, DarkMagenta,
DarkYellow, DarkGray,
DarkBlue. Установим желтый
цвет текста на темно-синем фоне. Такое
сочетание цветов часто используется в
различных системах программирования.
Желаемый эффект обеспечивается
выполнением следующих трех команд.
Действие этих команд обеспечивается
сразу после их выполнения. Оно не
затрагивает строки, предшествующие
этим командам.
Некоторые параметры оболочки, например,
WindowSize, содержат по две
координаты. Для изменения их значений
проще всего объявить новую переменную
$b=$a.WindowSize.
Переопределим значения ширины и высоты
командами $b.Width=80
и $b.Height=25,
а затем изменим содержимое объекта
WindowSize переменной $a,
то есть выполним команду $a.WindowSize=$b.
Последняя строка рис. 7 отражает заголовок
командного окна PowerShell.
Оно достаточно длинное и непривлекательное.
Выполнив команду $a.WindowTitle=”
Мое командное окно”, получаем более
приемлемое название.
В некоторых случаях возникает необходимость
в изменении приглашения. Мигающему
курсору после букв PS
предшествует запись полного пути к
текущему каталогу. Вид приглашения
командной строки в PowerShell
определяется функцией Prompt,
которая имеет формат, отражаемый командой
Не рассматривая подробно составные
части формата, так как это можно сделать,
используя справочную систему, укажем,
как создать приглашение, эквивалентное
командной строке cmd.exe.
В данной команде используется конструкция
“$(Get-Location)…,
называемая подвыражением (subexpression).
Подвыражение – это блок кода на языке
PowerShell, который в строке
заменяется значением, полученным в
результате выполнения этого кода.
Все иллюстрированные выше настройки
выполнялись в интерактивном режиме и
их действие распространяется лишь на
время текущего сеанса работы. После
окончания сеанса работы в оболочке
PowerShell они утрачивают
силу.
Для сохранения настроек с целью их
регулярного, а может быть и повседневного,
использования необходимо создать файл
с соответствующим набором команд-настроек.
Этот файл текстового типа получил
название профиль. Профиль – это
сценарий, который будет загружаться и
активизировать необходимые настройки
при каждом запуске оболочки PowerShell.
Значение профиля очень близко значениям
файлов autoexec.bat
для ранних и autoexec.nt
для современных версий ОС Windows.
Все они предназначаются для автоматического
выполнения требуемых подготовительных
работ. Корректно составленный профиль
призван обеспечить не только комфортные
условия работы пользователя, но и создать
удобства для администрирования.
Разработка и распространение профилей
позволяет использовать единые условия
работы пользователей на группе компьютеров
в распределенной среде, например, в
локальных компьютерных сетях.
В зависимости от уровня выполняемых
настроек и значимости администрируемых
ресурсов можно формировать профили
четырех видов:
— профили, действующие на всех пользователей
сети и на все их оболочки PowerShell
(хосты);
— профили, действующие на всех пользователей
сети с использованием единой оболочки
PowerShell;
— профили, действующие только на текущего
пользователя и на все оболочки;
— профили, действие которых распространяется
только на текущего пользователя и только
на хост powershell.exe.
Видимо поэтому в инструментальных
средствах оболочки (см. рис. 4 Свойства,
вкладка Общие) предусмотрена возможность
работы с несколькими буферами, в которых
одновременно подготавливаются блоки
команд сразу для нескольких профилей.
Каждый тип профиля имеет свое место
хранения в особой зоне ОС Windows.
При работе с оболочкой на автономном
компьютере используется только
пользовательский профиль, относящийся
к последнему типу. Место его расположения
и имя файла можно определить по значению
специальной переменной $profile:
С помощью командлета Test-Path
можно установить факт наличия созданного
профиля:
Если профиль создан, то реакция будет
True, в противном случае –
False.
По умолчанию, даже если профиль создан,
выполнение блока его команд запрещено.
Параметр политики выполнения
устанавливается Restricted.
Это сделано для обеспечения безопасности
системы.
Автоматическое выполнение сценариев
профиля с цифровой подписью разрешается
при параметрах политики выполнения
AllSigned и RemoteSigned.
Возможно выполнение сценариев и без
цифровой подписи при параметре
Unrestricted. В этом случае
система выдает предупреждение и требует
подтверждения со стороны пользователя.
Узнать, какая политика является активной,
можно с помощью команды
Переустановка значения параметра
обеспечивается командлетом
Set-ExecutionPolicy
и далее через пробел пишется название
политики выполнения, например,
RemoteSigned. Запоминать имена
возможных политик нет необходимости.
Установив курсор после имени командлета,
и нажимая клавишу Tab, можно
перебрать все варианты политик выполнения,
оставив необходимую.
Задание 4.
-
Вызвать диалоговое окно оболочки для
проверки и установки параметров
командного окна. Внимательно изучить
рубрики вкладок Общие, Шрифт, Расположение,
Цвета. Просмотреть, как изменение
различных параметров отражается на
внешнем виде командного окна. -
Изучить последовательность команд для
программного изменения свойств консоли.
По образцу и подобию установить новые
размеры командного окна, применить
другие сочетания цветов. -
Изменить название командного окна.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- Using the PowerShell Invocation Operator
&
- Running CMD Commands Using
cmd.exe
- Piping to
CMD
Using PowerShell
Many legacy Command Prompt (CMD) commands work in the Windows PowerShell scripting environment. The PowerShell environment carries these commands forward from the most used commands like ping
to the most informational commands like tracert
from the legacy environment using aliases.
However, some running commands in the Command Prompt terminal will not work in Windows PowerShell’s scripting environment. This article will discuss how we can transcribe them correctly to Windows PowerShell.
Using the PowerShell Invocation Operator &
The legacy CMD will successfully work when we run command-line programs with an executable file format (.exe) located on a specific path, followed by the actual command.
If we take the example syntax below, we can perform a quick scan using the Avast Command-Line scanner if we run the script inside CMD, and it will successfully work.
Example Code:
"C:Program FilesAVAST SoftwareAvastashCmd.exe" /Quick
However, if we take the same syntax and run it in Windows PowerShell, we will get an Exception error. The reason behind the error is that Windows PowerShell sees the double quotation marks ""
as a literal string value, and the /Quick
parameter accompanied in the syntax is not available in any of the native libraries.
In addition, running only the quoted path in Windows PowerShell will only output the string value rather than running the executable file itself.
Example Code:
"C:Program FilesAVAST SoftwareAvastashCmd.exe"
Output:
C:Program FilesAVAST SoftwareAvastashCmd.exe
To remedy this problem, we can call the Invocation operator or the ampersand sign &
at the start of the command line to run the executable path in Windows PowerShell properly.
& "C:Program FilesAVAST SoftwareAvastashCmd.exe" /Quick
Using the invocation operator in the PowerShell environment will treat the string path as an actual path to the executable file. Therefore, it will run the script directly with the accompanying command parameter.
Running CMD Commands Using cmd.exe
Another example of running CMD commands is by using the cmd.exe
. We can add cmd.exe
inside Windows PowerShell like our previous method.
Once added and executed, it will call the command line interface inside the Windows PowerShell command prompt.
The parameter /c
will carry out whichever command was entered and terminate the cmd.exe
command-line interpreter.
You may run the syntax below to bring up the cmd.exe
command’s help documentation for more information on other parameters. In addition, you may run the command below on both PowerShell and CMD command-line interfaces.
Piping to CMD
Using PowerShell
In Windows PowerShell, we can also send over commands to the command prompt terminal by piping in the cmd
cmdlet to the command you wanted to send over.
In the example syntax below, the request to query the IP configurations of your local computer is sent to the CMD command-line interface. After running the code, the CMD terminal is terminated, and the user is brought back to the PowerShell terminal denoted by PS
at the start of the line.
Example Code:
I am having a bunch of issues with getting a PowerShell command to run. All it is doing is running a command that would be run in a CMD prompt window.
Here is the command:
"C:Program Files (x86)Microsoft Configuration ManagerAdminConsolebini386CmRcViewer.exe" PCNAME
I have tried the following with no success (I have tried many iterations of this to try and get one that works. Syntax is probably all screwed up):
$TEXT = $textbox.Text #$textbox is where the user enters the PC name.
$CMDCOMMAND = "C:Program Files (x86)Microsoft Configuration ManagerAdminConsolebini386CmRcViewer.exe"
Start-Process '"$CMDCOMMAND" $TEXT'
#iex -Command ('"C:Program Files (x86)Microsoft Configuration ManagerAdminConsolebini386CmRcViewer.exe"' $TEXT)
The command will just open SCCM remote connection window to the computer the user specifies in the text box.
asked Jul 24, 2014 at 17:29
1
Try this:
& "C:Program Files (x86)Microsoft Configuration ManagerAdminConsolebini386CmRcViewer.exe" PCNAME
To PowerShell a string «…» is just a string and PowerShell evaluates it by echoing it to the screen. To get PowerShell to execute the command whose name is in a string, you use the call operator &
.
answered Jul 24, 2014 at 18:19
Keith HillKeith Hill
190k40 gold badges344 silver badges365 bronze badges
6
To run or convert batch files externally from PowerShell (particularly if you wish to sign all your scheduled task scripts with a certificate) I simply create a PowerShell script, e.g. deletefolders.ps1.
Input the following into the script:
cmd.exe /c "rd /s /q C:#TEMPtest1"
cmd.exe /c "rd /s /q C:#TEMPtest2"
cmd.exe /c "rd /s /q C:#TEMPtest3"
*Each command needs to be put on a new line calling cmd.exe again.
This script can now be signed and run from PowerShell outputting the commands to command prompt / cmd
directly.
It is a much safer way than running batch files!
answered May 19, 2015 at 10:01
Armand G.Armand G.
1,73714 silver badges8 bronze badges
3
One solution would be to pipe your command from PowerShell to CMD. Running the following command will pipe the notepad.exe
command over to CMD, which will then open the Notepad application.
PS C:> "notepad.exe" | cmd
Once the command has run in CMD, you will be returned to a PowerShell prompt, and can continue running your PowerShell script.
Edits
CMD’s Startup Message is Shown
As mklement0 points out, this method shows CMD’s startup message. If you were to copy the output using the method above into another terminal, the startup message will be copied along with it.
InteXX
5,8956 gold badges40 silver badges73 bronze badges
answered Aug 9, 2018 at 9:42
reelyardreelyard
9211 gold badge8 silver badges28 bronze badges
1
For those who may need this info:
I figured out that you can pretty much run a command that’s in your PATH
from a PS script, and it should work.
Sometimes you may have to pre-launch this command with cmd.exe /c
Examples
Calling git from a PS script
I had to repackage a git
client wrapped in Chocolatey (for those who may not know, it’s a package manager for Windows) which massively uses PS scripts.
I found out that, once git
is in the PATH
, commands like
$ca_bundle = git config --get http.sslCAInfo
will store the location of git
crt
file in $ca_bundle
variable.
Looking for an App
Another example that is a combination of the present SO post and this SO post is the use of where
command
$java_exe = cmd.exe /c where java
will store the location of java.exe
file in $java_exe
variable.
answered Jul 6, 2018 at 12:12
avi.elkharratavi.elkharrat
5,5126 gold badges41 silver badges45 bronze badges
2
You must use the Invoke-Command cmdlet to launch this external program. Normally it works without an effort.
If you need more than one command you should use the Invoke-Expression cmdlet with the -scriptblock
option.
answered Jul 24, 2014 at 18:22
5
PowerShell позволяет выполнять команды DOS, знакомые вам по командной строке “cmd.exe“. Это реализовано с помощью псевдонимов (alias).
С помощью команды cd можете перейти в другую директорию, а с помощью dir посмотреть содержимое этой директории:
PS C:WindowsSystem32> cd C:Windows PS C:Windows> dir Каталог: C:Windows Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 13.10.2020 11:21 addins d----- 14.10.2020 8:01 appcompat d----- 11.06.2021 17:52 apppatch d----- 01.07.2021 9:26 AppReadiness d-r--- 15.04.2021 21:05 assembly d----- 11.06.2021 17:52 bcastdvr d----- 13.10.2020 11:16 Boot ***сократил вывод***
Чтобы вывести что-нибудь в терминал используем echo:
PS C:Windows> echo test test
Для того чтобы создать новый каталог существует команда md:
PS C:> md test Каталог: C: Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 01.07.2021 16:12 test
А создать файл можно с помощью echo добавив перенаправление вывода в файл:
PS C:> echo 12345 > .testtest.txt
Перенести файл в другой каталог можно с помощью команды move, а скопировать с помощью команды copy:
PS C:> md test2 Каталог: C: Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 01.07.2021 16:16 test2 PS C:> move .testtest.txt .test2 PS C:> dir test2 Каталог: C:test2 Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 01.07.2021 16:15 16 test.txt PS C:> copy .test2test.txt .test
Все эти команды вам могут быть знакомы по командной строке “cmd.exe“. Но в PowerShell на самом деле вы выполняете псевдонимы команд, которые выполняют те же действия что и команды DOS. Посмотреть на список этих псевдонимов можно командой Get-Alias:
PS C:Windows> Get-Alias CommandType Name Version Source ----------- ---- ------- ------ Alias % -> ForEach-Object Alias ? -> Where-Object Alias ac -> Add-Content Alias asnp -> Add-PSSnapin Alias cat -> Get-Content Alias cd -> Set-Location Alias CFS -> ConvertFrom-String 3.1.0.0 Microsoft.PowerShell.Utility Alias chdir -> Set-Location Alias clc -> Clear-Content Alias clear -> Clear-Host Alias clhy -> Clear-History Alias cli -> Clear-Item Alias clp -> Clear-ItemProperty Alias cls -> Clear-Host Alias clv -> Clear-Variable Alias cnsn -> Connect-PSSession ***Сократил вывод***
Например мы бы могли выполнить реальную команду PowerShell для смены директории:
PS C:Windows> Set-Location C: PS C:>
Таким образом мы вспомнили некоторые команды командной строки “cmd.exe“:
- cd – используется для смены текущей директории, другими словами чтобы перемещаться по дереву каталогов;
- dir – нужна для отображения содержимого текущий или указанной директории;
- md – предназначена для создания нового каталога;
- echo – выводит переданный ей текст на терминал, но можно вывод перенаправить в файл;
- move – используется для перемещения файлов и каталогов;
- copy – нужна для копирования файлов и каталогов.
Узнали что многие команды командной строки можно выполнить из PowerShell благодаря псевдонимам команд, которые выполняют те же действия. А чтобы получить весь список таких псевдонимов можно выполнить:
- Get-Alias
Сводка
Имя статьи
PowerShell использование команд DOS
Описание
PowerShell позволяет выполнять команды DOS, знакомые вам по командной строке «cmd.exe». Это реализовано с помощью псевдонимов (alias)
I have a batch file which runs a command (that is in another batch file) in administrative mode via:
//instructions above
powershell.exe -Command "Start-Process file.bat -Verb RunAs"
//instructions below
file.bat
simply contains:
iisreset
exit
I want to be able to run this directly in a single batch file. Can this be done? I was hoping for somthing like:
powershell.exe -Command "Start-Process 'iisReset && exit' -Verb RunAs"
But this does not work.
Ben N
39.4k17 gold badges137 silver badges174 bronze badges
asked Jul 29, 2016 at 11:41
The Start-Process
cmdlet assumes that the first parameter (-FilePath
, specifically) is only the filename of the program to run. That’s why you were getting «cannot find the file specified» errors. The -ArgumentList
option is designed to pass parameters. Therefore, this should do what you want:
powershell -Command "Start-Process 'cmd' -Verb RunAs -ArgumentList '/c calc && exit'"
Note that you might not even need the && exit
part in some circumstances.
answered Jul 29, 2016 at 20:12
Ben NBen N
39.4k17 gold badges137 silver badges174 bronze badges
5
В предыдущих статьях мы говорили о командлетах, функциях и сценариях в Windows PowerShell. Сегодня поговорим о последнем типе команд — внешних исполняемых файлах. Речь идет о командных файлах классической командной строки Windows (cmd.exe) и сценариях на языке VBScript.
Данные файлы и сценарии появились раньше PowerShell и, конечно же, системные администраторы до сих пор могут использовать их в своей работе.
Windows PowerShell позволяет запускать файлы .bat и .cmd. Для запуска необходимо указать путь к файлу. Например
C:primer.bat
При этом PowerShell создаст процесс cmd.exe, который и выполнит этот запрос. Тоже самое относится и к файлам .vbs. Windows PowerShell позволяет не только запускать подобные файлы, но и внедрять код VBScript в сценарии PowerShell. Если смотреть шире, то, на самом деле, внедрять можно код любого языка, поддерживающего ActiveX Scripting. При этом правда стоит учитывать, что эти языки весьма сильно отличаются по синтаксису от языка PowerShell.
Если же Вы хотите запустить в Windows PowerShell команду классической командной строки, то для этого достаточно использовать cmd /c.
Например, команда
cmd /c dir /b
выдаст Вам список файлов текущего каталога в виде одних только имен, без дополнительных атрибутов. Это команда cmd.exe, которую мы запустили в консоли PowerShell.
Microsoft постаралась сделать синтаксисы классической командной строки и Windows PowerShell максимально схожими. Поэтому многие знакомые нам команды работают и в PowerShell без дополнительных манипуляций. Полной совместимости достичь, однако, было невозможно из-за разного принципа реализации работы cmd.exe и PowerShell. В PowerShell были введены командлеты, объединяемые в конвейеры. В классической командной строке Windows был список команд, которые очень гибко настраивались большим количеством дополнительных параметров.
Итак, как видим, Windows PowerShell обеспечивает механизм обратной совместимости с командами и сценариями, написанными до его появления. При этом новые сценарии было бы логичнее писать уже на PowerShell. В идеале, изучив синтаксис PowerShell, системный администратор может переписать и старые сценарии.
В этой статье я попробую собрать варианты выполнения команд CMD из консоли Powershell
Выполнение команд CMD с помощью символа вызова
Powershell распознает строку в кавычках просто как строку.
Что бы указать на то, что строка должна быть выполнена, требуется использовать специальный символ вызова, такой как «&»
Для простых команд вполне подходят такие формы записи, в том числе и с аргументами
& "ping" ya.ru или & {ping ya.ru}
Выполняя утилиты CMD в консоли ISE вы можете наблюдать проблемы с кодировкой. Решение можно найти тут
Форма вызова команды с аргументами выглядит так
& "[path] command" [arguments]
Аргументов после закрытых кавычек может быть больше одного
При использовании оператора & вывод выполненных им команд будет отображен внутри консоли Powershell, без открытия нового окна.
Можно передать команду по конвейеру
"calc" | cmd
Start-Process
Мне нужно было выполнять в ходе повершельного скрипта вот такую команду с множеством параметров:
"C:Program Filesgsgs9.26bingswin64c.exe" -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -dNOPAUSE -dCompatibilityLevel=1.4 -dQUIET -dBATCH -sOutputFile=C:tempoutput0.pdf C:input.pdf
Лучшим вариантом оказалось перечисление параметров нужной команды через запятую, в виде аргументов параметра повершела ArgumentList:
Start-Process -FilePath "C:Program Filesgsgs9.26bingswin64c.exe"` -ArgumentList "-sDEVICE=pdfwrite", "-dPDFSETTINGS=/ebook",` "-dNOPAUSE", "-dCompatibilityLevel=1.4", "-dQUIET",` "-dBATCH", -sOutputFile=C:tempoutput0.pdf C:input.pdf
Если вам интересно, то можете прочитать статью про уменьшение размера PDF документов, в рамках которой и использовалась данная команда, а так же разбор других параметров сжатия
Если вы хотите используя Start-Process получить вывод, как и при использовании оператора &, в текущий сеанс консоли, то используйте параметр -NoNewWindow
UPD!
Начиная с Powershell версии 3 появился механизм под названием Stop-Parsing. Предназначен он для того, что бы все символы в строке считывались как простой текст, без какой либо интерпретации. Соответственно, нужда в экранировании кавычками всех параметров и их значений отпадает.
Принцип: вся строка идущая после символа —% считывается как обычный текст
На примере вышеприведенной команды, посмотрим как упростилась ее запись:
& "C:Program Filesgsgs9.26bingswin64c.exe" --% -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -dNOPAUSE -dCompatibilityLevel=1.4 -dQUIET -dBATCH -sOutputFile=C:tempoutput0.pdf C:input.pdf
Отладка
Для отладки ошибок можно воспользоваться параметром перенаправления вывода, так как вызываемое окно CMD обычно моргает на мгновение и исчезает, и успеть прочитать появившийся текст просто не является возможным. А делать скриншоты появляющегося окна, при наличии штатного средства, это просто маразм XD
-RedirectStandardOutput c:tempoutput.txt
Также почитать про перенаправление вывода можно тут
Записки администратора
У меня много проблем с запуском команды PowerShell. Все, что он делает, это запускает команду, которая будет запускаться в окне командной строки CMD.
Вот команда:
"C:Program Files (x86)Microsoft Configuration ManagerAdminConsolebini386CmRcViewer.exe" PCNAME
Я безуспешно пробовал следующее (я пробовал много итераций этого, чтобы попытаться получить тот, который работает. Синтаксис, вероятно, весь испорчен):
$TEXT = $textbox.Text #$textbox is where the user enters the PC name.
$CMDCOMMAND = "C:Program Files (x86)Microsoft Configuration ManagerAdminConsolebini386CmRcViewer.exe"
Start-Process '"$CMDCOMMAND" $TEXT'
#iex -Command ('"C:Program Files (x86)Microsoft Configuration ManagerAdminConsolebini386CmRcViewer.exe"' $TEXT)
Команда просто откроет окно удаленного подключения SCCM к компьютеру, указанному пользователем в текстовом поле.
5 ответов
Лучший ответ
Попробуй это:
& "C:Program Files (x86)Microsoft Configuration ManagerAdminConsolebini386CmRcViewer.exe" PCNAME
Для PowerShell строка «…» — это просто строка, и PowerShell оценивает ее, отображая ее на экране. Чтобы заставить PowerShell выполнить команду, имя которой указано в строке, вы используете оператор вызова &
.
127
Keith Hill
24 Июл 2014 в 22:19
Для запуска или преобразования командных файлов извне из PowerShell (особенно если вы хотите подписать все свои сценарии запланированных задач сертификатом) я просто создаю сценарий PowerShell, например deletefolders.ps1.
Введите в скрипт следующее:
cmd.exe /c "rd /s /q C:#TEMPtest1"
cmd.exe /c "rd /s /q C:#TEMPtest2"
cmd.exe /c "rd /s /q C:#TEMPtest3"
* Каждую команду нужно помещать в новую строку, снова вызывая cmd.exe.
Теперь этот сценарий можно подписать и запустить из PowerShell, выводя команды напрямую в командную строку / cmd
.
Это намного безопаснее, чем запуск командных файлов!
78
Peter Mortensen
11 Сен 2018 в 01:29
Для тех, кому может понадобиться эта информация:
Я понял, что вы можете в значительной степени запустить команду, которая находится в вашем 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
.
2
Wessel van Lit
12 Авг 2021 в 00:01
Одним из решений было бы перенаправить вашу команду из PowerShell в CMD. Выполнение следующей команды направит команду notepad.exe
в CMD, который затем откроет приложение «Блокнот».
PS C:> "notepad.exe" | cmd
После выполнения команды в CMD вы вернетесь в командную строку PowerShell и сможете продолжить выполнение сценария PowerShell.
Правки
Отображается стартовое сообщение CMD
Как указывает mklement0, этот метод показывает запуск CMD сообщение. Если вы должны были скопировать вывод, используя описанный выше метод, в другой терминал, сообщение о запуске будет скопировано вместе с ним.
16
InteXX
11 Июн 2020 в 05:12
Для запуска этой внешней программы необходимо использовать командлет Invoke-Command. Обычно работает без усилий.
Если вам нужно более одной команды, вы должны использовать командлет Invoke-Expression с опцией -scriptblock
.
-2
Peter Mortensen
11 Сен 2018 в 01:27