В большинстве интерфейсов командной строки должно уделяться значительное время изучению имен команд и их параметров. Проблема заключается в том, что существует очень мало шаблонов имени, поэтому единственным способом изучить команды является запоминание каждой команды и каждого параметра, которые необходимо регулярно использовать.

При работе с новой командой или параметром обычно нельзя использовать то, что вы уже знаете; необходимо найти и запомнить новое имя. Если рассмотреть, как интерфейсы расширяются из небольшого набора средств при постепенном добавлении функциональных возможностей, легко понять, почему их структура нестандартна. В особенности, что касается имен команд, это может выглядеть логичным, так как каждая команда является отдельным средством, но при работе с именами команд есть способ лучше.

Большинство команд построено для управления элементами операционной системы или приложений, таких как службы или процессы. Команды имеют разнообразные имена, которые могут соответствовать или не соответствовать семейству. Например, в системах Windows можно использовать команды net start и net stop для запуска или остановки службы. Есть другое более обобщенное средство управления службами для Windows с совершенно другим именем, sc, не соответствующим шаблону именования команд службы net. Для управления процессами в Windows есть команда tasklist для предоставления списка процессов и команда taskkill для уничтожения процессов.

Команды, для которых нужны параметры, имеют нерегулярные спецификации параметров. Команду net start нельзя использовать для запуска службы на удаленном компьютере. Команда sc запускает службу на удаленном компьютере, но для задания удаленного компьютера перед его именем должны ставиться две обратные косые черты. Например, для запуска службы Spooler на удаленном компьютере с именем DC01 необходимо ввести sc \\DC01 start spooler. Для перечисления задач, выполняющихся на DC01, необходимо использовать параметр /S (system — система) и задать имя DC01 без обратных косых черт, например tasklist /S DC01.

Хотя между службой и процессом имеются важные технические различия, — это два примера управляемых элементов на компьютере, имеющем хорошо определенный жизненный цикл. Может быть необходимым запустить или остановить службу или процесс, либо получить список всех выполняющихся в настоящее время служб или процессов. Другими словами, хотя служба и процесс — это разные вещи, действия, которые производятся над службой или процессом, концептуально часто являются одинаковыми. Более того, выбор, который мы можем сделать для настройки действия заданием параметров, концептуально также может быть таким же.

Windows PowerShell использует это сходство для уменьшения количества различающихся имен, которые необходимо знать для понимания и использования командлетов.

Сокращение количества обязательных для запоминания команд при помощи шаблона глагол-существительное

Windows PowerShell использует систему именования "глагол-существительное", где имя каждого командлета состоит из обычного глагола, после которого через дефис идет специальное существительное. Глаголы Windows PowerShell не всегда являются глаголами английского языка, но они выражают определенное действие в оболочке Windows PowerShell. Существительные во многом сходны с существительными любого языка, они описывают объекты определенных типов, важные в администрировании системы. Несложно продемонстрировать, как эти состоящие из двух частей имена уменьшают необходимые для изучения усилия. Рассмотрим для этого несколько примеров глаголов и существительных.

Глаголы менее ограничены, но они должны всегда описывать, на что действует команда. В Windows PowerShell используются такие команды как Get-Process, Stop-Process, Get-Service и Stop-Service.

В случае двух существительных и двух глаголов согласованность не слишком упрощает изучение. Однако если взглянуть на обычный набор из десяти глаголов и десяти существительных, то нужно изучить только 20 слов, но при помощи их можно образовать 100 различных имен команд.

Часто по имени команды можно понять, что она выполняет, и обычно бывает очевидным, какое имя должно использоваться для новой команды. Например, команда завершения работы компьютера может выглядеть как Stop-Computer. Команда, формирующая список всех компьютеров в сети, может выглядеть как Get-Computer. Командой получения даты системы является команда Get-Date.

Можно перечислить все команды, включающие определенный глагол, задав параметр -Verb команды Get-Command (команда Get-Command будет подробно рассмотрена в следующем разделе). Например, для вывода списка всех командлетов, в которых используется глагол Get, введите:

