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

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

Большинство команд построено для управления элементами операционной системы или приложений, таких как службы или процессы. Команды имеют разнообразные имена, которые могут соответствовать или не соответствовать семейству. Например, в системах 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.




Содержание