Интерфейс командной строки или PowerShell? - PullRequest
4 голосов
/ 23 июля 2010

Если бы вы сделали инструмент, который:

  1. Системные администраторы будут использовать (например, инструменты мониторинга системы или резервного копирования / восстановления)
  2. должен поддерживать сценарии в Windows

Вы бы сделали инструмент:

  1. Инструмент интерфейса командной строки?
  2. Командлет PowerShell?
  3. Инструмент с графическим интерфейсом с открытым API?

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

Ответы [ 3 ]

11 голосов
/ 23 июля 2010

PowerShell .

С PowerShell вы можете создавать команды многократного использования в сценарии PowerShell или в виде двоичного командлета PowerShell.PowerShell - это , специально предназначенный для интерфейсов командной строки, поддерживающих перенаправление вывода, а также простой запуск EXE и захват их вывода.Одна из лучших особенностей PowerShell IMO - это то, что она стандартизирует и обрабатывает параметры для вас.Все, что вам нужно сделать, это объявить параметры для вашей команды, и PowerShell предоставит вам код разбора параметров, включая поддержку типизированных, необязательных, именованных, позиционных, обязательных, привязанных к конвейеру и т. Д. Например, следующие объявления функций показывают это в действии:

function foo($Path = $(throw 'Path is required'), $Regex, [switch]$Recurse)
{
}

# Mandatory
foo 
Path is required

# Positional
foo c:\temp '.*' -recurse

# Named - note fullname isn't required - just enough to disambiguate
foo -reg '.*' -p c:\temp -rec

Расширенные функции PowerShell 2.0 предоставляют еще больше возможностей, таких как псевдонимы параметров -CN alias for -ComputerName, проверка параметров [ValidateNotNull()] и комментарии к документам для использования и справки, например:

<#
.SYNOPSIS
    Some synopsis here.
.DESCRIPTION
    Some description here.
.PARAMETER Path
    The path to the ...
.PARAMETER LiteralPath
    Specifies a path to one or more locations. Unlike Path, the value of 
    LiteralPath is used exactly as it is typed. No characters are interpreted 
    as wildcards. If the path includes escape characters, enclose it in single
    quotation marks. Single quotation marks tell Windows PowerShell not to 
    interpret any characters as escape sequences.
.EXAMPLE
    C:\PS> dir | AdvFuncToProcessPaths
    Description of the example
.NOTES
    Author: Keith Hill
    Date:   June 28, 2010    
#>
function AdvFuncToProcessPaths
{
    [CmdletBinding(DefaultParameterSetName="Path")]
    param(
        [Parameter(Mandatory=$true, Position=0, ParameterSetName="Path", 
                   ValueFromPipeline=$true, 
                   ValueFromPipelineByPropertyName=$true,
                   HelpMessage="Path to bitmap file")]
        [ValidateNotNullOrEmpty()]
        [string[]]
        $Path,

        [Alias("PSPath")]
        [Parameter(Mandatory=$true, Position=0, ParameterSetName="LiteralPath", 
                   ValueFromPipelineByPropertyName=$true,
                   HelpMessage="Path to bitmap file")]
        [ValidateNotNullOrEmpty()]
        [string[]]
        $LiteralPath
    )
    ...
}

См.как атрибуты дают вам более точный контроль над механизмом разбора параметров PowerShell.Также обратите внимание на комментарии к документам, которые можно использовать как для использования, так и для справки:

AdvFuncToProcessPaths -?
man AdvFuncToProcessPaths -full

Это действительно очень мощная и одна из главных причин, по которой я перестал писать свои собственные маленькие утилиты для C #.Синтаксический анализ параметра составил 80% кода.

0 голосов
/ 23 июля 2010

Сначала я всегда создаю инструмент командной строки:

  • Гораздо проще автоматизировать / включить в сценарии, чем графический интерфейс (гораздо меньше работы, чем создание API)
  • Этобудет работать практически на всех компьютерах с Windows (включая старые машины без установленной оболочки Power)

Хотя Power Shell - отличный инструмент для системных администраторов, я пока не думаю, что он достаточно распространен, чтобы избежатьМне также необходимо создать традиционный инструмент командной строки - следовательно, я всегда сначала создаю инструмент командной строки (хотя я мог бы также выбрать создание командлета PowerShell).

Аналогично, хотя хорошо продуманный APIэто может быть проще для сценариев, ваш API будет налагать ограничения на то, на каких языках пользователи могут писать сценарии, поэтому всегда полезно дополнительно предоставить инструмент командной строки в качестве альтернативы / простой альтернативы.

0 голосов
/ 23 июля 2010

Python .

Идеально подходит для приложений командной строки и системного администрирования.Проще кодировать, чем большинство оболочек.Кроме того, работает быстрее, чем большинство снарядов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...