Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
PowerShell — это оболочка командной строки и язык сценариев, используемый для автоматизации. Аналогично другим оболочкам, таким как bash
в Linux или командной оболочке Windows (cmd.exe
), PowerShell позволяет выполнять любую команду, доступную в системе, а не только команды PowerShell.
Типы команд
Для любой оболочки в любой операционной системе существует три типа команд:
Ключевые слова языка оболочки являются частью сценарного языка оболочки.
- Примеры ключевых слов
bash
:if
,then
,else
,elif
иfi
. - Примеры ключевых слов
cmd.exe
:dir
,copy
,move
,if
иecho
. - Примеры ключевых слов PowerShell:
for
,foreach
,try
,catch
иtrap
.
Ключевые слова языка оболочки можно использовать только в среде выполнения оболочки. Нет исполняемого файла, внешнего по отношению к оболочке, который обеспечивает функциональность ключевого слова.
- Примеры ключевых слов
нативные команды ОС — это исполняемые файлы, установленные в операционной системе. Исполняемые файлы можно запускать из любой оболочки командной строки, например PowerShell. К ним относятся файлы скриптов, которые могут требовать правильной работы других оболочков. Например, если вы запускаете пакетный скрипт Windows (
.cmd
файл) в PowerShell, PowerShell выполняетcmd.exe
и передает пакетный файл для выполнения.команды оболочки, специфичные для среды, — это команды, определенные во внешних файлах, которые могут использоваться только в среде выполнения оболочки. К ним относятся скрипты и функции, или они могут быть специально скомпилированы модулями, добавляющими команды в среду выполнения оболочки. В PowerShell эти команды называются командлетами (читается как "command-lets").
Выполнение встроенных команд
Любая собственная команда может выполняться из командной строки PowerShell. Обычно выполняется команда точно так же, как и в bash
или cmd.exe
. В следующем примере демонстрируется запуск команды grep
в bash
в Ubuntu Linux.
sdwheeler@circumflex:~$ grep sdwheeler /etc/passwd
sdwheeler:x:1000:1000:,,,:/home/sdwheeler:/bin/bash
sdwheeler@circumflex:~$ pwsh
PowerShell 7.2.6
Copyright (c) Microsoft Corporation.
https://aka.ms/powershell
Type 'help' to get help.
После запуска PowerShell в Ubuntu можно выполнить ту же команду из командной строки PowerShell:
PS /home/sdwheeler> grep sdwheeler /etc/passwd
sdwheeler:x:1000:1000:,,,:/home/sdwheeler:/bin/bash
Передача аргументов встроенным командам
Большинство оболочк включают функции для использования переменных, оценки выражений и обработки строк. Но каждая оболочка делает эти вещи по-разному. В PowerShell все параметры начинаются с символа дефиса (-
) . В cmd.exe
большинство параметров используют символ косой черты (/
) . Другие средства командной строки могут не иметь специального символа для параметров.
Каждая оболочка имеет собственный способ обработки и оценки строк в командной строке. При выполнении встроенных команд в PowerShell, которые ожидают, что строки будут заключены в кавычки определенным образом, может потребоваться изменить способ передачи этих строк.
Дополнительные сведения см. в следующих статьях:
PowerShell 7.2 представила новую экспериментальную функцию PSNativeCommandArgumentPassing
, которая улучшила собственную обработку команд. Дополнительные сведения см. в $PSNativeCommandArgumentPassing
.
Обработка выходных данных и ошибок
PowerShell также имеет несколько дополнительных выходных потоков, чем другие оболочки. Оболочки bash
и cmd.exe
имеют stdout и stderr. PowerShell имеет шесть выходных потоков. Дополнительную информацию см. в разделе about_Redirection и about_Output_Streams.
Как правило, выходные данные, отправленные в stdout собственной командой, отправляются в поток success в PowerShell. Выходные данные, отправляемые в stderr собственной командой, отправляются в поток ошибки в PowerShell.
Если в родной команде код выхода не равен нулю, $?
устанавливается в $false
. Если код выхода равен нулю, $?
получает значение $true
.
Однако это изменилось в PowerShell 7.2. Записи ошибок, перенаправленные из собственных команд, например при использовании операторов перенаправления (2>&1
), не записываются в переменную PowerShell $Error
, а переменная предпочтения $ErrorActionPreference
не влияет на перенаправленные выходные данные.
Многие собственные команды записываются в stderr в качестве альтернативного потока для получения дополнительных сведений. Это поведение может привести к путанице в PowerShell при просмотре ошибок, а дополнительные выходные данные могут быть потеряны, если $ErrorActionPreference
задано состояние, которое отключает выходные данные.
PowerShell 7.3 добавила новую экспериментальную функцию PSNativeCommandErrorActionPreference
, которая позволяет контролировать, обрабатываются ли выходные данные в stderr
как ошибка. Дополнительные сведения см. в $PSNativeCommandUseErrorActionPreference
.
Выполнение команд PowerShell
Как упоминалось ранее, команды PowerShell называются командлетами. Командлеты собираются в модули PowerShell, которые можно загружать по мере необходимости. Командлеты можно писать на любом скомпилированном языке .NET или с помощью самого языка сценариев PowerShell.
Команды PowerShell, выполняющие другие команды
Оператор вызова PowerShell (&
) позволяет выполнять команды, хранящиеся в переменных и представленные строками или блоками скриптов. Это можно использовать для выполнения любой собственной команды или команды PowerShell. Это полезно в скрипте, если необходимо динамически создавать параметры командной строки для собственной команды. Дополнительные сведения см. у оператора вызова .
Командлет Start-Process
следует использовать для выполнения встроенных команд, но только при необходимости управлять выполнением команды. Командлет имеет параметры для поддержки следующих сценариев:
- Выполнение команды с помощью различных учетных данных
- Скрытие окна консоли, созданного новым процессом
- Перенаправьте поток stdin в, поток stdout ви поток stderr в
- Использование другого рабочего каталога для команды
В следующем примере выполняется собственная команда sort.exe
с перенаправленными входными и выходными потоками.
$processOptions = @{
FilePath = "sort.exe"
RedirectStandardInput = "TestSort.txt"
RedirectStandardOutput = "Sorted.txt"
RedirectStandardError = "SortError.txt"
UseNewEnvironment = $true
}
Start-Process @processOptions
Для получения дополнительной информации см. Start-Process.
В Windows командлет Invoke-Item
выполняет действие по умолчанию для указанного элемента. Например, он запускает исполняемый файл или открывает файл документа с помощью приложения, связанного с типом файла документа. Действие по умолчанию зависит от типа элемента и разрешается поставщиком PowerShell, предоставляющим доступ к элементу.
В следующем примере откроется репозиторий исходного кода PowerShell в веб-браузере по умолчанию.
Invoke-Item https://github.com/PowerShell/PowerShell
Дополнительные сведения см. в разделе Invoke-Item.
PowerShell