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
)
...
}
Посмотрите, как атрибуты дают вам тонкоуровневый контроль OV er PowerShell. Также обратите внимание на комментарии DOC, которые могут быть использованы как для использования и помогают выглядеть примерно так:
AdvFuncToProcessPaths -?
man AdvFuncToProcessPaths -full
Это действительно очень мощное и одна из главных причин, почему я перестал писать свои собственные мало C# подсобных EXEs. Параметр синтаксического анализа оказался на 80% от кода.
btw, powershell - это де-факто инструмент CLI. – x0n