.Invoke()
- это метод .NET, поэтому применяется обычный синтаксис вызова метода: вам нужно
- круглые скобки -
(...)
- вокруг списка аргументов
- вы должны разделить аргументы с помощью
,
$funcToCall.Invoke('blah', 'poo')
Это контрастирует с собственным синтаксисом PowerShell для вызова командлетов и функций, который подобен оболочке strong> [1]:
& $funcToCall blah poo # equivalent of the method call above.
Команда, подобная приведенной выше, анализируется в < em> аргумент mode, поэтому цитирование аргументов в этом простом случае является необязательным.
Обратите внимание на необходимость &
, PowerShell оператор вызова, который необходим для выполнения блока скрипта, хранящегося в $funcToCall
; обычно это необходимо для вызова команды, хранящейся в переменной, а также для имен / путей команд, которые заключены в кавычки.
Учитывая, что легко запутаться между синтаксисом команд PowerShell и синтаксисом методов .NET, лучше всего придерживаться собственных функций PowerShell [2], если это возможно.
Тем не менее, возможность напрямую вызывать методы для типов .NET - прекрасная возможность расширения.
Чтобы избежать случайного использования синтаксиса метода при вызове команд PowerShell, вы можете использовать _ 9_ или выше, но учтите, что это влечет за собой дополнительные проверки строгости.
[1] PowerShell - это, в конце концов, оболочка, но это также полнофункциональный язык сценариев, который предлагает почти неограниченный доступ к .NET framework.
Согласование этих двух личностей - сложный баланс, а синтаксис вызова команд, подобный оболочке, является частой проблемой для новичков с опытом программирования, учитывая, что остальная часть языка выглядит как традиционное программирование язык и что методы вызова для типов .NET действительно используют традиционный синтаксис.
[2] Это означает предпочтение командлетов, функций PowerShell и операторы для использования методов базовых типов .NET; это также обычно дает вам вознаграждение за работу на более высоком уровне абстракции.
person
mklement0
schedule
22.10.2018