PS> Get-Command -Verb Get
CommandType	 Name							Definition
-----------	 ----							----------
Cmdlet		Get-Acl						 Get-Acl [[-Path] <String[]>]...
Cmdlet		Get-Alias					 Get-Alias [[-Name] <String[]...
Cmdlet		Get-AuthenticodeSignature	 Get-AuthenticodeSignature [-...
Cmdlet		Get-ChildItem				 Get-ChildItem [[-Path] <Stri...
...

Параметр -Noun еще полезнее, так как позволяет вывести семейство команд, влияющих на объекты одного типа: Например, если необходимо видеть, какие команды имеются для управления службами, введите следующую команду:

PS> Get-Command -Noun Service
CommandType	 Name							Definition
-----------	 ----							----------
Cmdlet		Get-Service					 Get-Service [[-Name] <String...
Cmdlet		New-Service					 New-Service [-Name] <String>...
Cmdlet		Restart-Service				 Restart-Service [-Name] <Str...
Cmdlet		Resume-Service				Resume-Service [-Name] <Stri...
Cmdlet		Set-Service					 Set-Service [-Name] <String>...
Cmdlet		Start-Service				 Start-Service [-Name] <Strin...
Cmdlet		Stop-Service					Stop-Service [-Name] <String...
Cmdlet		Suspend-Service				 Suspend-Service [-Name] <Str... 
...

Команда — это не обязательно командлет только из-за того, что он имеет схему именования глагол-существительное. Примером собственной команды Windows PowerShell, не являющейся командлетом, но имеющей имя типа глагол-существительное, является команда очистки окна консоли Clear-Host. Команда Clear-Host в действительности является внутренней функцией, в чем можно убедиться при выполнении на ней команды Get-Command:

PS> Get-Command -Name Clear-Host

CommandType	 Name							Definition
-----------	 ----							----------
Function		Clear-Host					$spaceType = [System.Managem...

Командлеты используют стандартные параметры

Как уже отмечалось ранее, команды, используемые в традиционных интерфейсах командной строки, обычно не используют согласованные имена параметров. Иногда параметры вообще не имеют имен. Если же они имеют имя, это имя часто состоит из одного знака или аббревиатуры, которую можно быстро ввести, но которая трудно осмысливается новыми пользователями.

В отличие от большинства других традиционных интерфейсов командной строки, оболочка Windows PowerShell обрабатывает параметры непосредственно и использует этот непосредственный доступ к параметрам наряду с рекомендациями разработчика для стандартизации имен параметров. Хотя это не гарантирует того, что каждый командлет будет всегда соответствовать стандартам, такая рекомендация способствует стандартизации.

Примечание.

При использовании параметров перед их именами всегда стоит "-", что позволяет оболочке Windows PowerShell легко идентифицировать их как параметры. В примере Get-Command -Name Clear-Host параметр имеет имя Name, но вводится как -Name.

Далее приводятся некоторые из общих характеристик обычных имен параметров и использования этих параметров.

Параметр справки (?)

При указании параметра -? в каком-либо командлете командлет не исполняется. Вместо этого Windows PowerShell отображает справку для командлета.

Общие параметры

Оболочка Windows PowerShell содержит несколько параметров, называемых общими параметрами. Так как эти параметры контролируются механизмом Windows PowerShell, при каждом использовании командлетом их поведение будет всегда одинаковым. Общие параметры — это WhatIf, Confirm, Verbose, Debug, Warn, ErrorAction, ErrorVariable, OutVariable и OutBuffer.

Рекомендуемые к использованию параметры

Командлеты ядра Windows PowerShell используют стандартные имена для одинаковых параметров. Хотя использование имен параметров не является принудительным, имеется явная рекомендация по использованию имен для обеспечения стандартизации.

Например, рекомендуется именовать параметры, обращающиеся к компьютеру по имени как ComputerName, а не как Server (сервер), Host (узел), System (система), Node (узел) или другие общие альтернативные слова. Важными рекомендуемыми именами параметров являются Force, Exclude, Include, PassThru, Path и CaseSensitive.