Вам необходим $(...)
, оператор подвыражения , чтобы оценить выражение , например $ConfigFile.Configuration.EmailSettings.Path
внутри расширяемой строки .
Напротив, простая переменная ссылка , такая как $ScriptPath
, может работать без $(...)
:
Write-Host "$ScriptPath\$($ConfigFile.Configuration.EmailSettings.Path)"
Обратите внимание, что я дополнительно добавил явные двойные кавычки, чтобы сделать команду более надежной - подробности см. Ниже.
В качестве отступления: Write-Host
- это, как правило, неправильный инструмент для использования , если только намерение явно не записывать только на дисплей, минуя выходные потоки PowerShell.
Обычно без кавычек токены, которые не являются одиночными выражениями, неявно обрабатываются как расширяемые строки , т. Е. Как если бы они были переданы в двойных кавычках, и в целом применяются те же правила .
Однако, при отсутствии явного цитирования существуют дополнительные ловушки, такие как токены, начинающиеся с -
, или необходимость экранирования дополнительных символов, поэтому всегда двойные кавычки расширяемых токенов хорошая привычка формироваться.
Как PowerShell анализирует токены без кавычек в режиме аргумента в целом - сложная тема - см. этот ответ .