.eProto_Pool
является собственностью $Task
. Если вы хотите разыменовать (то есть получить одно единственное свойство объекта) внутри строки, вам нужно заключить строку в $()
, оператор подвыражения в PowerShell.
Например, я создам новую хеш-таблицу с именем $MyString
, которая имеет два свойства.
$MyString = @{Name = "Stephen";Value="CoolDude"}
>$MyString
Name Value
---- -----
Value CoolDude
Name Stephen
Посмотрите, что произойдет, если я попытаюсь сослаться на него внутри строки с обычным расширением строки. Это в основном то, что вы делали в своем примере выше. Посмотрите, как это работает не так, как вы ожидаете?
write-host " The user $MyString.Name is a $MyString.Value"
The user System.Collections.Hashtable.Name is a System.Collections.Hashtable.Value
Время использовать оператор подвыражения для сохранения дня.
write-host " The user $($MyString.Name) is a $($MyString.Value)"
The user Stephen is a CoolDude
Если сомневаешься, подвыражай его.
На второй взгляд
Я думаю, что это может быть знак процента %
, который вызывает у вас горе. Это сокращение для команды ForEach-Object
в PowerShell. Попробуйте вместо этого:
Invoke-expression "$appcmd --% set config -section:system.applicationHost/applicationPools /+`"`"[name='$($Task.eProto_Pool)'].environmentVariables.[name='PRODUCT_NAME',value='eProto']`"`" /commit:apphost`""
Это должно экранировать нужные вам строки, а также передавать параметры, например, свойство eProto_Pool
$Task
.