Кажется, что $ args имеет область действия «сценарий». Существует три области: локальный, глобальный и сценарий.
Если функция изменяется следующим образом:
function fun
{
Write-Host $script:args
}
Тогда он будет работать. «Script:» - это оператор разрешения области (по умолчанию - «local:»). Я нашел этот результат несколько экспериментально, и я не могу сказать, что я точно знаю, в чем смысл области сценария, но кажется, что переменные в области сценария в какой-то мере принадлежат самому скрипту.
Редактировать: Я принимаю свой собственный ответ как лучший, так как это то, что решило мою проблему, но также и другие ответы и их комментарии для получения некоторой полезной информации.
Приятно догадаться, но это не может быть прав. Если вы модифицируете удовольствие для принятия аргумента, Write-Host по-прежнему не выводит результат. –
О, $ args действительно ссылается на аргументы функции, НО кажется, что если функция имеет список параметров (например, function ($ x) {...}), то $ args не будут назначены, что я считаю несколько противоречит интуиции. –
Я думаю, что вы неправильно понимаете цель $ args. $ args хранит любые «неперехваченные» аргументы. Если вы определяете параметры в скрипте или функции, PowerShell попытается связать с ними аргументы. Все, что он не может связать, закончится в $ args. – JasonMArcher