Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
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 , которая улучшила собственную обработку команд. PowerShell 7.3 сделал эту функцию основной. Дополнительные сведения см. в $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, которая позволяет управлять тем, как обрабатывать ненулевые коды завершения из встроенных команд. Дополнительные сведения см. в $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