Рассмотрим это утверждение:
Get-Content .\zipper.ps1 | Invoke-Expression
Здесь представлен вариант, описанный в Technet.
Invoke-Expression (Get-Content '.\zipper.ps1' -Raw)
Оба оператора работают очень хорошо, хотя второй выполняется намного быстрее. Предположим, zipper.ps1 является script, содержащим несколько строк исполняемого кода Powershell.
Будет ли указанный выше оператор выполнять каждую строку в zipper.ps1 как отдельную команду?
Или будет ли выполняться весь script как одна большая конкатенированная строка?
Мой вопрос относится к ограничениям символов для операторов powershell - если каждая строка кода находится в пределе символа powershell, но весь script превысит лимит символов, превысит ли указанная выше предел символа?
PowerShell может иметь ограничение в 260 символов (не уверен). На этих страницах указаны ограничения персонажа в Powershell:
https://support.microsoft.com/en-us/kb/830473
Детали:
Состояние техники:
" Get-Content cmdlet получает содержимое элемента в месте, указанном в пути, например, в файле."
и
" Invoke-Expression cmdlet оценивает или запускает указанную строку как команду и возвращает результаты выражения или команды."
До сих пор так хорошо, что объясняет довольно ясно, как и почему мое выражение выше работает. Но это не говорит мне, выполняются ли операторы как отдельные инструкции или как одна большая конкатенированная строка. Тот факт, что вторая вариация работает быстрее, может быть ключом.
Возможно, мне нужно добавить For..Each
.
В документе по технологиям говорится, что Get-Content возвращает коллекцию, а эта статья Technet говорит, что возвращает массив. Эта противоречивая информация, но не уверен, что массив против коллекции имеет значение для моего вопроса здесь.
ТНХ