Типы команд PowerShell

Отличие PowerShell от других оболочек – ориентация на объекты

При разработке любого языка программирования одним из основных является вопрос о том, какие типы данных и каким образом будут в нем представлены. При создании PowerShell разработчики решили не изобретать ничего нового и воспользоваться унифицированной объектной моделью.NET.

Рассмотрим пример. В Windows XP есть консольная утилита tasklist.exe, которая выдает информацию о процессах, запущенных в системе:

C:\>tasklist Имя образа PID Имя сессии № сеанса Память========================= ====== ============= ======== ============System Idle Process 0 0 16 КБSystem 4 0 32 КБsmss.exe 560 0 68 КБcsrss.exe 628 0 4 336 КБwinlogon.exe 652 0 3 780 КБservices.exe 696 0 1 380 КБlsass.exe 708 0 1 696 КБsvchost.exe 876 0 1 164 КБsvchost.exe 944 0 1 260 КБsvchost.exe 1040 0 10 144 КБsvchost.exe 1076 0 744 КБsvchost.exe 1204 0 800 КБspoolsv.exe 1296 0 1 996 КБkavsvc.exe 1516 0 9 952 КБklnagent.exe 1660 0 5 304 КБklswd.exe 1684 0 64 КБ

Предположим, что мы в командном файле интерпретатора Cmd.exe с помощью этой утилиты хотим определить, сколько оперативной памяти тратит процесс kavsvc.exe. Для этого нужно выделить из выходного потока команды tasklist соответствующую строку, извлечь из нее подстроку, содержащую нужное число и убрать пробелы между разрядами. В PowerShell задача решается с помощью команды get-process, которая возвращает коллекцию объектов, каждый из которых соответствует одному запущенному процессу. Для определения памяти, затрачиваемой процессом kavsvc.exe, нет необходимости в дополнительных манипуляциях с текстом, достаточно просто взять значение свойства WS объекта, соответствующего данному процессу.

Наконец, объектная модель.NET позволяет PowerShell напрямую использовать функциональность различных библиотек, являющихся частью платформы.NET. Например, чтобы узнать, каким днем недели было 9 ноября 1977 года, в PowerShell можно выполнить следующую команду:

(get-date "09.11.1974").dayofweek.tostring()

В этом случае команда get-date возвращает.NET-объект DateTime, имеющий свойство DayOfWeek, при обращении к которому вычисляется день недели для соответствующей даты.

В оболочке PowerShell поддерживаются команды четырех типов: командлеты, функции, сценарии и внешние исполняемые файлы.

Первый тип – так называемые командлеты (cmdlet). Этот термин используется пока только внутри PowerShell. Командлет – аналог внутренней команды интерпретатора командной строки - представляет собой класс.NET, порожденный от базового класса Cmdlet; разрабатываются командлеты с помощью пакета PowerShell Software Developers Kit (SDK). Единый базовый класс Cmdlet гарантирует совместимый синтаксис всех командлетов, а также автоматизирует анализ параметров командной строки и описание синтаксиса командлетов для встроенной справки. Командлеты рассматриваются в данной работе. С командами других типов можно ознакомиться, используя [1].

Данный тип команд компилируется в динамическую библиотеку (DLL) и подгружается к процессу PowerShell во время запуска оболочки (то есть сами по себе командлеты не могут быть запущены как приложения, но в них содержатся исполняемые объекты). Командлеты – это аналог внутренних команд традиционных оболочек.

Следующий тип команд – функции. Функция – это блок кода на языке PowerShell, имеющий название и находящийся в памяти до завершения текущего сеанса командной оболочки. Функции, как и командлеты, поддерживают именованные параметры. Анализ синтаксиса функции производится один раз при ее объявлении.

Сценарий – это блок кода на языке PowerShell, хранящийся во внешнем файле с расширением ps1. Анализ синтаксиса сценария производится при каждом его запуске.

Последний тип команд – внешние исполняемые файлы, которые выполняются обычным образом операционной системой.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: