$ExecutionContext.InvokeCommand.ExpandString()
выполняет такой же тип расширения строки (интерполяция) , который PowerShell неявно выполняет для "..."
, то есть двойные кавычки строки .
Внутри строки в двойных кавычках , расширяющей выражение , такое как $User.Company
- в отличие от простой ссылки на переменную (например,$User
) - требует, чтобы выражение было заключено в $(...)
- в противном случае, как вы уже видели $User
, расширение само по себе , с учетом .Company
буквальный .
См. этот ответ для обзора правил расширения строк PowerShell.
У вас есть два варианта:
При этом оба решения в конечном итоге слепо выполняют любые выражения / операторы, содержащиеся в строке, поэтому вам следуетделайте это только с помощью ввода, которым вы доверяете .
Чтобы сложить все вместе:
# Sample $User object
$User = [pscustomobject] @{ Company = 'ACME Company' }
# Read the XML
$ConfigFile = [xml] '<config>
<username>$env:username</username>
<company>$User.Company</company>
</config>'
# Pass the element value of interest to $ExecutionContext.InvokeCommand.ExpandString
# after enclosing it in '$(...)' via -f, the string-formatting operator.
$ExecutionContext.InvokeCommand.ExpandString('$({0})' -f $ConfigFile.config.Company)
Выше приведено:
ACME Company