функция в PowerShell следует тем же правилам, как аргумент командлеты и родные команды, то есть аргументы разделяются пробелами (и да, это также означает, что вам не нужно цитировать ваши аргументы, поскольку они автоматически интерпретировано как строки в этом режиме синтаксического анализа):
'test' | replace test foo
так что, если вы вызываете функцию PowerShell или командлет с аргументами в скобках вы получите один аргумент, который является массивом внутри функции. Вызовы методов на объектах соответствуют другим правилам (которые выглядят примерно так же, как на C#).
Выработать немного: PowerShell имеет два различных режима, в котором он анализирует строку: режим выражение режим и команда. В режиме выражения PowerShell ведет себя как REPL. Вы можете ввести 1+1
и получить 2
назад, или введите 'foo' -replace 'o'
и получите f
назад. Командный режим предназначен для имитации поведения оболочки. Вот когда вы хотите запустить команду, например. Get-ChildItem
или & 'C:\Program Files\Foo\foo.exe' bar blah
. В скобках начинается определение режима, поэтому Write-Host (Get-ChildItem)
отличается от Write-Host Get-ChildItem
.
спасибо! вчера начался вчерашний день, и мне не хватает такой базы. – rbag
Вначале это может быть немного запутанным, особенно из C-подобных языков или оболочек Unix, но разработчики языка приложили все усилия, чтобы вы могли изучить несколько концепций и повторно использовать их во время работы с PowerShell. Небольшой намек: 'filter' ведет себя так же, как' function' с блоком 'process', поэтому вы можете немного упростить свой код для замены фильтра ($ rep, $ by) {$ _ -replace $ rep, $ by } ' – Joey
, исходящий из C#, иногда немного запутывается, но powershell кажется очень мощной альтернативой нечитаемым скриптам vbs или скомпилированному приложению C#. thx для наконечника фильтра! – rbag