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% кода.